diff --git a/fs-admin/src/main/java/com/xddcodec/fs/aspectj/RequestLoggingAspect.java b/fs-admin/src/main/java/com/xddcodec/fs/aspectj/RequestLoggingAspect.java index 1d0efbaf3291b4ab2d6e82a4cd14f7975c360e22..593ef54f4d2a811b7ce6a45dd28e5ed9aaba0c00 100644 --- a/fs-admin/src/main/java/com/xddcodec/fs/aspectj/RequestLoggingAspect.java +++ b/fs-admin/src/main/java/com/xddcodec/fs/aspectj/RequestLoggingAspect.java @@ -29,7 +29,8 @@ public class RequestLoggingAspect { * 定义切点 */ @Pointcut("within(@org.springframework.web.bind.annotation.RestController *)") - public void controllerLog() {} + public void controllerLog() { + } /** * 方法执行前日志 diff --git a/fs-admin/src/main/resources/application-dev.yml b/fs-admin/src/main/resources/application-dev.yml index 1e9ecb624846551332ed7f6391388db93cbda9f5..c4374d0d315ce635c036ec208ec0d62452df4754 100644 --- a/fs-admin/src/main/resources/application-dev.yml +++ b/fs-admin/src/main/resources/application-dev.yml @@ -27,13 +27,13 @@ spring: redis: host: 127.0.0.1 port: 6379 - password: 123456 + password: insentek database: 0 # 连接超时时间 timeout: 10s lettuce: pool: - # 连接池最大连接数 + # 连接池最大连接数f max-active: 200 # 连接池最大阻塞等待时间(使用负值表示没有限制) max-wait: -1ms @@ -54,12 +54,28 @@ redisson: config: | singleServerConfig: address: "redis://127.0.0.1:6379" - password: "123456" + password: "insentek" database: 0 timeout: 3000 connectionPoolSize: 64 connectionMinimumIdleSize: 10 +fs: + preview: + # 预览文件最大大小(字节),默认500MB + max-file-size: 524288000 + + # 单次Range请求最大大小(字节),默认10MB + # 用于视频/音频的分片传输,防止内存溢出 + max-range-size: 10485760 + + # 小文件直接传输阈值(字节),默认10MB + # 小于此大小的文件将一次性读取到内存 + small-file-size: 10485760 + + # 缓冲区大小(字节),默认8KB + buffer-size: 8192 + mybatis-flex: # sql审计 audit_enable: true diff --git a/fs-admin/src/main/resources/application.yml b/fs-admin/src/main/resources/application.yml index a82b67d42992366fc8df153a434e01f39ac23f20..735af64a6383a903a1639c64c9a4e8b2aae168c6 100644 --- a/fs-admin/src/main/resources/application.yml +++ b/fs-admin/src/main/resources/application.yml @@ -117,7 +117,6 @@ security: - /apis/user/register - /apis/user/forget-password/code/** - /apis/user/forget-password -# - /apis/share/** --- #Sa-Token 配置 sa-token: diff --git a/fs-admin/src/main/resources/static/favicon.ico b/fs-admin/src/main/resources/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..9f1881facce5b9a0701b5a4a54c73c3013c8a3d9 Binary files /dev/null and b/fs-admin/src/main/resources/static/favicon.ico differ diff --git a/fs-dependencies/pom.xml b/fs-dependencies/pom.xml index 2b3032c38d9f9543915dd02927c3c113ca4d4aba..ba34a0a68fdf138fc5e880038e3c8f78897c2144 100644 --- a/fs-dependencies/pom.xml +++ b/fs-dependencies/pom.xml @@ -124,6 +124,11 @@ fs-swagger ${revision} + + com.xddcodec.fs + fs-preview + ${revision} + com.xddcodec.fs storage-plugin-boot diff --git a/fs-framework/fs-common-core/src/main/java/com/xddcodec/fs/framework/common/enums/FileTypeEnum.java b/fs-framework/fs-common-core/src/main/java/com/xddcodec/fs/framework/common/enums/FileTypeEnum.java new file mode 100644 index 0000000000000000000000000000000000000000..ac65f240300a9304d07205e47738d65c48c46bd1 --- /dev/null +++ b/fs-framework/fs-common-core/src/main/java/com/xddcodec/fs/framework/common/enums/FileTypeEnum.java @@ -0,0 +1,329 @@ +package com.xddcodec.fs.framework.common.enums; + +import lombok.Getter; + +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * 文件类型枚举(融合预览功能) + * + * @Author: xddcode + * @Date: 2024/12/26 + */ +@Getter +public enum FileTypeEnum { + + // ==================== 图片类型 ==================== + IMAGE("image", "图片", FileCategory.IMAGE, + Arrays.asList("jpg", "jpeg", "png", "gif", "bmp", "webp", "svg", + "JPG", "JPEG", "PNG", "GIF", "BMP", "WEBP", "SVG"), + true, "preview/image", false), + + // ==================== 视频类型 ==================== + VIDEO("video", "视频", FileCategory.VIDEO, + Arrays.asList("mp4", "avi", "mkv", "mov", "wmv", "flv", "webm", + "MP4", "AVI", "MKV", "MOV", "WMV", "FLV", "WEBM"), + true, "preview/video", false), + + // ==================== 音频类型 ==================== + AUDIO("audio", "音频", FileCategory.AUDIO, + Arrays.asList("mp3", "wav", "flac", "aac", "ogg", "m4a", "wma", + "MP3", "WAV", "FLAC", "AAC", "OGG", "M4A", "WMA"), + true, "preview/audio", false), + + // ==================== 文档类型 ==================== + PDF("pdf", "PDF文档", FileCategory.DOCUMENT, + Arrays.asList("pdf", "PDF"), + true, "preview/pdf", false), + + WORD("word", "Word文档", FileCategory.DOCUMENT, + Arrays.asList("doc", "docx", "DOC", "DOCX"), + true, "preview/pdf", true), + + EXCEL("excel", "Excel表格", FileCategory.DOCUMENT, + Arrays.asList("xls", "xlsx", "XLS", "XLSX"), + true, "preview/pdf", true), + + PPT("ppt", "PPT演示", FileCategory.DOCUMENT, + Arrays.asList("ppt", "pptx", "PPT", "PPTX"), + true, "preview/pdf", true), + + // ==================== 文本类型 ==================== + TEXT("text", "文本文件", FileCategory.DOCUMENT, + Arrays.asList("txt", "log", "ini", "properties", "yaml", "yml", "conf", + "TXT", "LOG", "INI", "PROPERTIES", "YAML", "YML", "CONF"), + true, "preview/text", false), + + // ==================== 代码类型 ==================== + CODE("code", "代码文件", FileCategory.DOCUMENT, + Arrays.asList( + // Java系 + "java", "JAVA", + // JavaScript/TypeScript + "js", "jsx", "ts", "tsx", "JS", "JSX", "TS", "TSX", + // Python + "py", "PY", + // C/C++ + "c", "cpp", "h", "hpp", "cc", "cxx", + "C", "CPP", "H", "HPP", "CC", "CXX", + // Web + "html", "css", "scss", "sass", "less", "vue", + "HTML", "CSS", "SCSS", "SASS", "LESS", "VUE", + // 其他语言 + "php", "go", "rs", "rb", "swift", "kt", "scala", + "PHP", "GO", "RS", "RB", "SWIFT", "KT", "SCALA", + // 配置/脚本 + "json", "xml", "sql", "sh", "bash", "bat", "ps1", + "JSON", "XML", "SQL", "SH", "BASH", "BAT", "PS1", + // C#/.NET + "cs", "CS", + // Rust + "toml", "TOML" + ), + true, "preview/code", false), + + // ==================== Markdown ==================== + MARKDOWN("markdown", "Markdown", FileCategory.DOCUMENT, + Arrays.asList("md", "markdown", "MD", "MARKDOWN"), + true, "preview/markdown", false), + + // ==================== 压缩包 ==================== + ARCHIVE("archive", "压缩包", FileCategory.OTHER, + Arrays.asList("zip", "rar", "7z", "tar", "gz", "bz2", + "ZIP", "RAR", "7Z", "TAR", "GZ", "BZ2"), + true, "preview/archive", false), + + // ==================== 其他 ==================== + OTHER("other", "其他", FileCategory.OTHER, + null, false, "preview/unsupported", false); + + /** + * 类型标识(唯一) + */ + private final String code; + + /** + * 类型名称 + */ + private final String name; + + /** + * 所属大类 + */ + private final FileCategory category; + + /** + * 支持的文件后缀列表 + */ + private final List suffixes; + + /** + * 是否支持预览 + */ + private final Boolean previewable; + + /** + * 预览模板路径 + */ + private final String previewTemplate; + + /** + * 是否需要转换(如Office转PDF) + */ + private final Boolean needConvert; + + FileTypeEnum(String code, String name, FileCategory category, + List suffixes, Boolean previewable, + String previewTemplate, Boolean needConvert) { + this.code = code; + this.name = name; + this.category = category; + this.suffixes = suffixes; + this.previewable = previewable; + this.previewTemplate = previewTemplate; + this.needConvert = needConvert; + } + + private static final Map EXTENSION_MAP = new HashMap<>(); + private static final Map> CATEGORY_MAP = new EnumMap<>(FileCategory.class); + + static { + // 构建扩展名映射 + for (FileTypeEnum type : values()) { + if (type.getSuffixes() != null) { + for (String ext : type.getSuffixes()) { + EXTENSION_MAP.put(ext.toLowerCase(), type); + } + } + } + + // 构建分类映射 + for (FileTypeEnum type : values()) { + CATEGORY_MAP.computeIfAbsent(type.category, k -> new ArrayList<>()).add(type); + } + } + + /** + * 根据类型标识获取枚举(支持英文code或中文name) + */ + public static FileTypeEnum fromType(String type) { + if (type == null || type.trim().isEmpty()) { + return null; + } + + String trimmedType = type.trim(); + + for (FileTypeEnum fileType : values()) { + if (fileType.getCode().equalsIgnoreCase(trimmedType) + || fileType.getName().equals(trimmedType)) { + return fileType; + } + } + + return null; + } + + /** + * 根据文件后缀判断文件类型 + */ + public static FileTypeEnum fromSuffix(String suffix) { + if (suffix == null || suffix.trim().isEmpty()) { + return OTHER; + } + + String normalizedSuffix = suffix.trim().replace(".", "").toLowerCase(); + return EXTENSION_MAP.getOrDefault(normalizedSuffix, OTHER); + } + + /** + * 根据文件名判断文件类型 + */ + public static FileTypeEnum fromFileName(String fileName) { + if (fileName == null || fileName.trim().isEmpty()) { + return OTHER; + } + + int dotIndex = fileName.lastIndexOf('.'); + if (dotIndex == -1) { + return OTHER; + } + + String extension = fileName.substring(dotIndex + 1); + return fromSuffix(extension); + } + + /** + * 根据分类获取所有类型 + */ + public static List getByCategory(FileCategory category) { + return CATEGORY_MAP.getOrDefault(category, Collections.emptyList()); + } + + /** + * 判断文件扩展名是否为媒体文件(视频或音频) + */ + public static boolean isMediaFile(String extension) { + if (extension == null || extension.trim().isEmpty()) { + return false; + } + FileTypeEnum fileType = fromSuffix(extension); + return fileType == VIDEO || fileType == AUDIO; + } + + /** + * 获取分类下所有后缀(用于前端筛选) + */ + public static List getSuffixesByCategory(FileCategory category) { + return getByCategory(category).stream() + .filter(type -> type.getSuffixes() != null) + .flatMap(type -> type.getSuffixes().stream()) + .distinct() + .collect(Collectors.toList()); + } + + /** + * 获取所有已知的文件后缀 + */ + public static List getAllKnownSuffixes() { + return Stream.of(values()) + .filter(type -> type != OTHER && type.getSuffixes() != null) + .flatMap(type -> type.getSuffixes().stream()) + .distinct() + .collect(Collectors.toList()); + } + + /** + * 判断是否为其他类型 + */ + public boolean isOther() { + return this == OTHER; + } + + /** + * 判断某个后缀是否属于当前类型 + */ + public boolean containsSuffix(String suffix) { + if (suffix == null || this.suffixes == null) { + return false; + } + String normalizedSuffix = suffix.trim().replace(".", "").toLowerCase(); + return this.suffixes.stream() + .anyMatch(s -> s.equalsIgnoreCase(normalizedSuffix)); + } + + /** + * 判断是否属于指定分类 + */ + public boolean isCategory(FileCategory category) { + return this.category == category; + } + + /** + * 判断是否支持预览 + */ + public boolean isPreviewable() { + return Boolean.TRUE.equals(this.previewable); + } + + /** + * 判断是否需要转换 + */ + public boolean isNeedConvert() { + return Boolean.TRUE.equals(this.needConvert); + } + + /** + * 文件大类枚举 + */ + @Getter + public enum FileCategory { + IMAGE("image", "图片"), + VIDEO("video", "视频"), + AUDIO("audio", "音频"), + DOCUMENT("document", "文档"), + OTHER("other", "其他"); + + private final String code; + private final String name; + + FileCategory(String code, String name) { + this.code = code; + this.name = name; + } + + /** + * 根据code获取分类 + */ + public static FileCategory fromCode(String code) { + if (code == null) return null; + for (FileCategory category : values()) { + if (category.code.equalsIgnoreCase(code)) { + return category; + } + } + return null; + } + } +} diff --git a/fs-framework/fs-common-core/src/main/java/com/xddcodec/fs/framework/common/utils/FileUtils.java b/fs-framework/fs-common-core/src/main/java/com/xddcodec/fs/framework/common/utils/FileUtils.java index a20763e4757842ab7ae427500698ec97d0bec5da..52a9311454bee2ca4a210d03ef6c5b93400667ad 100644 --- a/fs-framework/fs-common-core/src/main/java/com/xddcodec/fs/framework/common/utils/FileUtils.java +++ b/fs-framework/fs-common-core/src/main/java/com/xddcodec/fs/framework/common/utils/FileUtils.java @@ -3,7 +3,6 @@ package com.xddcodec.fs.framework.common.utils; import cn.hutool.core.date.DateUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.StrUtil; -import com.xddcodec.fs.framework.common.constant.CommonConstant; import jakarta.servlet.ServletOutputStream; import jakarta.servlet.http.HttpServletResponse; @@ -20,75 +19,11 @@ import java.net.URLEncoder; * @Date: 2024/6/7 11:12 */ public class FileUtils { + private FileUtils() { throw new IllegalStateException("Utility class"); } - /** - * 合法的后缀名,后续扩展 - */ - public static String[] ALLOWED_FILE_SUFFIX = new String[]{ - "png", "bmp", "jpg", "jpeg", "pdf", - "xlsx", "xls", "gif", "svg", "txt", - "zip", "ppt", "doc", "docx", "html", - "htm", "ico", "mp3", "mp4", "java", - "sql", "xml", "js", "py", "php", "vue", - "sh", "cmd", "py3", "css", "md", "csv", - "rar", "zip", "json" - }; - - public static String[] FILE_SUFFIX_IMAGE = new String[]{"png", "bmp", "jpg", "jpeg", "svg", "gif"}; - - public static String[] FILE_SUFFIX_CODE = new String[]{"java", "sql", "js", "py", "py3", "php", "vue", "sh", "cmd", "css"}; - - public static boolean isFileAllowed(String fileName) { - for (String ext : ALLOWED_FILE_SUFFIX) { - if (ext.equals(fileName)) { - return true; - } - } - return false; - } - - public static boolean isFileAllowed(String fileName, String[] file) { - for (String ext : file) { - if (ext.equals(fileName)) { - return true; - } - } - return false; - } - - /** - * 是否为图片文件 - * - * @param suffix - * @return - */ - public static boolean isImg(String suffix) { - for (String ext : FILE_SUFFIX_IMAGE) { - if (ext.equals(suffix)) { - return true; - } - } - return false; - } - - /** - * 是否是代码文件 - * - * @param suffix - * @return - */ - public static boolean isCode(String suffix) { - for (String ext : FILE_SUFFIX_CODE) { - if (ext.equals(suffix)) { - return true; - } - } - return false; - } - public static String getContentType(String filenameExtension) { if (filenameExtension.equalsIgnoreCase(".pdf")) { return "application/pdf"; diff --git a/fs-framework/fs-preview/pom.xml b/fs-framework/fs-preview/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..0cd22e167fe438fb5b9a1352e52e500d1ba83c93 --- /dev/null +++ b/fs-framework/fs-preview/pom.xml @@ -0,0 +1,22 @@ + + + 4.0.0 + + com.xddcodec.fs + fs-framework + ${revision} + + fs-preview + + + fs-preview - 预览模块,提供文件预览支持 + + + + + com.xddcodec.fs + fs-common-core + + + diff --git a/fs-framework/fs-preview/src/main/java/com/xddcodec/fs/framework/preview/config/FilePreviewConfig.java b/fs-framework/fs-preview/src/main/java/com/xddcodec/fs/framework/preview/config/FilePreviewConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..1ce3db41e43e7e91da6b77bd81b5ccbceac31bde --- /dev/null +++ b/fs-framework/fs-preview/src/main/java/com/xddcodec/fs/framework/preview/config/FilePreviewConfig.java @@ -0,0 +1,35 @@ +package com.xddcodec.fs.framework.preview.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * 文件预览配置 + */ +@Data +@Component +@ConfigurationProperties(prefix = "fs.preview") +public class FilePreviewConfig { + + /** + * 预览文件最大大小(字节),默认500MB + */ + private Long maxFileSize = 524288000L; + + /** + * 单次Range请求最大大小(字节),默认10MB + */ + private Long maxRangeSize = 10485760L; + + /** + * 小文件直接传输阈值(字节),默认10MB + */ + private Long smallFileSize = 10485760L; + + /** + * 缓冲区大小(字节),默认8KB + */ + private Integer bufferSize = 8192; +} + diff --git a/fs-framework/fs-preview/src/main/java/com/xddcodec/fs/framework/preview/core/PreviewContext.java b/fs-framework/fs-preview/src/main/java/com/xddcodec/fs/framework/preview/core/PreviewContext.java new file mode 100644 index 0000000000000000000000000000000000000000..8610b2da62972d547d238e51c286f02ce58a3e0b --- /dev/null +++ b/fs-framework/fs-preview/src/main/java/com/xddcodec/fs/framework/preview/core/PreviewContext.java @@ -0,0 +1,41 @@ +package com.xddcodec.fs.framework.preview.core; + +import com.xddcodec.fs.framework.common.enums.FileTypeEnum; +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class PreviewContext { + + /** + * 文件名 + */ + private String fileName; + + /** + * 文件流路径 + */ + private String streamUrl; + + /** + * 文件大小 + */ + private Long fileSize; + + /** + * 文件扩展名 + */ + private String extension; + + /** + * 预览类型 + */ + private FileTypeEnum fileType; + + /** + * 是否需要转换 + */ + private Boolean needConvert; +} + diff --git a/fs-framework/fs-preview/src/main/java/com/xddcodec/fs/framework/preview/core/PreviewStrategy.java b/fs-framework/fs-preview/src/main/java/com/xddcodec/fs/framework/preview/core/PreviewStrategy.java new file mode 100644 index 0000000000000000000000000000000000000000..fc743828d69cbb189713b0b3dd453ab9a3b6cdb3 --- /dev/null +++ b/fs-framework/fs-preview/src/main/java/com/xddcodec/fs/framework/preview/core/PreviewStrategy.java @@ -0,0 +1,24 @@ +package com.xddcodec.fs.framework.preview.core; + +import com.xddcodec.fs.framework.common.enums.FileTypeEnum; +import org.springframework.ui.Model; + +public interface PreviewStrategy { + + /** + * 是否支持该类型 + */ + boolean support(FileTypeEnum type); + + /** + * 填充模板数据 + */ + void fillModel(PreviewContext context, Model model); + + /** + * 优先级(数字越小优先级越高) + */ + default int getPriority() { + return 100; + } +} diff --git a/fs-framework/fs-preview/src/main/java/com/xddcodec/fs/framework/preview/factory/PreviewStrategyManager.java b/fs-framework/fs-preview/src/main/java/com/xddcodec/fs/framework/preview/factory/PreviewStrategyManager.java new file mode 100644 index 0000000000000000000000000000000000000000..15dcf93de1ddf37beeace6bcc8ea4bc083eab861 --- /dev/null +++ b/fs-framework/fs-preview/src/main/java/com/xddcodec/fs/framework/preview/factory/PreviewStrategyManager.java @@ -0,0 +1,54 @@ +package com.xddcodec.fs.framework.preview.factory; + +import com.xddcodec.fs.framework.common.enums.FileTypeEnum; +import com.xddcodec.fs.framework.preview.core.PreviewStrategy; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Comparator; +import java.util.List; + +/** + * 预览策略管理器 + */ +@Slf4j +@Component +public class PreviewStrategyManager { + + private final List strategies; + private final PreviewStrategy defaultStrategy; + + public PreviewStrategyManager(List strategies) { + this.strategies = strategies.stream() + .sorted(Comparator.comparingInt(PreviewStrategy::getPriority)) + .toList(); + + // 找到兜底策略(UnsupportedPreviewStrategy,优先级最低) + this.defaultStrategy = strategies.stream() + .max(Comparator.comparingInt(PreviewStrategy::getPriority)) + .orElse(null); + + log.info("加载 {} 个预览策略", strategies.size()); + if (defaultStrategy != null) { + log.info("默认策略: {}", defaultStrategy.getClass().getSimpleName()); + } + } + + /** + * 获取预览策略 + * 注意:此方法不应该抛异常,因为Service层已经检查过isPreviewable() + */ + public PreviewStrategy getStrategy(FileTypeEnum fileType) { + PreviewStrategy strategy = strategies.stream() + .filter(s -> s.support(fileType)) + .findFirst() + .orElse(defaultStrategy); + + if (strategy == null) { + log.error("找不到预览策略: fileType={}", fileType.getName()); + throw new IllegalStateException("预览策略未正确初始化"); + } + + return strategy; + } +} diff --git a/fs-framework/fs-preview/src/main/java/com/xddcodec/fs/framework/preview/strategy/AbstractPreviewStrategy.java b/fs-framework/fs-preview/src/main/java/com/xddcodec/fs/framework/preview/strategy/AbstractPreviewStrategy.java new file mode 100644 index 0000000000000000000000000000000000000000..ec7cd6c06c442748146860dfb51124b126747752 --- /dev/null +++ b/fs-framework/fs-preview/src/main/java/com/xddcodec/fs/framework/preview/strategy/AbstractPreviewStrategy.java @@ -0,0 +1,35 @@ +package com.xddcodec.fs.framework.preview.strategy; + +import com.xddcodec.fs.framework.preview.core.PreviewContext; +import com.xddcodec.fs.framework.preview.core.PreviewStrategy; +import lombok.extern.slf4j.Slf4j; +import org.springframework.ui.Model; + + +/** + * 抽象预览策略(提供通用功能) + */ +@Slf4j +public abstract class AbstractPreviewStrategy implements PreviewStrategy { + + @Override + public void fillModel(PreviewContext context, Model model) { + // 填充基础数据 + model.addAttribute("fileName", context.getFileName()); + model.addAttribute("fileSize", context.getFileSize()); + model.addAttribute("fileType", context.getFileType().getName()); + model.addAttribute("extension", context.getExtension()); + model.addAttribute("streamUrl", context.getStreamUrl()); + + // 子类填充特定数据 + fillSpecificModel(context, model); + + log.info("策略 [{}] 填充完成", this.getClass().getSimpleName()); + } + + /** + * 子类实现:填充特定数据 + */ + protected abstract void fillSpecificModel(PreviewContext context, Model model); +} + diff --git a/fs-framework/fs-preview/src/main/java/com/xddcodec/fs/framework/preview/strategy/impl/AudioPreviewStrategy.java b/fs-framework/fs-preview/src/main/java/com/xddcodec/fs/framework/preview/strategy/impl/AudioPreviewStrategy.java new file mode 100644 index 0000000000000000000000000000000000000000..30d1b3f35bf8399e5546f6cb52dc73e92a6c715a --- /dev/null +++ b/fs-framework/fs-preview/src/main/java/com/xddcodec/fs/framework/preview/strategy/impl/AudioPreviewStrategy.java @@ -0,0 +1,35 @@ +package com.xddcodec.fs.framework.preview.strategy.impl; + +import com.xddcodec.fs.framework.common.enums.FileTypeEnum; +import com.xddcodec.fs.framework.preview.core.PreviewContext; +import com.xddcodec.fs.framework.preview.strategy.AbstractPreviewStrategy; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.ui.Model; + +/** + * 音频预览策略 + */ +@Slf4j +@Component +public class AudioPreviewStrategy extends AbstractPreviewStrategy { + + @Override + public boolean support(FileTypeEnum fileType) { + return fileType == FileTypeEnum.AUDIO; + } + + @Override + protected void fillSpecificModel(PreviewContext context, Model model) { + log.info("音频预览策略填充完成 - 文件名: {}, 格式: {}, 大小: {}", + context.getFileName(), + context.getExtension(), + context.getFileSize()); + } + + @Override + public int getPriority() { + return 16; + } +} + diff --git a/fs-framework/fs-preview/src/main/java/com/xddcodec/fs/framework/preview/strategy/impl/CodePreviewStrategy.java b/fs-framework/fs-preview/src/main/java/com/xddcodec/fs/framework/preview/strategy/impl/CodePreviewStrategy.java new file mode 100644 index 0000000000000000000000000000000000000000..d9a28c1483eb1f14ba14c1152f085942076b976a --- /dev/null +++ b/fs-framework/fs-preview/src/main/java/com/xddcodec/fs/framework/preview/strategy/impl/CodePreviewStrategy.java @@ -0,0 +1,54 @@ +package com.xddcodec.fs.framework.preview.strategy.impl; + +import com.xddcodec.fs.framework.common.enums.FileTypeEnum; +import com.xddcodec.fs.framework.preview.core.PreviewContext; +import com.xddcodec.fs.framework.preview.strategy.AbstractPreviewStrategy; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.ui.Model; + +import java.util.Map; + +@Slf4j +@Component +public class CodePreviewStrategy extends AbstractPreviewStrategy { + private static final Map LANGUAGE_MAP = Map.ofEntries( + Map.entry("java", "java"), + Map.entry("js", "javascript"), + Map.entry("jsx", "javascript"), + Map.entry("ts", "typescript"), + Map.entry("tsx", "typescript"), + Map.entry("py", "python"), + Map.entry("html", "html"), + Map.entry("htm", "html"), + Map.entry("css", "css"), + Map.entry("scss", "css"), + Map.entry("less", "css"), + Map.entry("sql", "sql"), + Map.entry("json", "json"), + Map.entry("xml", "xml"), + Map.entry("yaml", "yaml"), + Map.entry("yml", "yaml"), + Map.entry("md", "markdown.html") + ); + + @Override + public boolean support(FileTypeEnum fileType) { + return fileType == FileTypeEnum.CODE; + } + + @Override + protected void fillSpecificModel(PreviewContext context, Model model) { + String language = LANGUAGE_MAP.getOrDefault( + context.getExtension() == null ? "" : context.getExtension().toLowerCase(), + "plaintext" + ); + model.addAttribute("language", language); + } + + + @Override + public int getPriority() { + return 30; + } +} diff --git a/fs-framework/fs-preview/src/main/java/com/xddcodec/fs/framework/preview/strategy/impl/ImagePreviewStrategy.java b/fs-framework/fs-preview/src/main/java/com/xddcodec/fs/framework/preview/strategy/impl/ImagePreviewStrategy.java new file mode 100644 index 0000000000000000000000000000000000000000..98b28e3f80269c590abacb4ad611ea8c4f61c252 --- /dev/null +++ b/fs-framework/fs-preview/src/main/java/com/xddcodec/fs/framework/preview/strategy/impl/ImagePreviewStrategy.java @@ -0,0 +1,39 @@ +package com.xddcodec.fs.framework.preview.strategy.impl; + +import com.xddcodec.fs.framework.common.enums.FileTypeEnum; +import com.xddcodec.fs.framework.preview.core.PreviewContext; +import com.xddcodec.fs.framework.preview.strategy.AbstractPreviewStrategy; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.ui.Model; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.File; + +/** + * 图片预览策略 + */ +@Slf4j +@Component +public class ImagePreviewStrategy extends AbstractPreviewStrategy { + + @Override + public boolean support(FileTypeEnum fileType) { + return fileType == FileTypeEnum.IMAGE; + } + + @Override + protected void fillSpecificModel(PreviewContext context, Model model) { + log.info("图片预览策略填充完成 - 文件名: {}, 格式: {}, 大小: {}", + context.getFileName(), + context.getExtension(), + context.getFileSize()); + } + + @Override + public int getPriority() { + return 10; + } + +} diff --git a/fs-framework/fs-preview/src/main/java/com/xddcodec/fs/framework/preview/strategy/impl/MarkdownPreviewStrategy.java b/fs-framework/fs-preview/src/main/java/com/xddcodec/fs/framework/preview/strategy/impl/MarkdownPreviewStrategy.java new file mode 100644 index 0000000000000000000000000000000000000000..7fd8ea08bb66c886b86f0e3bf274883ffcbea7de --- /dev/null +++ b/fs-framework/fs-preview/src/main/java/com/xddcodec/fs/framework/preview/strategy/impl/MarkdownPreviewStrategy.java @@ -0,0 +1,33 @@ +package com.xddcodec.fs.framework.preview.strategy.impl; + +import com.xddcodec.fs.framework.common.enums.FileTypeEnum; +import com.xddcodec.fs.framework.preview.core.PreviewContext; +import com.xddcodec.fs.framework.preview.strategy.AbstractPreviewStrategy; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.ui.Model; + +/** + * Markdown 预览策略 + * 支持 .md 和 .markdown 文件的在线预览 + */ +@Slf4j +@Component +public class MarkdownPreviewStrategy extends AbstractPreviewStrategy { + + @Override + public boolean support(FileTypeEnum fileType) { + return fileType == FileTypeEnum.MARKDOWN; + } + + @Override + protected void fillSpecificModel(PreviewContext context, Model model) { + log.info("Markdown 预览策略填充完成 - 文件名: {}, 大小: {} bytes", + context.getFileName(), context.getFileSize()); + } + + @Override + public int getPriority() { + return 25; + } +} diff --git a/fs-framework/fs-preview/src/main/java/com/xddcodec/fs/framework/preview/strategy/impl/PdfPreviewStrategy.java b/fs-framework/fs-preview/src/main/java/com/xddcodec/fs/framework/preview/strategy/impl/PdfPreviewStrategy.java new file mode 100644 index 0000000000000000000000000000000000000000..87011b1a241413fdc1438d517cdfbff6eb290c08 --- /dev/null +++ b/fs-framework/fs-preview/src/main/java/com/xddcodec/fs/framework/preview/strategy/impl/PdfPreviewStrategy.java @@ -0,0 +1,50 @@ +package com.xddcodec.fs.framework.preview.strategy.impl; + +import com.xddcodec.fs.framework.common.enums.FileTypeEnum; +import com.xddcodec.fs.framework.preview.core.PreviewContext; +import com.xddcodec.fs.framework.preview.strategy.AbstractPreviewStrategy; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.ui.Model; + +/** + * ✅ PDF预览策略 + */ +@Slf4j +@Component +public class PdfPreviewStrategy extends AbstractPreviewStrategy { + + @Override + public boolean support(FileTypeEnum fileType) { + // 支持 PDF 本身,以及需要转换为 PDF 的类型(Word/Excel/PPT) + return fileType == FileTypeEnum.PDF + || fileType == FileTypeEnum.WORD + || fileType == FileTypeEnum.EXCEL + || fileType == FileTypeEnum.PPT; + } + + @Override + protected void fillSpecificModel(PreviewContext context, Model model) { + FileTypeEnum fileType = context.getFileType(); + + Boolean needConvert = context.getNeedConvert(); + if (needConvert != null && needConvert) { + model.addAttribute("needConvert", true); + model.addAttribute("originalType", fileType.getName()); + model.addAttribute("convertStatus", "pending"); + + log.info("Office 文档需要转换 - 文件: {}, 类型: {} -> PDF", + context.getFileName(), fileType.getName()); + } else { + model.addAttribute("needConvert", false); + log.info("PDF 文档直接预览 - 文件: {}", context.getFileName()); + } + + log.info("PDF 预览策略填充完成 - 文件名: {}", context.getFileName()); + } + + @Override + public int getPriority() { + return 20; + } +} diff --git a/fs-framework/fs-preview/src/main/java/com/xddcodec/fs/framework/preview/strategy/impl/UnsupportedPreviewStrategy.java b/fs-framework/fs-preview/src/main/java/com/xddcodec/fs/framework/preview/strategy/impl/UnsupportedPreviewStrategy.java new file mode 100644 index 0000000000000000000000000000000000000000..1f373965fdb57200d6ea9f4a8978c00179550283 --- /dev/null +++ b/fs-framework/fs-preview/src/main/java/com/xddcodec/fs/framework/preview/strategy/impl/UnsupportedPreviewStrategy.java @@ -0,0 +1,34 @@ +package com.xddcodec.fs.framework.preview.strategy.impl; + +import com.xddcodec.fs.framework.common.enums.FileTypeEnum; +import com.xddcodec.fs.framework.preview.core.PreviewContext; +import com.xddcodec.fs.framework.preview.strategy.AbstractPreviewStrategy; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.ui.Model; + +/** + * 不支持预览的策略(兜底) + */ +@Slf4j +@Component +public class UnsupportedPreviewStrategy extends AbstractPreviewStrategy { + + @Override + public boolean support(FileTypeEnum fileType) { + return !fileType.isPreviewable(); + } + + @Override + protected void fillSpecificModel(PreviewContext context, Model model) { + log.warn("不支持预览的文件类型: {}", context.getFileType().getName()); + + model.addAttribute("message", "该文件类型暂不支持在线预览"); + model.addAttribute("supportDownload", true); + } + + @Override + public int getPriority() { + return 999; // 最低优先级(兜底) + } +} diff --git a/fs-framework/fs-preview/src/main/java/com/xddcodec/fs/framework/preview/strategy/impl/VideoPreviewStrategy.java b/fs-framework/fs-preview/src/main/java/com/xddcodec/fs/framework/preview/strategy/impl/VideoPreviewStrategy.java new file mode 100644 index 0000000000000000000000000000000000000000..f4bcc6dafb0ff529544035592986806a0fc29099 --- /dev/null +++ b/fs-framework/fs-preview/src/main/java/com/xddcodec/fs/framework/preview/strategy/impl/VideoPreviewStrategy.java @@ -0,0 +1,35 @@ +package com.xddcodec.fs.framework.preview.strategy.impl; + +import com.xddcodec.fs.framework.common.enums.FileTypeEnum; +import com.xddcodec.fs.framework.preview.core.PreviewContext; +import com.xddcodec.fs.framework.preview.strategy.AbstractPreviewStrategy; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.ui.Model; + +/** + * 视频预览策略 + */ +@Slf4j +@Component +public class VideoPreviewStrategy extends AbstractPreviewStrategy { + + @Override + public boolean support(FileTypeEnum fileType) { + return fileType == FileTypeEnum.VIDEO; + } + + @Override + protected void fillSpecificModel(PreviewContext context, Model model) { + log.info("视频预览策略填充完成 - 文件名: {}, 格式: {}, 大小: {}", + context.getFileName(), + context.getExtension(), + context.getFileSize()); + } + + @Override + public int getPriority() { + return 15; + } +} + diff --git a/fs-framework/fs-preview/src/main/resources/static/lib/marked/highlight.min.js b/fs-framework/fs-preview/src/main/resources/static/lib/marked/highlight.min.js new file mode 100644 index 0000000000000000000000000000000000000000..4a9444ef55c9f535a4f0a6721415b3ee6a240df6 --- /dev/null +++ b/fs-framework/fs-preview/src/main/resources/static/lib/marked/highlight.min.js @@ -0,0 +1 @@ +var hljs=new function(){function k(v){return v.replace(/&/gm,"&").replace(//gm,">")}function t(v){return v.nodeName.toLowerCase()}function i(w,x){var v=w&&w.exec(x);return v&&v.index==0}function d(v){return Array.prototype.map.call(v.childNodes,function(w){if(w.nodeType==3){return b.useBR?w.nodeValue.replace(/\n/g,""):w.nodeValue}if(t(w)=="br"){return"\n"}return d(w)}).join("")}function r(w){var v=(w.className+" "+(w.parentNode?w.parentNode.className:"")).split(/\s+/);v=v.map(function(x){return x.replace(/^language-/,"")});return v.filter(function(x){return j(x)||x=="no-highlight"})[0]}function o(x,y){var v={};for(var w in x){v[w]=x[w]}if(y){for(var w in y){v[w]=y[w]}}return v}function u(x){var v=[];(function w(y,z){for(var A=y.firstChild;A;A=A.nextSibling){if(A.nodeType==3){z+=A.nodeValue.length}else{if(t(A)=="br"){z+=1}else{if(A.nodeType==1){v.push({event:"start",offset:z,node:A});z=w(A,z);v.push({event:"stop",offset:z,node:A})}}}}return z})(x,0);return v}function q(w,y,C){var x=0;var F="";var z=[];function B(){if(!w.length||!y.length){return w.length?w:y}if(w[0].offset!=y[0].offset){return(w[0].offset"}function E(G){F+=""}function v(G){(G.event=="start"?A:E)(G.node)}while(w.length||y.length){var D=B();F+=k(C.substr(x,D[0].offset-x));x=D[0].offset;if(D==w){z.reverse().forEach(E);do{v(D.splice(0,1)[0]);D=B()}while(D==w&&D.length&&D[0].offset==x);z.reverse().forEach(A)}else{if(D[0].event=="start"){z.push(D[0].node)}else{z.pop()}v(D.splice(0,1)[0])}}return F+k(C.substr(x))}function m(y){function v(z){return(z&&z.source)||z}function w(A,z){return RegExp(v(A),"m"+(y.cI?"i":"")+(z?"g":""))}function x(D,C){if(D.compiled){return}D.compiled=true;D.k=D.k||D.bK;if(D.k){var z={};function E(G,F){if(y.cI){F=F.toLowerCase()}F.split(" ").forEach(function(H){var I=H.split("|");z[I[0]]=[G,I[1]?Number(I[1]):1]})}if(typeof D.k=="string"){E("keyword",D.k)}else{Object.keys(D.k).forEach(function(F){E(F,D.k[F])})}D.k=z}D.lR=w(D.l||/\b[A-Za-z0-9_]+\b/,true);if(C){if(D.bK){D.b=D.bK.split(" ").join("|")}if(!D.b){D.b=/\B|\b/}D.bR=w(D.b);if(!D.e&&!D.eW){D.e=/\B|\b/}if(D.e){D.eR=w(D.e)}D.tE=v(D.e)||"";if(D.eW&&C.tE){D.tE+=(D.e?"|":"")+C.tE}}if(D.i){D.iR=w(D.i)}if(D.r===undefined){D.r=1}if(!D.c){D.c=[]}var B=[];D.c.forEach(function(F){if(F.v){F.v.forEach(function(G){B.push(o(F,G))})}else{B.push(F=="self"?D:F)}});D.c=B;D.c.forEach(function(F){x(F,D)});if(D.starts){x(D.starts,C)}var A=D.c.map(function(F){return F.bK?"\\.?\\b("+F.b+")\\b\\.?":F.b}).concat([D.tE]).concat([D.i]).map(v).filter(Boolean);D.t=A.length?w(A.join("|"),true):{exec:function(F){return null}};D.continuation={}}x(y)}function c(S,L,J,R){function v(U,V){for(var T=0;T";U+=Z+'">';return U+X+Y}function N(){var U=k(C);if(!I.k){return U}var T="";var X=0;I.lR.lastIndex=0;var V=I.lR.exec(U);while(V){T+=U.substr(X,V.index-X);var W=E(I,V);if(W){H+=W[1];T+=w(W[0],V[0])}else{T+=V[0]}X=I.lR.lastIndex;V=I.lR.exec(U)}return T+U.substr(X)}function F(){if(I.sL&&!f[I.sL]){return k(C)}var T=I.sL?c(I.sL,C,true,I.continuation.top):g(C);if(I.r>0){H+=T.r}if(I.subLanguageMode=="continuous"){I.continuation.top=T.top}return w(T.language,T.value,false,true)}function Q(){return I.sL!==undefined?F():N()}function P(V,U){var T=V.cN?w(V.cN,"",true):"";if(V.rB){D+=T;C=""}else{if(V.eB){D+=k(U)+T;C=""}else{D+=T;C=U}}I=Object.create(V,{parent:{value:I}})}function G(T,X){C+=T;if(X===undefined){D+=Q();return 0}var V=v(X,I);if(V){D+=Q();P(V,X);return V.rB?0:X.length}var W=z(I,X);if(W){var U=I;if(!(U.rE||U.eE)){C+=X}D+=Q();do{if(I.cN){D+=""}H+=I.r;I=I.parent}while(I!=W.parent);if(U.eE){D+=k(X)}C="";if(W.starts){P(W.starts,"")}return U.rE?0:X.length}if(A(X,I)){throw new Error('Illegal lexeme "'+X+'" for mode "'+(I.cN||"")+'"')}C+=X;return X.length||1}var M=j(S);if(!M){throw new Error('Unknown language: "'+S+'"')}m(M);var I=R||M;var D="";for(var K=I;K!=M;K=K.parent){if(K.cN){D=w(K.cN,D,true)}}var C="";var H=0;try{var B,y,x=0;while(true){I.t.lastIndex=x;B=I.t.exec(L);if(!B){break}y=G(L.substr(x,B.index-x),B[0]);x=B.index+y}G(L.substr(x));for(var K=I;K.parent;K=K.parent){if(K.cN){D+=""}}return{r:H,value:D,language:S,top:I}}catch(O){if(O.message.indexOf("Illegal")!=-1){return{r:0,value:k(L)}}else{throw O}}}function g(y,x){x=x||b.languages||Object.keys(f);var v={r:0,value:k(y)};var w=v;x.forEach(function(z){if(!j(z)){return}var A=c(z,y,false);A.language=z;if(A.r>w.r){w=A}if(A.r>v.r){w=v;v=A}});if(w.language){v.second_best=w}return v}function h(v){if(b.tabReplace){v=v.replace(/^((<[^>]+>|\t)+)/gm,function(w,z,y,x){return z.replace(/\t/g,b.tabReplace)})}if(b.useBR){v=v.replace(/\n/g,"
")}return v}function p(z){var y=d(z);var A=r(z);if(A=="no-highlight"){return}var v=A?c(A,y,true):g(y);var w=u(z);if(w.length){var x=document.createElementNS("http://www.w3.org/1999/xhtml","pre");x.innerHTML=v.value;v.value=q(w,u(x),y)}v.value=h(v.value);z.innerHTML=v.value;z.className+=" hljs "+(!A&&v.language||"");z.result={language:v.language,re:v.r};if(v.second_best){z.second_best={language:v.second_best.language,re:v.second_best.r}}}var b={classPrefix:"hljs-",tabReplace:null,useBR:false,languages:undefined};function s(v){b=o(b,v)}function l(){if(l.called){return}l.called=true;var v=document.querySelectorAll("pre code");Array.prototype.forEach.call(v,p)}function a(){addEventListener("DOMContentLoaded",l,false);addEventListener("load",l,false)}var f={};var n={};function e(v,x){var w=f[v]=x(this);if(w.aliases){w.aliases.forEach(function(y){n[y]=v})}}function j(v){return f[v]||f[n[v]]}this.highlight=c;this.highlightAuto=g;this.fixMarkup=h;this.highlightBlock=p;this.configure=s;this.initHighlighting=l;this.initHighlightingOnLoad=a;this.registerLanguage=e;this.getLanguage=j;this.inherit=o;this.IR="[a-zA-Z][a-zA-Z0-9_]*";this.UIR="[a-zA-Z_][a-zA-Z0-9_]*";this.NR="\\b\\d+(\\.\\d+)?";this.CNR="(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)";this.BNR="\\b(0b[01]+)";this.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~";this.BE={b:"\\\\[\\s\\S]",r:0};this.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[this.BE]};this.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[this.BE]};this.CLCM={cN:"comment",b:"//",e:"$"};this.CBLCLM={cN:"comment",b:"/\\*",e:"\\*/"};this.HCM={cN:"comment",b:"#",e:"$"};this.NM={cN:"number",b:this.NR,r:0};this.CNM={cN:"number",b:this.CNR,r:0};this.BNM={cN:"number",b:this.BNR,r:0};this.REGEXP_MODE={cN:"regexp",b:/\//,e:/\/[gim]*/,i:/\n/,c:[this.BE,{b:/\[/,e:/\]/,r:0,c:[this.BE]}]};this.TM={cN:"title",b:this.IR,r:0};this.UTM={cN:"title",b:this.UIR,r:0}}();hljs.registerLanguage("ruleslanguage",function(a){return{k:{keyword:"BILL_PERIOD BILL_START BILL_STOP RS_EFFECTIVE_START RS_EFFECTIVE_STOP RS_JURIS_CODE RS_OPCO_CODE INTDADDATTRIBUTE|5 INTDADDVMSG|5 INTDBLOCKOP|5 INTDBLOCKOPNA|5 INTDCLOSE|5 INTDCOUNT|5 INTDCOUNTSTATUSCODE|5 INTDCREATEMASK|5 INTDCREATEDAYMASK|5 INTDCREATEFACTORMASK|5 INTDCREATEHANDLE|5 INTDCREATEOVERRIDEDAYMASK|5 INTDCREATEOVERRIDEMASK|5 INTDCREATESTATUSCODEMASK|5 INTDCREATETOUPERIOD|5 INTDDELETE|5 INTDDIPTEST|5 INTDEXPORT|5 INTDGETERRORCODE|5 INTDGETERRORMESSAGE|5 INTDISEQUAL|5 INTDJOIN|5 INTDLOAD|5 INTDLOADACTUALCUT|5 INTDLOADDATES|5 INTDLOADHIST|5 INTDLOADLIST|5 INTDLOADLISTDATES|5 INTDLOADLISTENERGY|5 INTDLOADLISTHIST|5 INTDLOADRELATEDCHANNEL|5 INTDLOADSP|5 INTDLOADSTAGING|5 INTDLOADUOM|5 INTDLOADUOMDATES|5 INTDLOADUOMHIST|5 INTDLOADVERSION|5 INTDOPEN|5 INTDREADFIRST|5 INTDREADNEXT|5 INTDRECCOUNT|5 INTDRELEASE|5 INTDREPLACE|5 INTDROLLAVG|5 INTDROLLPEAK|5 INTDSCALAROP|5 INTDSCALE|5 INTDSETATTRIBUTE|5 INTDSETDSTPARTICIPANT|5 INTDSETSTRING|5 INTDSETVALUE|5 INTDSETVALUESTATUS|5 INTDSHIFTSTARTTIME|5 INTDSMOOTH|5 INTDSORT|5 INTDSPIKETEST|5 INTDSUBSET|5 INTDTOU|5 INTDTOURELEASE|5 INTDTOUVALUE|5 INTDUPDATESTATS|5 INTDVALUE|5 STDEV INTDDELETEEX|5 INTDLOADEXACTUAL|5 INTDLOADEXCUT|5 INTDLOADEXDATES|5 INTDLOADEX|5 INTDLOADEXRELATEDCHANNEL|5 INTDSAVEEX|5 MVLOAD|5 MVLOADACCT|5 MVLOADACCTDATES|5 MVLOADACCTHIST|5 MVLOADDATES|5 MVLOADHIST|5 MVLOADLIST|5 MVLOADLISTDATES|5 MVLOADLISTHIST|5 IF FOR NEXT DONE SELECT END CALL ABORT CLEAR CHANNEL FACTOR LIST NUMBER OVERRIDE SET WEEK DISTRIBUTIONNODE ELSE WHEN THEN OTHERWISE IENUM CSV INCLUDE LEAVE RIDER SAVE DELETE NOVALUE SECTION WARN SAVE_UPDATE DETERMINANT LABEL REPORT REVENUE EACH IN FROM TOTAL CHARGE BLOCK AND OR CSV_FILE RATE_CODE AUXILIARY_DEMAND UIDACCOUNT RS BILL_PERIOD_SELECT HOURS_PER_MONTH INTD_ERROR_STOP SEASON_SCHEDULE_NAME ACCOUNTFACTOR ARRAYUPPERBOUND CALLSTOREDPROC GETADOCONNECTION GETCONNECT GETDATASOURCE GETQUALIFIER GETUSERID HASVALUE LISTCOUNT LISTOP LISTUPDATE LISTVALUE PRORATEFACTOR RSPRORATE SETBINPATH SETDBMONITOR WQ_OPEN BILLINGHOURS DATE DATEFROMFLOAT DATETIMEFROMSTRING DATETIMETOSTRING DATETOFLOAT DAY DAYDIFF DAYNAME DBDATETIME HOUR MINUTE MONTH MONTHDIFF MONTHHOURS MONTHNAME ROUNDDATE SAMEWEEKDAYLASTYEAR SECOND WEEKDAY WEEKDIFF YEAR YEARDAY YEARSTR COMPSUM HISTCOUNT HISTMAX HISTMIN HISTMINNZ HISTVALUE MAXNRANGE MAXRANGE MINRANGE COMPIKVA COMPKVA COMPKVARFROMKQKW COMPLF IDATTR FLAG LF2KW LF2KWH MAXKW POWERFACTOR READING2USAGE AVGSEASON MAXSEASON MONTHLYMERGE SEASONVALUE SUMSEASON ACCTREADDATES ACCTTABLELOAD CONFIGADD CONFIGGET CREATEOBJECT CREATEREPORT EMAILCLIENT EXPBLKMDMUSAGE EXPMDMUSAGE EXPORT_USAGE FACTORINEFFECT GETUSERSPECIFIEDSTOP INEFFECT ISHOLIDAY RUNRATE SAVE_PROFILE SETREPORTTITLE USEREXIT WATFORRUNRATE TO TABLE ACOS ASIN ATAN ATAN2 BITAND CEIL COS COSECANT COSH COTANGENT DIVQUOT DIVREM EXP FABS FLOOR FMOD FREPM FREXPN LOG LOG10 MAX MAXN MIN MINNZ MODF POW ROUND ROUND2VALUE ROUNDINT SECANT SIN SINH SQROOT TAN TANH FLOAT2STRING FLOAT2STRINGNC INSTR LEFT LEN LTRIM MID RIGHT RTRIM STRING STRINGNC TOLOWER TOUPPER TRIM NUMDAYS READ_DATE STAGING",built_in:"IDENTIFIER OPTIONS XML_ELEMENT XML_OP XML_ELEMENT_OF DOMDOCCREATE DOMDOCLOADFILE DOMDOCLOADXML DOMDOCSAVEFILE DOMDOCGETROOT DOMDOCADDPI DOMNODEGETNAME DOMNODEGETTYPE DOMNODEGETVALUE DOMNODEGETCHILDCT DOMNODEGETFIRSTCHILD DOMNODEGETSIBLING DOMNODECREATECHILDELEMENT DOMNODESETATTRIBUTE DOMNODEGETCHILDELEMENTCT DOMNODEGETFIRSTCHILDELEMENT DOMNODEGETSIBLINGELEMENT DOMNODEGETATTRIBUTECT DOMNODEGETATTRIBUTEI DOMNODEGETATTRIBUTEBYNAME DOMNODEGETBYNAME"},c:[a.CLCM,a.CBLCLM,a.ASM,a.QSM,a.CNM,{cN:"array",b:"#[a-zA-Z .]+"}]}});hljs.registerLanguage("ruby",function(e){var h="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?";var g="and false then defined module in return redo if BEGIN retry end for true self when next until do begin unless END rescue nil else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor";var a={cN:"yardoctag",b:"@[A-Za-z]+"};var i={cN:"comment",v:[{b:"#",e:"$",c:[a]},{b:"^\\=begin",e:"^\\=end",c:[a],r:10},{b:"^__END__",e:"\\n$"}]};var c={cN:"subst",b:"#\\{",e:"}",k:g};var d={cN:"string",c:[e.BE,c],v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:"%[qw]?\\(",e:"\\)"},{b:"%[qw]?\\[",e:"\\]"},{b:"%[qw]?{",e:"}"},{b:"%[qw]?<",e:">",r:10},{b:"%[qw]?/",e:"/",r:10},{b:"%[qw]?%",e:"%",r:10},{b:"%[qw]?-",e:"-",r:10},{b:"%[qw]?\\|",e:"\\|",r:10},{b:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/}]};var b={cN:"params",b:"\\(",e:"\\)",k:g};var f=[d,i,{cN:"class",bK:"class module",e:"$|;",i:/=/,c:[e.inherit(e.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{cN:"inheritance",b:"<\\s*",c:[{cN:"parent",b:"("+e.IR+"::)?"+e.IR}]},i]},{cN:"function",bK:"def",e:" |$|;",r:0,c:[e.inherit(e.TM,{b:h}),b,i]},{cN:"constant",b:"(::)?(\\b[A-Z]\\w*(::)?)+",r:0},{cN:"symbol",b:":",c:[d,{b:h}],r:0},{cN:"symbol",b:e.UIR+"(\\!|\\?)?:",r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{cN:"variable",b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{b:"("+e.RSR+")\\s*",c:[i,{cN:"regexp",c:[e.BE,c],i:/\n/,v:[{b:"/",e:"/[a-z]*"},{b:"%r{",e:"}[a-z]*"},{b:"%r\\(",e:"\\)[a-z]*"},{b:"%r!",e:"![a-z]*"},{b:"%r\\[",e:"\\][a-z]*"}]}],r:0}];c.c=f;b.c=f;return{k:g,c:f}});hljs.registerLanguage("haml",function(a){return{cI:true,c:[{cN:"doctype",b:"^!!!( (5|1\\.1|Strict|Frameset|Basic|Mobile|RDFa|XML\\b.*))?$",r:10},{cN:"comment",b:"^\\s*(!=#|=#|-#|/).*$",r:0},{b:"^\\s*(-|=|!=)(?!#)",starts:{e:"\\n",sL:"ruby"}},{cN:"tag",b:"^\\s*%",c:[{cN:"title",b:"\\w+"},{cN:"value",b:"[#\\.]\\w+"},{b:"{\\s*",e:"\\s*}",eE:true,c:[{b:":\\w+\\s*=>",e:",\\s+",rB:true,eW:true,c:[{cN:"symbol",b:":\\w+"},{cN:"string",b:'"',e:'"'},{cN:"string",b:"'",e:"'"},{b:"\\w+",r:0}]}]},{b:"\\(\\s*",e:"\\s*\\)",eE:true,c:[{b:"\\w+\\s*=",e:"\\s+",rB:true,eW:true,c:[{cN:"attribute",b:"\\w+",r:0},{cN:"string",b:'"',e:'"'},{cN:"string",b:"'",e:"'"},{b:"\\w+",r:0}]},]}]},{cN:"bullet",b:"^\\s*[=~]\\s*",r:0},{b:"#{",starts:{e:"}",sL:"ruby"}}]}});hljs.registerLanguage("haskell",function(f){var g={cN:"comment",v:[{b:"--",e:"$"},{b:"{-",e:"-}",c:["self"]}]};var e={cN:"pragma",b:"{-#",e:"#-}"};var b={cN:"preprocessor",b:"^#",e:"$"};var d={cN:"type",b:"\\b[A-Z][\\w']*",r:0};var c={cN:"container",b:"\\(",e:"\\)",i:'"',c:[e,g,b,{cN:"type",b:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},f.inherit(f.TM,{b:"[_a-z][\\w']*"})]};var a={cN:"container",b:"{",e:"}",c:c.c};return{k:"let in if then else case of where do module import hiding qualified type data newtype deriving class instance as default infix infixl infixr foreign export ccall stdcall cplusplus jvm dotnet safe unsafe family forall mdo proc rec",c:[{cN:"module",b:"\\bmodule\\b",e:"where",k:"module where",c:[c,g],i:"\\W\\.|;"},{cN:"import",b:"\\bimport\\b",e:"$",k:"import|0 qualified as hiding",c:[c,g],i:"\\W\\.|;"},{cN:"class",b:"^(\\s*)?(class|instance)\\b",e:"where",k:"class family instance where",c:[d,c,g]},{cN:"typedef",b:"\\b(data|(new)?type)\\b",e:"$",k:"data family type newtype deriving",c:[e,g,d,c,a]},{cN:"default",bK:"default",e:"$",c:[d,c,g]},{cN:"infix",bK:"infix infixl infixr",e:"$",c:[f.CNM,g]},{cN:"foreign",b:"\\bforeign\\b",e:"$",k:"foreign import export ccall stdcall cplusplus jvm dotnet safe unsafe",c:[d,f.QSM,g]},{cN:"shebang",b:"#!\\/usr\\/bin\\/env runhaskell",e:"$"},e,g,b,f.QSM,f.CNM,d,f.inherit(f.TM,{b:"^[_a-z][\\w']*"}),{b:"->|<-"}]}});hljs.registerLanguage("xml",function(a){var c="[A-Za-z0-9\\._:-]+";var d={b:/<\?(php)?(?!\w)/,e:/\?>/,sL:"php",subLanguageMode:"continuous"};var b={eW:true,i:/]+/}]}]}]};return{aliases:["html"],cI:true,c:[{cN:"doctype",b:"",r:10,c:[{b:"\\[",e:"\\]"}]},{cN:"comment",b:"",r:10},{cN:"cdata",b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{cN:"tag",b:"|$)",e:">",k:{title:"style"},c:[b],starts:{e:"",rE:true,sL:"css"}},{cN:"tag",b:"|$)",e:">",k:{title:"script"},c:[b],starts:{e:"<\/script>",rE:true,sL:"javascript"}},{b:"<%",e:"%>",sL:"vbscript"},d,{cN:"pi",b:/<\?\w+/,e:/\?>/,r:10},{cN:"tag",b:"",c:[{cN:"title",b:"[^ /><]+",r:0},b]}]}});hljs.registerLanguage("django",function(a){var b={cN:"filter",b:/\|[A-Za-z]+\:?/,k:"truncatewords removetags linebreaksbr yesno get_digit timesince random striptags filesizeformat escape linebreaks length_is ljust rjust cut urlize fix_ampersands title floatformat capfirst pprint divisibleby add make_list unordered_list urlencode timeuntil urlizetrunc wordcount stringformat linenumbers slice date dictsort dictsortreversed default_if_none pluralize lower join center default truncatewords_html upper length phone2numeric wordwrap time addslashes slugify first escapejs force_escape iriencode last safe safeseq truncatechars localize unlocalize localtime utc timezone",c:[{cN:"argument",b:/"/,e:/"/},{cN:"argument",b:/'/,e:/'/}]};return{cI:true,sL:"xml",subLanguageMode:"continuous",c:[{cN:"template_comment",b:/\{%\s*comment\s*%}/,e:/\{%\s*endcomment\s*%}/},{cN:"template_comment",b:/\{#/,e:/#}/},{cN:"template_tag",b:/\{%/,e:/%}/,k:"comment endcomment load templatetag ifchanged endifchanged if endif firstof for endfor in ifnotequal endifnotequal widthratio extends include spaceless endspaceless regroup by as ifequal endifequal ssi now with cycle url filter endfilter debug block endblock else autoescape endautoescape csrf_token empty elif endwith static trans blocktrans endblocktrans get_static_prefix get_media_prefix plural get_current_language language get_available_languages get_current_language_bidi get_language_info get_language_info_list localize endlocalize localtime endlocaltime timezone endtimezone get_current_timezone verbatim",c:[b]},{cN:"variable",b:/\{\{/,e:/}}/,c:[b]}]}});hljs.registerLanguage("bash",function(b){var a={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)\}/}]};var d={cN:"string",b:/"/,e:/"/,c:[b.BE,a,{cN:"variable",b:/\$\(/,e:/\)/,c:[b.BE]}]};var c={cN:"string",b:/'/,e:/'/};return{l:/-?[a-z\.]+/,k:{keyword:"if then else elif fi for break continue while in do done exit return set declare case esac export exec",literal:"true false",built_in:"printf echo read cd pwd pushd popd dirs let eval unset typeset readonly getopts source shopt caller type hash bind help sudo",operator:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"shebang",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:true,c:[b.inherit(b.TM,{b:/\w[\w\d_]*/})],r:0},b.HCM,b.NM,d,c,a]}});hljs.registerLanguage("ini",function(a){return{cI:true,i:/\S/,c:[{cN:"comment",b:";",e:"$"},{cN:"title",b:"^\\[",e:"\\]"},{cN:"setting",b:"^[a-z0-9\\[\\]_-]+[ \\t]*=[ \\t]*",e:"$",c:[{cN:"value",eW:true,k:"on off true false yes no",c:[a.QSM,a.NM],r:0}]}]}});hljs.registerLanguage("objectivec",function(a){var d={keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign self synchronized id nonatomic super unichar IBOutlet IBAction strong weak @private @protected @public @try @property @end @throw @catch @finally @synthesize @dynamic @selector @optional @required",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"NSString NSDictionary CGRect CGPoint UIButton UILabel UITextView UIWebView MKMapView UISegmentedControl NSObject UITableViewDelegate UITableViewDataSource NSThread UIActivityIndicator UITabbar UIToolBar UIBarButtonItem UIImageView NSAutoreleasePool UITableView BOOL NSInteger CGFloat NSException NSLog NSMutableString NSMutableArray NSMutableDictionary NSURL NSIndexPath CGSize UITableViewCell UIView UIViewController UINavigationBar UINavigationController UITabBarController UIPopoverController UIPopoverControllerDelegate UIImage NSNumber UISearchBar NSFetchedResultsController NSFetchedResultsChangeType UIScrollView UIScrollViewDelegate UIEdgeInsets UIColor UIFont UIApplication NSNotFound NSNotificationCenter NSNotification UILocalNotification NSBundle NSFileManager NSTimeInterval NSDate NSCalendar NSUserDefaults UIWindow NSRange NSArray NSError NSURLRequest NSURLConnection UIInterfaceOrientation MPMoviePlayerController dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"};var c=/[a-zA-Z@][a-zA-Z0-9_]*/;var b="@interface @class @protocol @implementation";return{k:d,l:c,i:""}]},{cN:"preprocessor",b:"#",e:"$"},{cN:"class",b:"("+b.split(" ").join("|")+")\\b",e:"({|$)",k:b,l:c,c:[a.UTM]},{cN:"variable",b:"\\."+a.UIR,r:0}]}});hljs.registerLanguage("scss",function(a){var c="[a-zA-Z-][a-zA-Z0-9_-]*";var d={cN:"function",b:c+"\\(",e:"\\)",c:["self",a.NM,a.ASM,a.QSM]};var b={cN:"hexcolor",b:"#[0-9A-Fa-f]+"};var e={cN:"attribute",b:"[A-Z\\_\\.\\-]+",e:":",eE:true,i:"[^\\s]",starts:{cN:"value",eW:true,eE:true,c:[d,b,a.NM,a.QSM,a.ASM,a.CBLCLM,{cN:"important",b:"!important"}]}};return{cI:true,i:"[=/|']",c:[a.CLCM,a.CBLCLM,{cN:"function",b:c+"\\(",e:"\\)",c:["self",a.NM,a.ASM,a.QSM]},{cN:"id",b:"\\#[A-Za-z0-9_-]+",r:0},{cN:"class",b:"\\.[A-Za-z0-9_-]+",r:0},{cN:"attr_selector",b:"\\[",e:"\\]",i:"$"},{cN:"tag",b:"\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\b",r:0},{cN:"pseudo",b:":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)"},{cN:"pseudo",b:"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)"},{cN:"attribute",b:"\\b(z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\b",i:"[^\\s]"},{cN:"value",b:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{cN:"value",b:":",e:";",c:[b,a.NM,a.QSM,a.ASM,{cN:"important",b:"!important"}]},{cN:"at_rule",b:"@",e:"[{;]",k:"mixin include extend for if else each while charset import debug media page content font-face namespace warn",c:[d,a.QSM,a.ASM,b,a.NM,{cN:"preprocessor",b:"\\s[A-Za-z0-9_.-]+",r:0}]}]}});hljs.registerLanguage("python",function(a){var f={cN:"prompt",b:/^(>>>|\.\.\.) /};var b={cN:"string",c:[a.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[f],r:10},{b:/(u|b)?r?"""/,e:/"""/,c:[f],r:10},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)"/,e:/"/,r:10},{b:/(b|br)'/,e:/'/,},{b:/(b|br)"/,e:/"/,},a.ASM,a.QSM]};var d={cN:"number",r:0,v:[{b:a.BNR+"[lLjJ]?"},{b:"\\b(0o[0-7]+)[lLjJ]?"},{b:a.CNR+"[lLjJ]?"}]};var e={cN:"params",b:/\(/,e:/\)/,c:["self",f,d,b]};var c={e:/:/,i:/[${=;\n]/,c:[a.UTM,e]};return{k:{keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda nonlocal|10 None True False",built_in:"Ellipsis NotImplemented"},i:/(<\/|->|\?)/,c:[f,d,b,a.HCM,a.inherit(c,{cN:"function",bK:"def",r:10}),a.inherit(c,{cN:"class",bK:"class"}),{cN:"decorator",b:/@/,e:/$/},{b:/\b(print|exec)\(/}]}});hljs.registerLanguage("mel",function(a){return{k:"int float string vector matrix if else switch case default while do for in break continue global proc return about abs addAttr addAttributeEditorNodeHelp addDynamic addNewShelfTab addPP addPanelCategory addPrefixToName advanceToNextDrivenKey affectedNet affects aimConstraint air alias aliasAttr align alignCtx alignCurve alignSurface allViewFit ambientLight angle angleBetween animCone animCurveEditor animDisplay animView annotate appendStringArray applicationName applyAttrPreset applyTake arcLenDimContext arcLengthDimension arclen arrayMapper art3dPaintCtx artAttrCtx artAttrPaintVertexCtx artAttrSkinPaintCtx artAttrTool artBuildPaintMenu artFluidAttrCtx artPuttyCtx artSelectCtx artSetPaintCtx artUserPaintCtx assignCommand assignInputDevice assignViewportFactories attachCurve attachDeviceAttr attachSurface attrColorSliderGrp attrCompatibility attrControlGrp attrEnumOptionMenu attrEnumOptionMenuGrp attrFieldGrp attrFieldSliderGrp attrNavigationControlGrp attrPresetEditWin attributeExists attributeInfo attributeMenu attributeQuery autoKeyframe autoPlace bakeClip bakeFluidShading bakePartialHistory bakeResults bakeSimulation basename basenameEx batchRender bessel bevel bevelPlus binMembership bindSkin blend2 blendShape blendShapeEditor blendShapePanel blendTwoAttr blindDataType boneLattice boundary boxDollyCtx boxZoomCtx bufferCurve buildBookmarkMenu buildKeyframeMenu button buttonManip CBG cacheFile cacheFileCombine cacheFileMerge cacheFileTrack camera cameraView canCreateManip canvas capitalizeString catch catchQuiet ceil changeSubdivComponentDisplayLevel changeSubdivRegion channelBox character characterMap characterOutlineEditor characterize chdir checkBox checkBoxGrp checkDefaultRenderGlobals choice circle circularFillet clamp clear clearCache clip clipEditor clipEditorCurrentTimeCtx clipSchedule clipSchedulerOutliner clipTrimBefore closeCurve closeSurface cluster cmdFileOutput cmdScrollFieldExecuter cmdScrollFieldReporter cmdShell coarsenSubdivSelectionList collision color colorAtPoint colorEditor colorIndex colorIndexSliderGrp colorSliderButtonGrp colorSliderGrp columnLayout commandEcho commandLine commandPort compactHairSystem componentEditor compositingInterop computePolysetVolume condition cone confirmDialog connectAttr connectControl connectDynamic connectJoint connectionInfo constrain constrainValue constructionHistory container containsMultibyte contextInfo control convertFromOldLayers convertIffToPsd convertLightmap convertSolidTx convertTessellation convertUnit copyArray copyFlexor copyKey copySkinWeights cos cpButton cpCache cpClothSet cpCollision cpConstraint cpConvClothToMesh cpForces cpGetSolverAttr cpPanel cpProperty cpRigidCollisionFilter cpSeam cpSetEdit cpSetSolverAttr cpSolver cpSolverTypes cpTool cpUpdateClothUVs createDisplayLayer createDrawCtx createEditor createLayeredPsdFile createMotionField createNewShelf createNode createRenderLayer createSubdivRegion cross crossProduct ctxAbort ctxCompletion ctxEditMode ctxTraverse currentCtx currentTime currentTimeCtx currentUnit curve curveAddPtCtx curveCVCtx curveEPCtx curveEditorCtx curveIntersect curveMoveEPCtx curveOnSurface curveSketchCtx cutKey cycleCheck cylinder dagPose date defaultLightListCheckBox defaultNavigation defineDataServer defineVirtualDevice deformer deg_to_rad delete deleteAttr deleteShadingGroupsAndMaterials deleteShelfTab deleteUI deleteUnusedBrushes delrandstr detachCurve detachDeviceAttr detachSurface deviceEditor devicePanel dgInfo dgdirty dgeval dgtimer dimWhen directKeyCtx directionalLight dirmap dirname disable disconnectAttr disconnectJoint diskCache displacementToPoly displayAffected displayColor displayCull displayLevelOfDetail displayPref displayRGBColor displaySmoothness displayStats displayString displaySurface distanceDimContext distanceDimension doBlur dolly dollyCtx dopeSheetEditor dot dotProduct doubleProfileBirailSurface drag dragAttrContext draggerContext dropoffLocator duplicate duplicateCurve duplicateSurface dynCache dynControl dynExport dynExpression dynGlobals dynPaintEditor dynParticleCtx dynPref dynRelEdPanel dynRelEditor dynamicLoad editAttrLimits editDisplayLayerGlobals editDisplayLayerMembers editRenderLayerAdjustment editRenderLayerGlobals editRenderLayerMembers editor editorTemplate effector emit emitter enableDevice encodeString endString endsWith env equivalent equivalentTol erf error eval evalDeferred evalEcho event exactWorldBoundingBox exclusiveLightCheckBox exec executeForEachObject exists exp expression expressionEditorListen extendCurve extendSurface extrude fcheck fclose feof fflush fgetline fgetword file fileBrowserDialog fileDialog fileExtension fileInfo filetest filletCurve filter filterCurve filterExpand filterStudioImport findAllIntersections findAnimCurves findKeyframe findMenuItem findRelatedSkinCluster finder firstParentOf fitBspline flexor floatEq floatField floatFieldGrp floatScrollBar floatSlider floatSlider2 floatSliderButtonGrp floatSliderGrp floor flow fluidCacheInfo fluidEmitter fluidVoxelInfo flushUndo fmod fontDialog fopen formLayout format fprint frameLayout fread freeFormFillet frewind fromNativePath fwrite gamma gauss geometryConstraint getApplicationVersionAsFloat getAttr getClassification getDefaultBrush getFileList getFluidAttr getInputDeviceRange getMayaPanelTypes getModifiers getPanel getParticleAttr getPluginResource getenv getpid glRender glRenderEditor globalStitch gmatch goal gotoBindPose grabColor gradientControl gradientControlNoAttr graphDollyCtx graphSelectContext graphTrackCtx gravity grid gridLayout group groupObjectsByName HfAddAttractorToAS HfAssignAS HfBuildEqualMap HfBuildFurFiles HfBuildFurImages HfCancelAFR HfConnectASToHF HfCreateAttractor HfDeleteAS HfEditAS HfPerformCreateAS HfRemoveAttractorFromAS HfSelectAttached HfSelectAttractors HfUnAssignAS hardenPointCurve hardware hardwareRenderPanel headsUpDisplay headsUpMessage help helpLine hermite hide hilite hitTest hotBox hotkey hotkeyCheck hsv_to_rgb hudButton hudSlider hudSliderButton hwReflectionMap hwRender hwRenderLoad hyperGraph hyperPanel hyperShade hypot iconTextButton iconTextCheckBox iconTextRadioButton iconTextRadioCollection iconTextScrollList iconTextStaticLabel ikHandle ikHandleCtx ikHandleDisplayScale ikSolver ikSplineHandleCtx ikSystem ikSystemInfo ikfkDisplayMethod illustratorCurves image imfPlugins inheritTransform insertJoint insertJointCtx insertKeyCtx insertKnotCurve insertKnotSurface instance instanceable instancer intField intFieldGrp intScrollBar intSlider intSliderGrp interToUI internalVar intersect iprEngine isAnimCurve isConnected isDirty isParentOf isSameObject isTrue isValidObjectName isValidString isValidUiName isolateSelect itemFilter itemFilterAttr itemFilterRender itemFilterType joint jointCluster jointCtx jointDisplayScale jointLattice keyTangent keyframe keyframeOutliner keyframeRegionCurrentTimeCtx keyframeRegionDirectKeyCtx keyframeRegionDollyCtx keyframeRegionInsertKeyCtx keyframeRegionMoveKeyCtx keyframeRegionScaleKeyCtx keyframeRegionSelectKeyCtx keyframeRegionSetKeyCtx keyframeRegionTrackCtx keyframeStats lassoContext lattice latticeDeformKeyCtx launch launchImageEditor layerButton layeredShaderPort layeredTexturePort layout layoutDialog lightList lightListEditor lightListPanel lightlink lineIntersection linearPrecision linstep listAnimatable listAttr listCameras listConnections listDeviceAttachments listHistory listInputDeviceAxes listInputDeviceButtons listInputDevices listMenuAnnotation listNodeTypes listPanelCategories listRelatives listSets listTransforms listUnselected listerEditor loadFluid loadNewShelf loadPlugin loadPluginLanguageResources loadPrefObjects localizedPanelLabel lockNode loft log longNameOf lookThru ls lsThroughFilter lsType lsUI Mayatomr mag makeIdentity makeLive makePaintable makeRoll makeSingleSurface makeTubeOn makebot manipMoveContext manipMoveLimitsCtx manipOptions manipRotateContext manipRotateLimitsCtx manipScaleContext manipScaleLimitsCtx marker match max memory menu menuBarLayout menuEditor menuItem menuItemToShelf menuSet menuSetPref messageLine min minimizeApp mirrorJoint modelCurrentTimeCtx modelEditor modelPanel mouse movIn movOut move moveIKtoFK moveKeyCtx moveVertexAlongDirection multiProfileBirailSurface mute nParticle nameCommand nameField namespace namespaceInfo newPanelItems newton nodeCast nodeIconButton nodeOutliner nodePreset nodeType noise nonLinear normalConstraint normalize nurbsBoolean nurbsCopyUVSet nurbsCube nurbsEditUV nurbsPlane nurbsSelect nurbsSquare nurbsToPoly nurbsToPolygonsPref nurbsToSubdiv nurbsToSubdivPref nurbsUVSet nurbsViewDirectionVector objExists objectCenter objectLayer objectType objectTypeUI obsoleteProc oceanNurbsPreviewPlane offsetCurve offsetCurveOnSurface offsetSurface openGLExtension openMayaPref optionMenu optionMenuGrp optionVar orbit orbitCtx orientConstraint outlinerEditor outlinerPanel overrideModifier paintEffectsDisplay pairBlend palettePort paneLayout panel panelConfiguration panelHistory paramDimContext paramDimension paramLocator parent parentConstraint particle particleExists particleInstancer particleRenderInfo partition pasteKey pathAnimation pause pclose percent performanceOptions pfxstrokes pickWalk picture pixelMove planarSrf plane play playbackOptions playblast plugAttr plugNode pluginInfo pluginResourceUtil pointConstraint pointCurveConstraint pointLight pointMatrixMult pointOnCurve pointOnSurface pointPosition poleVectorConstraint polyAppend polyAppendFacetCtx polyAppendVertex polyAutoProjection polyAverageNormal polyAverageVertex polyBevel polyBlendColor polyBlindData polyBoolOp polyBridgeEdge polyCacheMonitor polyCheck polyChipOff polyClipboard polyCloseBorder polyCollapseEdge polyCollapseFacet polyColorBlindData polyColorDel polyColorPerVertex polyColorSet polyCompare polyCone polyCopyUV polyCrease polyCreaseCtx polyCreateFacet polyCreateFacetCtx polyCube polyCut polyCutCtx polyCylinder polyCylindricalProjection polyDelEdge polyDelFacet polyDelVertex polyDuplicateAndConnect polyDuplicateEdge polyEditUV polyEditUVShell polyEvaluate polyExtrudeEdge polyExtrudeFacet polyExtrudeVertex polyFlipEdge polyFlipUV polyForceUV polyGeoSampler polyHelix polyInfo polyInstallAction polyLayoutUV polyListComponentConversion polyMapCut polyMapDel polyMapSew polyMapSewMove polyMergeEdge polyMergeEdgeCtx polyMergeFacet polyMergeFacetCtx polyMergeUV polyMergeVertex polyMirrorFace polyMoveEdge polyMoveFacet polyMoveFacetUV polyMoveUV polyMoveVertex polyNormal polyNormalPerVertex polyNormalizeUV polyOptUvs polyOptions polyOutput polyPipe polyPlanarProjection polyPlane polyPlatonicSolid polyPoke polyPrimitive polyPrism polyProjection polyPyramid polyQuad polyQueryBlindData polyReduce polySelect polySelectConstraint polySelectConstraintMonitor polySelectCtx polySelectEditCtx polySeparate polySetToFaceNormal polySewEdge polyShortestPathCtx polySmooth polySoftEdge polySphere polySphericalProjection polySplit polySplitCtx polySplitEdge polySplitRing polySplitVertex polyStraightenUVBorder polySubdivideEdge polySubdivideFacet polyToSubdiv polyTorus polyTransfer polyTriangulate polyUVSet polyUnite polyWedgeFace popen popupMenu pose pow preloadRefEd print progressBar progressWindow projFileViewer projectCurve projectTangent projectionContext projectionManip promptDialog propModCtx propMove psdChannelOutliner psdEditTextureFile psdExport psdTextureFile putenv pwd python querySubdiv quit rad_to_deg radial radioButton radioButtonGrp radioCollection radioMenuItemCollection rampColorPort rand randomizeFollicles randstate rangeControl readTake rebuildCurve rebuildSurface recordAttr recordDevice redo reference referenceEdit referenceQuery refineSubdivSelectionList refresh refreshAE registerPluginResource rehash reloadImage removeJoint removeMultiInstance removePanelCategory rename renameAttr renameSelectionList renameUI render renderGlobalsNode renderInfo renderLayerButton renderLayerParent renderLayerPostProcess renderLayerUnparent renderManip renderPartition renderQualityNode renderSettings renderThumbnailUpdate renderWindowEditor renderWindowSelectContext renderer reorder reorderDeformers requires reroot resampleFluid resetAE resetPfxToPolyCamera resetTool resolutionNode retarget reverseCurve reverseSurface revolve rgb_to_hsv rigidBody rigidSolver roll rollCtx rootOf rot rotate rotationInterpolation roundConstantRadius rowColumnLayout rowLayout runTimeCommand runup sampleImage saveAllShelves saveAttrPreset saveFluid saveImage saveInitialState saveMenu savePrefObjects savePrefs saveShelf saveToolSettings scale scaleBrushBrightness scaleComponents scaleConstraint scaleKey scaleKeyCtx sceneEditor sceneUIReplacement scmh scriptCtx scriptEditorInfo scriptJob scriptNode scriptTable scriptToShelf scriptedPanel scriptedPanelType scrollField scrollLayout sculpt searchPathArray seed selLoadSettings select selectContext selectCurveCV selectKey selectKeyCtx selectKeyframeRegionCtx selectMode selectPref selectPriority selectType selectedNodes selectionConnection separator setAttr setAttrEnumResource setAttrMapping setAttrNiceNameResource setConstraintRestPosition setDefaultShadingGroup setDrivenKeyframe setDynamic setEditCtx setEditor setFluidAttr setFocus setInfinity setInputDeviceMapping setKeyCtx setKeyPath setKeyframe setKeyframeBlendshapeTargetWts setMenuMode setNodeNiceNameResource setNodeTypeFlag setParent setParticleAttr setPfxToPolyCamera setPluginResource setProject setStampDensity setStartupMessage setState setToolTo setUITemplate setXformManip sets shadingConnection shadingGeometryRelCtx shadingLightRelCtx shadingNetworkCompare shadingNode shapeCompare shelfButton shelfLayout shelfTabLayout shellField shortNameOf showHelp showHidden showManipCtx showSelectionInTitle showShadingGroupAttrEditor showWindow sign simplify sin singleProfileBirailSurface size sizeBytes skinCluster skinPercent smoothCurve smoothTangentSurface smoothstep snap2to2 snapKey snapMode snapTogetherCtx snapshot soft softMod softModCtx sort sound soundControl source spaceLocator sphere sphrand spotLight spotLightPreviewPort spreadSheetEditor spring sqrt squareSurface srtContext stackTrace startString startsWith stitchAndExplodeShell stitchSurface stitchSurfacePoints strcmp stringArrayCatenate stringArrayContains stringArrayCount stringArrayInsertAtIndex stringArrayIntersector stringArrayRemove stringArrayRemoveAtIndex stringArrayRemoveDuplicates stringArrayRemoveExact stringArrayToString stringToStringArray strip stripPrefixFromName stroke subdAutoProjection subdCleanTopology subdCollapse subdDuplicateAndConnect subdEditUV subdListComponentConversion subdMapCut subdMapSewMove subdMatchTopology subdMirror subdToBlind subdToPoly subdTransferUVsToCache subdiv subdivCrease subdivDisplaySmoothness substitute substituteAllString substituteGeometry substring surface surfaceSampler surfaceShaderList swatchDisplayPort switchTable symbolButton symbolCheckBox sysFile system tabLayout tan tangentConstraint texLatticeDeformContext texManipContext texMoveContext texMoveUVShellContext texRotateContext texScaleContext texSelectContext texSelectShortestPathCtx texSmudgeUVContext texWinToolCtx text textCurves textField textFieldButtonGrp textFieldGrp textManip textScrollList textToShelf textureDisplacePlane textureHairColor texturePlacementContext textureWindow threadCount threePointArcCtx timeControl timePort timerX toNativePath toggle toggleAxis toggleWindowVisibility tokenize tokenizeList tolerance tolower toolButton toolCollection toolDropped toolHasOptions toolPropertyWindow torus toupper trace track trackCtx transferAttributes transformCompare transformLimits translator trim trunc truncateFluidCache truncateHairCache tumble tumbleCtx turbulence twoPointArcCtx uiRes uiTemplate unassignInputDevice undo undoInfo ungroup uniform unit unloadPlugin untangleUV untitledFileName untrim upAxis updateAE userCtx uvLink uvSnapshot validateShelfName vectorize view2dToolCtx viewCamera viewClipPlane viewFit viewHeadOn viewLookAt viewManip viewPlace viewSet visor volumeAxis vortex waitCursor warning webBrowser webBrowserPrefs whatIs window windowPref wire wireContext workspace wrinkle wrinkleContext writeTake xbmLangPathList xform",i:"]/,c:[{bK:"extends implements",r:10},b.UTM]},{b:b.UIR+"\\s*\\(",rB:true,c:[b.UTM]}]},b.CNM,{cN:"annotation",b:"@[A-Za-z]+"}]}});hljs.registerLanguage("tex",function(a){var d={cN:"command",b:"\\\\[a-zA-Zа-яА-я]+[\\*]?"};var c={cN:"command",b:"\\\\[^a-zA-Zа-яА-я0-9]"};var b={cN:"special",b:"[{}\\[\\]\\&#~]",r:0};return{c:[{b:"\\\\[a-zA-Zа-яА-я]+[\\*]? *= *-?\\d*\\.?\\d+(pt|pc|mm|cm|in|dd|cc|ex|em)?",rB:true,c:[d,c,{cN:"number",b:" *=",e:"-?\\d*\\.?\\d+(pt|pc|mm|cm|in|dd|cc|ex|em)?",eB:true}],r:10},d,c,b,{cN:"formula",b:"\\$\\$",e:"\\$\\$",c:[d,c,b],r:0},{cN:"formula",b:"\\$",e:"\\$",c:[d,c,b],r:0},{cN:"comment",b:"%",e:"$",r:0}]}});hljs.registerLanguage("glsl",function(a){return{k:{keyword:"atomic_uint attribute bool break bvec2 bvec3 bvec4 case centroid coherent const continue default discard dmat2 dmat2x2 dmat2x3 dmat2x4 dmat3 dmat3x2 dmat3x3 dmat3x4 dmat4 dmat4x2 dmat4x3 dmat4x4 do double dvec2 dvec3 dvec4 else flat float for highp if iimage1D iimage1DArray iimage2D iimage2DArray iimage2DMS iimage2DMSArray iimage2DRect iimage3D iimageBuffer iimageCube iimageCubeArray image1D image1DArray image2D image2DArray image2DMS image2DMSArray image2DRect image3D imageBuffer imageCube imageCubeArray in inout int invariant isampler1D isampler1DArray isampler2D isampler2DArray isampler2DMS isampler2DMSArray isampler2DRect isampler3D isamplerBuffer isamplerCube isamplerCubeArray ivec2 ivec3 ivec4 layout lowp mat2 mat2x2 mat2x3 mat2x4 mat3 mat3x2 mat3x3 mat3x4 mat4 mat4x2 mat4x3 mat4x4 mediump noperspective out patch precision readonly restrict return sample sampler1D sampler1DArray sampler1DArrayShadow sampler1DShadow sampler2D sampler2DArray sampler2DArrayShadow sampler2DMS sampler2DMSArray sampler2DRect sampler2DRectShadow sampler2DShadow sampler3D samplerBuffer samplerCube samplerCubeArray samplerCubeArrayShadow samplerCubeShadow smooth struct subroutine switch uimage1D uimage1DArray uimage2D uimage2DArray uimage2DMS uimage2DMSArray uimage2DRect uimage3D uimageBuffer uimageCube uimageCubeArray uint uniform usampler1D usampler1DArray usampler2D usampler2DArray usampler2DMS usampler2DMSArray usampler2DRect usampler3D usamplerBuffer usamplerCube usamplerCubeArray uvec2 uvec3 uvec4 varying vec2 vec3 vec4 void volatile while writeonly",built_in:"gl_BackColor gl_BackLightModelProduct gl_BackLightProduct gl_BackMaterial gl_BackSecondaryColor gl_ClipDistance gl_ClipPlane gl_ClipVertex gl_Color gl_DepthRange gl_EyePlaneQ gl_EyePlaneR gl_EyePlaneS gl_EyePlaneT gl_Fog gl_FogCoord gl_FogFragCoord gl_FragColor gl_FragCoord gl_FragData gl_FragDepth gl_FrontColor gl_FrontFacing gl_FrontLightModelProduct gl_FrontLightProduct gl_FrontMaterial gl_FrontSecondaryColor gl_InstanceID gl_InvocationID gl_Layer gl_LightModel gl_LightSource gl_MaxAtomicCounterBindings gl_MaxAtomicCounterBufferSize gl_MaxClipDistances gl_MaxClipPlanes gl_MaxCombinedAtomicCounterBuffers gl_MaxCombinedAtomicCounters gl_MaxCombinedImageUniforms gl_MaxCombinedImageUnitsAndFragmentOutputs gl_MaxCombinedTextureImageUnits gl_MaxDrawBuffers gl_MaxFragmentAtomicCounterBuffers gl_MaxFragmentAtomicCounters gl_MaxFragmentImageUniforms gl_MaxFragmentInputComponents gl_MaxFragmentUniformComponents gl_MaxFragmentUniformVectors gl_MaxGeometryAtomicCounterBuffers gl_MaxGeometryAtomicCounters gl_MaxGeometryImageUniforms gl_MaxGeometryInputComponents gl_MaxGeometryOutputComponents gl_MaxGeometryOutputVertices gl_MaxGeometryTextureImageUnits gl_MaxGeometryTotalOutputComponents gl_MaxGeometryUniformComponents gl_MaxGeometryVaryingComponents gl_MaxImageSamples gl_MaxImageUnits gl_MaxLights gl_MaxPatchVertices gl_MaxProgramTexelOffset gl_MaxTessControlAtomicCounterBuffers gl_MaxTessControlAtomicCounters gl_MaxTessControlImageUniforms gl_MaxTessControlInputComponents gl_MaxTessControlOutputComponents gl_MaxTessControlTextureImageUnits gl_MaxTessControlTotalOutputComponents gl_MaxTessControlUniformComponents gl_MaxTessEvaluationAtomicCounterBuffers gl_MaxTessEvaluationAtomicCounters gl_MaxTessEvaluationImageUniforms gl_MaxTessEvaluationInputComponents gl_MaxTessEvaluationOutputComponents gl_MaxTessEvaluationTextureImageUnits gl_MaxTessEvaluationUniformComponents gl_MaxTessGenLevel gl_MaxTessPatchComponents gl_MaxTextureCoords gl_MaxTextureImageUnits gl_MaxTextureUnits gl_MaxVaryingComponents gl_MaxVaryingFloats gl_MaxVaryingVectors gl_MaxVertexAtomicCounterBuffers gl_MaxVertexAtomicCounters gl_MaxVertexAttribs gl_MaxVertexImageUniforms gl_MaxVertexOutputComponents gl_MaxVertexTextureImageUnits gl_MaxVertexUniformComponents gl_MaxVertexUniformVectors gl_MaxViewports gl_MinProgramTexelOffsetgl_ModelViewMatrix gl_ModelViewMatrixInverse gl_ModelViewMatrixInverseTranspose gl_ModelViewMatrixTranspose gl_ModelViewProjectionMatrix gl_ModelViewProjectionMatrixInverse gl_ModelViewProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixTranspose gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_Normal gl_NormalMatrix gl_NormalScale gl_ObjectPlaneQ gl_ObjectPlaneR gl_ObjectPlaneS gl_ObjectPlaneT gl_PatchVerticesIn gl_PerVertex gl_Point gl_PointCoord gl_PointSize gl_Position gl_PrimitiveID gl_PrimitiveIDIn gl_ProjectionMatrix gl_ProjectionMatrixInverse gl_ProjectionMatrixInverseTranspose gl_ProjectionMatrixTranspose gl_SampleID gl_SampleMask gl_SampleMaskIn gl_SamplePosition gl_SecondaryColor gl_TessCoord gl_TessLevelInner gl_TessLevelOuter gl_TexCoord gl_TextureEnvColor gl_TextureMatrixInverseTranspose gl_TextureMatrixTranspose gl_Vertex gl_VertexID gl_ViewportIndex gl_in gl_out EmitStreamVertex EmitVertex EndPrimitive EndStreamPrimitive abs acos acosh all any asin asinh atan atanh atomicCounter atomicCounterDecrement atomicCounterIncrement barrier bitCount bitfieldExtract bitfieldInsert bitfieldReverse ceil clamp cos cosh cross dFdx dFdy degrees determinant distance dot equal exp exp2 faceforward findLSB findMSB floatBitsToInt floatBitsToUint floor fma fract frexp ftransform fwidth greaterThan greaterThanEqual imageAtomicAdd imageAtomicAnd imageAtomicCompSwap imageAtomicExchange imageAtomicMax imageAtomicMin imageAtomicOr imageAtomicXor imageLoad imageStore imulExtended intBitsToFloat interpolateAtCentroid interpolateAtOffset interpolateAtSample inverse inversesqrt isinf isnan ldexp length lessThan lessThanEqual log log2 matrixCompMult max memoryBarrier min mix mod modf noise1 noise2 noise3 noise4 normalize not notEqual outerProduct packDouble2x32 packHalf2x16 packSnorm2x16 packSnorm4x8 packUnorm2x16 packUnorm4x8 pow radians reflect refract round roundEven shadow1D shadow1DLod shadow1DProj shadow1DProjLod shadow2D shadow2DLod shadow2DProj shadow2DProjLod sign sin sinh smoothstep sqrt step tan tanh texelFetch texelFetchOffset texture texture1D texture1DLod texture1DProj texture1DProjLod texture2D texture2DLod texture2DProj texture2DProjLod texture3D texture3DLod texture3DProj texture3DProjLod textureCube textureCubeLod textureGather textureGatherOffset textureGatherOffsets textureGrad textureGradOffset textureLod textureLodOffset textureOffset textureProj textureProjGrad textureProjGradOffset textureProjLod textureProjLodOffset textureProjOffset textureQueryLod textureSize transpose trunc uaddCarry uintBitsToFloat umulExtended unpackDouble2x32 unpackHalf2x16 unpackSnorm2x16 unpackSnorm4x8 unpackUnorm2x16 unpackUnorm4x8 usubBorrow gl_TextureMatrix gl_TextureMatrixInverse",literal:"true false"},i:'"',c:[a.CLCM,a.CBLCLM,a.CNM,{cN:"preprocessor",b:"#",e:"$"}]}});hljs.registerLanguage("brainfuck",function(b){var a={cN:"literal",b:"[\\+\\-]",r:0};return{c:[{cN:"comment",b:"[^\\[\\]\\.,\\+\\-<> \r\n]",rE:true,e:"[\\[\\]\\.,\\+\\-<> \r\n]",r:0},{cN:"title",b:"[\\[\\]]",r:0},{cN:"string",b:"[\\.,]",r:0},{b:/\+\+|\-\-/,rB:true,c:[a]},a]}});hljs.registerLanguage("mathematica",function(a){return{aliases:["mma"],l:"(\\$|\\b)"+a.IR+"\\b",k:"AbelianGroup Abort AbortKernels AbortProtect Above Abs Absolute AbsoluteCorrelation AbsoluteCorrelationFunction AbsoluteCurrentValue AbsoluteDashing AbsoluteFileName AbsoluteOptions AbsolutePointSize AbsoluteThickness AbsoluteTime AbsoluteTiming AccountingForm Accumulate Accuracy AccuracyGoal ActionDelay ActionMenu ActionMenuBox ActionMenuBoxOptions Active ActiveItem ActiveStyle AcyclicGraphQ AddOnHelpPath AddTo AdjacencyGraph AdjacencyList AdjacencyMatrix AdjustmentBox AdjustmentBoxOptions AdjustTimeSeriesForecast AffineTransform After AiryAi AiryAiPrime AiryAiZero AiryBi AiryBiPrime AiryBiZero AlgebraicIntegerQ AlgebraicNumber AlgebraicNumberDenominator AlgebraicNumberNorm AlgebraicNumberPolynomial AlgebraicNumberTrace AlgebraicRules AlgebraicRulesData Algebraics AlgebraicUnitQ Alignment AlignmentMarker AlignmentPoint All AllowedDimensions AllowGroupClose AllowInlineCells AllowKernelInitialization AllowReverseGroupClose AllowScriptLevelChange AlphaChannel AlternatingGroup AlternativeHypothesis Alternatives AmbientLight Analytic AnchoredSearch And AndersonDarlingTest AngerJ AngleBracket AngularGauge Animate AnimationCycleOffset AnimationCycleRepetitions AnimationDirection AnimationDisplayTime AnimationRate AnimationRepetitions AnimationRunning Animator AnimatorBox AnimatorBoxOptions AnimatorElements Annotation Annuity AnnuityDue Antialiasing Antisymmetric Apart ApartSquareFree Appearance AppearanceElements AppellF1 Append AppendTo Apply ArcCos ArcCosh ArcCot ArcCoth ArcCsc ArcCsch ArcSec ArcSech ArcSin ArcSinDistribution ArcSinh ArcTan ArcTanh Arg ArgMax ArgMin ArgumentCountQ ARIMAProcess ArithmeticGeometricMean ARMAProcess ARProcess Array ArrayComponents ArrayDepth ArrayFlatten ArrayPad ArrayPlot ArrayQ ArrayReshape ArrayRules Arrays Arrow Arrow3DBox ArrowBox Arrowheads AspectRatio AspectRatioFixed Assert Assuming Assumptions AstronomicalData Asynchronous AsynchronousTaskObject AsynchronousTasks AtomQ Attributes AugmentedSymmetricPolynomial AutoAction AutoDelete AutoEvaluateEvents AutoGeneratedPackage AutoIndent AutoIndentSpacings AutoItalicWords AutoloadPath AutoMatch Automatic AutomaticImageSize AutoMultiplicationSymbol AutoNumberFormatting AutoOpenNotebooks AutoOpenPalettes AutorunSequencing AutoScaling AutoScroll AutoSpacing AutoStyleOptions AutoStyleWords Axes AxesEdge AxesLabel AxesOrigin AxesStyle Axis BabyMonsterGroupB Back Background BackgroundTasksSettings Backslash Backsubstitution Backward Band BandpassFilter BandstopFilter BarabasiAlbertGraphDistribution BarChart BarChart3D BarLegend BarlowProschanImportance BarnesG BarOrigin BarSpacing BartlettHannWindow BartlettWindow BaseForm Baseline BaselinePosition BaseStyle BatesDistribution BattleLemarieWavelet Because BeckmannDistribution Beep Before Begin BeginDialogPacket BeginFrontEndInteractionPacket BeginPackage BellB BellY Below BenfordDistribution BeniniDistribution BenktanderGibratDistribution BenktanderWeibullDistribution BernoulliB BernoulliDistribution BernoulliGraphDistribution BernoulliProcess BernsteinBasis BesselFilterModel BesselI BesselJ BesselJZero BesselK BesselY BesselYZero Beta BetaBinomialDistribution BetaDistribution BetaNegativeBinomialDistribution BetaPrimeDistribution BetaRegularized BetweennessCentrality BezierCurve BezierCurve3DBox BezierCurve3DBoxOptions BezierCurveBox BezierCurveBoxOptions BezierFunction BilateralFilter Binarize BinaryFormat BinaryImageQ BinaryRead BinaryReadList BinaryWrite BinCounts BinLists Binomial BinomialDistribution BinomialProcess BinormalDistribution BiorthogonalSplineWavelet BipartiteGraphQ BirnbaumImportance BirnbaumSaundersDistribution BitAnd BitClear BitGet BitLength BitNot BitOr BitSet BitShiftLeft BitShiftRight BitXor Black BlackmanHarrisWindow BlackmanNuttallWindow BlackmanWindow Blank BlankForm BlankNullSequence BlankSequence Blend Block BlockRandom BlomqvistBeta BlomqvistBetaTest Blue Blur BodePlot BohmanWindow Bold Bookmarks Boole BooleanConsecutiveFunction BooleanConvert BooleanCountingFunction BooleanFunction BooleanGraph BooleanMaxterms BooleanMinimize BooleanMinterms Booleans BooleanTable BooleanVariables BorderDimensions BorelTannerDistribution Bottom BottomHatTransform BoundaryStyle Bounds Box BoxBaselineShift BoxData BoxDimensions Boxed Boxes BoxForm BoxFormFormatTypes BoxFrame BoxID BoxMargins BoxMatrix BoxRatios BoxRotation BoxRotationPoint BoxStyle BoxWhiskerChart Bra BracketingBar BraKet BrayCurtisDistance BreadthFirstScan Break Brown BrownForsytheTest BrownianBridgeProcess BrowserCategory BSplineBasis BSplineCurve BSplineCurve3DBox BSplineCurveBox BSplineCurveBoxOptions BSplineFunction BSplineSurface BSplineSurface3DBox BubbleChart BubbleChart3D BubbleScale BubbleSizes BulletGauge BusinessDayQ ButterflyGraph ButterworthFilterModel Button ButtonBar ButtonBox ButtonBoxOptions ButtonCell ButtonContents ButtonData ButtonEvaluator ButtonExpandable ButtonFrame ButtonFunction ButtonMargins ButtonMinHeight ButtonNote ButtonNotebook ButtonSource ButtonStyle ButtonStyleMenuListing Byte ByteCount ByteOrdering C CachedValue CacheGraphics CalendarData CalendarType CallPacket CanberraDistance Cancel CancelButton CandlestickChart Cap CapForm CapitalDifferentialD CardinalBSplineBasis CarmichaelLambda Cases Cashflow Casoratian Catalan CatalanNumber Catch CauchyDistribution CauchyWindow CayleyGraph CDF CDFDeploy CDFInformation CDFWavelet Ceiling Cell CellAutoOverwrite CellBaseline CellBoundingBox CellBracketOptions CellChangeTimes CellContents CellContext CellDingbat CellDynamicExpression CellEditDuplicate CellElementsBoundingBox CellElementSpacings CellEpilog CellEvaluationDuplicate CellEvaluationFunction CellEventActions CellFrame CellFrameColor CellFrameLabelMargins CellFrameLabels CellFrameMargins CellGroup CellGroupData CellGrouping CellGroupingRules CellHorizontalScrolling CellID CellLabel CellLabelAutoDelete CellLabelMargins CellLabelPositioning CellMargins CellObject CellOpen CellPrint CellProlog Cells CellSize CellStyle CellTags CellularAutomaton CensoredDistribution Censoring Center CenterDot CentralMoment CentralMomentGeneratingFunction CForm ChampernowneNumber ChanVeseBinarize Character CharacterEncoding CharacterEncodingsPath CharacteristicFunction CharacteristicPolynomial CharacterRange Characters ChartBaseStyle ChartElementData ChartElementDataFunction ChartElementFunction ChartElements ChartLabels ChartLayout ChartLegends ChartStyle Chebyshev1FilterModel Chebyshev2FilterModel ChebyshevDistance ChebyshevT ChebyshevU Check CheckAbort CheckAll Checkbox CheckboxBar CheckboxBox CheckboxBoxOptions ChemicalData ChessboardDistance ChiDistribution ChineseRemainder ChiSquareDistribution ChoiceButtons ChoiceDialog CholeskyDecomposition Chop Circle CircleBox CircleDot CircleMinus CirclePlus CircleTimes CirculantGraph CityData Clear ClearAll ClearAttributes ClearSystemCache ClebschGordan ClickPane Clip ClipboardNotebook ClipFill ClippingStyle ClipPlanes ClipRange Clock ClockGauge ClockwiseContourIntegral Close Closed CloseKernels ClosenessCentrality Closing ClosingAutoSave ClosingEvent ClusteringComponents CMYKColor Coarse Coefficient CoefficientArrays CoefficientDomain CoefficientList CoefficientRules CoifletWavelet Collect Colon ColonForm ColorCombine ColorConvert ColorData ColorDataFunction ColorFunction ColorFunctionScaling Colorize ColorNegate ColorOutput ColorProfileData ColorQuantize ColorReplace ColorRules ColorSelectorSettings ColorSeparate ColorSetter ColorSetterBox ColorSetterBoxOptions ColorSlider ColorSpace Column ColumnAlignments ColumnBackgrounds ColumnForm ColumnLines ColumnsEqual ColumnSpacings ColumnWidths CommonDefaultFormatTypes Commonest CommonestFilter CommonUnits CommunityBoundaryStyle CommunityGraphPlot CommunityLabels CommunityRegionStyle CompatibleUnitQ CompilationOptions CompilationTarget Compile Compiled CompiledFunction Complement CompleteGraph CompleteGraphQ CompleteKaryTree CompletionsListPacket Complex Complexes ComplexExpand ComplexInfinity ComplexityFunction ComponentMeasurements ComponentwiseContextMenu Compose ComposeList ComposeSeries Composition CompoundExpression CompoundPoissonDistribution CompoundPoissonProcess CompoundRenewalProcess Compress CompressedData Condition ConditionalExpression Conditioned Cone ConeBox ConfidenceLevel ConfidenceRange ConfidenceTransform ConfigurationPath Congruent Conjugate ConjugateTranspose Conjunction Connect ConnectedComponents ConnectedGraphQ ConnesWindow ConoverTest ConsoleMessage ConsoleMessagePacket ConsolePrint Constant ConstantArray Constants ConstrainedMax ConstrainedMin ContentPadding ContentsBoundingBox ContentSelectable ContentSize Context ContextMenu Contexts ContextToFilename ContextToFileName Continuation Continue ContinuedFraction ContinuedFractionK ContinuousAction ContinuousMarkovProcess ContinuousTimeModelQ ContinuousWaveletData ContinuousWaveletTransform ContourDetect ContourGraphics ContourIntegral ContourLabels ContourLines ContourPlot ContourPlot3D Contours ContourShading ContourSmoothing ContourStyle ContraharmonicMean Control ControlActive ControlAlignment ControllabilityGramian ControllabilityMatrix ControllableDecomposition ControllableModelQ ControllerDuration ControllerInformation ControllerInformationData ControllerLinking ControllerManipulate ControllerMethod ControllerPath ControllerState ControlPlacement ControlsRendering ControlType Convergents ConversionOptions ConversionRules ConvertToBitmapPacket ConvertToPostScript ConvertToPostScriptPacket Convolve ConwayGroupCo1 ConwayGroupCo2 ConwayGroupCo3 CoordinateChartData CoordinatesToolOptions CoordinateTransform CoordinateTransformData CoprimeQ Coproduct CopulaDistribution Copyable CopyDirectory CopyFile CopyTag CopyToClipboard CornerFilter CornerNeighbors Correlation CorrelationDistance CorrelationFunction CorrelationTest Cos Cosh CoshIntegral CosineDistance CosineWindow CosIntegral Cot Coth Count CounterAssignments CounterBox CounterBoxOptions CounterClockwiseContourIntegral CounterEvaluator CounterFunction CounterIncrements CounterStyle CounterStyleMenuListing CountRoots CountryData Covariance CovarianceEstimatorFunction CovarianceFunction CoxianDistribution CoxIngersollRossProcess CoxModel CoxModelFit CramerVonMisesTest CreateArchive CreateDialog CreateDirectory CreateDocument CreateIntermediateDirectories CreatePalette CreatePalettePacket CreateScheduledTask CreateTemporary CreateWindow CriticalityFailureImportance CriticalitySuccessImportance CriticalSection Cross CrossingDetect CrossMatrix Csc Csch CubeRoot Cubics Cuboid CuboidBox Cumulant CumulantGeneratingFunction Cup CupCap Curl CurlyDoubleQuote CurlyQuote CurrentImage CurrentlySpeakingPacket CurrentValue CurvatureFlowFilter CurveClosed Cyan CycleGraph CycleIndexPolynomial Cycles CyclicGroup Cyclotomic Cylinder CylinderBox CylindricalDecomposition D DagumDistribution DamerauLevenshteinDistance DampingFactor Darker Dashed Dashing DataCompression DataDistribution DataRange DataReversed Date DateDelimiters DateDifference DateFunction DateList DateListLogPlot DateListPlot DatePattern DatePlus DateRange DateString DateTicksFormat DaubechiesWavelet DavisDistribution DawsonF DayCount DayCountConvention DayMatchQ DayName DayPlus DayRange DayRound DeBruijnGraph Debug DebugTag Decimal DeclareKnownSymbols DeclarePackage Decompose Decrement DedekindEta Default DefaultAxesStyle DefaultBaseStyle DefaultBoxStyle DefaultButton DefaultColor DefaultControlPlacement DefaultDuplicateCellStyle DefaultDuration DefaultElement DefaultFaceGridsStyle DefaultFieldHintStyle DefaultFont DefaultFontProperties DefaultFormatType DefaultFormatTypeForStyle DefaultFrameStyle DefaultFrameTicksStyle DefaultGridLinesStyle DefaultInlineFormatType DefaultInputFormatType DefaultLabelStyle DefaultMenuStyle DefaultNaturalLanguage DefaultNewCellStyle DefaultNewInlineCellStyle DefaultNotebook DefaultOptions DefaultOutputFormatType DefaultStyle DefaultStyleDefinitions DefaultTextFormatType DefaultTextInlineFormatType DefaultTicksStyle DefaultTooltipStyle DefaultValues Defer DefineExternal DefineInputStreamMethod DefineOutputStreamMethod Definition Degree DegreeCentrality DegreeGraphDistribution DegreeLexicographic DegreeReverseLexicographic Deinitialization Del Deletable Delete DeleteBorderComponents DeleteCases DeleteContents DeleteDirectory DeleteDuplicates DeleteFile DeleteSmallComponents DeleteWithContents DeletionWarning Delimiter DelimiterFlashTime DelimiterMatching Delimiters Denominator DensityGraphics DensityHistogram DensityPlot DependentVariables Deploy Deployed Depth DepthFirstScan Derivative DerivativeFilter DescriptorStateSpace DesignMatrix Det DGaussianWavelet DiacriticalPositioning Diagonal DiagonalMatrix Dialog DialogIndent DialogInput DialogLevel DialogNotebook DialogProlog DialogReturn DialogSymbols Diamond DiamondMatrix DiceDissimilarity DictionaryLookup DifferenceDelta DifferenceOrder DifferenceRoot DifferenceRootReduce Differences DifferentialD DifferentialRoot DifferentialRootReduce DifferentiatorFilter DigitBlock DigitBlockMinimum DigitCharacter DigitCount DigitQ DihedralGroup Dilation Dimensions DiracComb DiracDelta DirectedEdge DirectedEdges DirectedGraph DirectedGraphQ DirectedInfinity Direction Directive Directory DirectoryName DirectoryQ DirectoryStack DirichletCharacter DirichletConvolve DirichletDistribution DirichletL DirichletTransform DirichletWindow DisableConsolePrintPacket DiscreteChirpZTransform DiscreteConvolve DiscreteDelta DiscreteHadamardTransform DiscreteIndicator DiscreteLQEstimatorGains DiscreteLQRegulatorGains DiscreteLyapunovSolve DiscreteMarkovProcess DiscretePlot DiscretePlot3D DiscreteRatio DiscreteRiccatiSolve DiscreteShift DiscreteTimeModelQ DiscreteUniformDistribution DiscreteVariables DiscreteWaveletData DiscreteWaveletPacketTransform DiscreteWaveletTransform Discriminant Disjunction Disk DiskBox DiskMatrix Dispatch DispersionEstimatorFunction Display DisplayAllSteps DisplayEndPacket DisplayFlushImagePacket DisplayForm DisplayFunction DisplayPacket DisplayRules DisplaySetSizePacket DisplayString DisplayTemporary DisplayWith DisplayWithRef DisplayWithVariable DistanceFunction DistanceTransform Distribute Distributed DistributedContexts DistributeDefinitions DistributionChart DistributionDomain DistributionFitTest DistributionParameterAssumptions DistributionParameterQ Dithering Div Divergence Divide DivideBy Dividers Divisible Divisors DivisorSigma DivisorSum DMSList DMSString Do DockedCells DocumentNotebook DominantColors DOSTextFormat Dot DotDashed DotEqual Dotted DoubleBracketingBar DoubleContourIntegral DoubleDownArrow DoubleLeftArrow DoubleLeftRightArrow DoubleLeftTee DoubleLongLeftArrow DoubleLongLeftRightArrow DoubleLongRightArrow DoubleRightArrow DoubleRightTee DoubleUpArrow DoubleUpDownArrow DoubleVerticalBar DoublyInfinite Down DownArrow DownArrowBar DownArrowUpArrow DownLeftRightVector DownLeftTeeVector DownLeftVector DownLeftVectorBar DownRightTeeVector DownRightVector DownRightVectorBar Downsample DownTee DownTeeArrow DownValues DragAndDrop DrawEdges DrawFrontFaces DrawHighlighted Drop DSolve Dt DualLinearProgramming DualSystemsModel DumpGet DumpSave DuplicateFreeQ Dynamic DynamicBox DynamicBoxOptions DynamicEvaluationTimeout DynamicLocation DynamicModule DynamicModuleBox DynamicModuleBoxOptions DynamicModuleParent DynamicModuleValues DynamicName DynamicNamespace DynamicReference DynamicSetting DynamicUpdating DynamicWrapper DynamicWrapperBox DynamicWrapperBoxOptions E EccentricityCentrality EdgeAdd EdgeBetweennessCentrality EdgeCapacity EdgeCapForm EdgeColor EdgeConnectivity EdgeCost EdgeCount EdgeCoverQ EdgeDashing EdgeDelete EdgeDetect EdgeForm EdgeIndex EdgeJoinForm EdgeLabeling EdgeLabels EdgeLabelStyle EdgeList EdgeOpacity EdgeQ EdgeRenderingFunction EdgeRules EdgeShapeFunction EdgeStyle EdgeThickness EdgeWeight Editable EditButtonSettings EditCellTagsSettings EditDistance EffectiveInterest Eigensystem Eigenvalues EigenvectorCentrality Eigenvectors Element ElementData Eliminate EliminationOrder EllipticE EllipticExp EllipticExpPrime EllipticF EllipticFilterModel EllipticK EllipticLog EllipticNomeQ EllipticPi EllipticReducedHalfPeriods EllipticTheta EllipticThetaPrime EmitSound EmphasizeSyntaxErrors EmpiricalDistribution Empty EmptyGraphQ EnableConsolePrintPacket Enabled Encode End EndAdd EndDialogPacket EndFrontEndInteractionPacket EndOfFile EndOfLine EndOfString EndPackage EngineeringForm Enter EnterExpressionPacket EnterTextPacket Entropy EntropyFilter Environment Epilog Equal EqualColumns EqualRows EqualTilde EquatedTo Equilibrium EquirippleFilterKernel Equivalent Erf Erfc Erfi ErlangB ErlangC ErlangDistribution Erosion ErrorBox ErrorBoxOptions ErrorNorm ErrorPacket ErrorsDialogSettings EstimatedDistribution EstimatedProcess EstimatorGains EstimatorRegulator EuclideanDistance EulerE EulerGamma EulerianGraphQ EulerPhi Evaluatable Evaluate Evaluated EvaluatePacket EvaluationCell EvaluationCompletionAction EvaluationElements EvaluationMode EvaluationMonitor EvaluationNotebook EvaluationObject EvaluationOrder Evaluator EvaluatorNames EvenQ EventData EventEvaluator EventHandler EventHandlerTag EventLabels ExactBlackmanWindow ExactNumberQ ExactRootIsolation ExampleData Except ExcludedForms ExcludePods Exclusions ExclusionsStyle Exists Exit ExitDialog Exp Expand ExpandAll ExpandDenominator ExpandFileName ExpandNumerator Expectation ExpectationE ExpectedValue ExpGammaDistribution ExpIntegralE ExpIntegralEi Exponent ExponentFunction ExponentialDistribution ExponentialFamily ExponentialGeneratingFunction ExponentialMovingAverage ExponentialPowerDistribution ExponentPosition ExponentStep Export ExportAutoReplacements ExportPacket ExportString Expression ExpressionCell ExpressionPacket ExpToTrig ExtendedGCD Extension ExtentElementFunction ExtentMarkers ExtentSize ExternalCall ExternalDataCharacterEncoding Extract ExtractArchive ExtremeValueDistribution FaceForm FaceGrids FaceGridsStyle Factor FactorComplete Factorial Factorial2 FactorialMoment FactorialMomentGeneratingFunction FactorialPower FactorInteger FactorList FactorSquareFree FactorSquareFreeList FactorTerms FactorTermsList Fail FailureDistribution False FARIMAProcess FEDisableConsolePrintPacket FeedbackSector FeedbackSectorStyle FeedbackType FEEnableConsolePrintPacket Fibonacci FieldHint FieldHintStyle FieldMasked FieldSize File FileBaseName FileByteCount FileDate FileExistsQ FileExtension FileFormat FileHash FileInformation FileName FileNameDepth FileNameDialogSettings FileNameDrop FileNameJoin FileNames FileNameSetter FileNameSplit FileNameTake FilePrint FileType FilledCurve FilledCurveBox Filling FillingStyle FillingTransform FilterRules FinancialBond FinancialData FinancialDerivative FinancialIndicator Find FindArgMax FindArgMin FindClique FindClusters FindCurvePath FindDistributionParameters FindDivisions FindEdgeCover FindEdgeCut FindEulerianCycle FindFaces FindFile FindFit FindGeneratingFunction FindGeoLocation FindGeometricTransform FindGraphCommunities FindGraphIsomorphism FindGraphPartition FindHamiltonianCycle FindIndependentEdgeSet FindIndependentVertexSet FindInstance FindIntegerNullVector FindKClan FindKClique FindKClub FindKPlex FindLibrary FindLinearRecurrence FindList FindMaximum FindMaximumFlow FindMaxValue FindMinimum FindMinimumCostFlow FindMinimumCut FindMinValue FindPermutation FindPostmanTour FindProcessParameters FindRoot FindSequenceFunction FindSettings FindShortestPath FindShortestTour FindThreshold FindVertexCover FindVertexCut Fine FinishDynamic FiniteAbelianGroupCount FiniteGroupCount FiniteGroupData First FirstPassageTimeDistribution FischerGroupFi22 FischerGroupFi23 FischerGroupFi24Prime FisherHypergeometricDistribution FisherRatioTest FisherZDistribution Fit FitAll FittedModel FixedPoint FixedPointList FlashSelection Flat Flatten FlattenAt FlatTopWindow FlipView Floor FlushPrintOutputPacket Fold FoldList Font FontColor FontFamily FontForm FontName FontOpacity FontPostScriptName FontProperties FontReencoding FontSize FontSlant FontSubstitutions FontTracking FontVariations FontWeight For ForAll Format FormatRules FormatType FormatTypeAutoConvert FormatValues FormBox FormBoxOptions FortranForm Forward ForwardBackward Fourier FourierCoefficient FourierCosCoefficient FourierCosSeries FourierCosTransform FourierDCT FourierDCTFilter FourierDCTMatrix FourierDST FourierDSTMatrix FourierMatrix FourierParameters FourierSequenceTransform FourierSeries FourierSinCoefficient FourierSinSeries FourierSinTransform FourierTransform FourierTrigSeries FractionalBrownianMotionProcess FractionalPart FractionBox FractionBoxOptions FractionLine Frame FrameBox FrameBoxOptions Framed FrameInset FrameLabel Frameless FrameMargins FrameStyle FrameTicks FrameTicksStyle FRatioDistribution FrechetDistribution FreeQ FrequencySamplingFilterKernel FresnelC FresnelS Friday FrobeniusNumber FrobeniusSolve FromCharacterCode FromCoefficientRules FromContinuedFraction FromDate FromDigits FromDMS Front FrontEndDynamicExpression FrontEndEventActions FrontEndExecute FrontEndObject FrontEndResource FrontEndResourceString FrontEndStackSize FrontEndToken FrontEndTokenExecute FrontEndValueCache FrontEndVersion FrontFaceColor FrontFaceOpacity Full FullAxes FullDefinition FullForm FullGraphics FullOptions FullSimplify Function FunctionExpand FunctionInterpolation FunctionSpace FussellVeselyImportance GaborFilter GaborMatrix GaborWavelet GainMargins GainPhaseMargins Gamma GammaDistribution GammaRegularized GapPenalty Gather GatherBy GaugeFaceElementFunction GaugeFaceStyle GaugeFrameElementFunction GaugeFrameSize GaugeFrameStyle GaugeLabels GaugeMarkers GaugeStyle GaussianFilter GaussianIntegers GaussianMatrix GaussianWindow GCD GegenbauerC General GeneralizedLinearModelFit GenerateConditions GeneratedCell GeneratedParameters GeneratingFunction Generic GenericCylindricalDecomposition GenomeData GenomeLookup GeodesicClosing GeodesicDilation GeodesicErosion GeodesicOpening GeoDestination GeodesyData GeoDirection GeoDistance GeoGridPosition GeometricBrownianMotionProcess GeometricDistribution GeometricMean GeometricMeanFilter GeometricTransformation GeometricTransformation3DBox GeometricTransformation3DBoxOptions GeometricTransformationBox GeometricTransformationBoxOptions GeoPosition GeoPositionENU GeoPositionXYZ GeoProjectionData GestureHandler GestureHandlerTag Get GetBoundingBoxSizePacket GetContext GetEnvironment GetFileName GetFrontEndOptionsDataPacket GetLinebreakInformationPacket GetMenusPacket GetPageBreakInformationPacket Glaisher GlobalClusteringCoefficient GlobalPreferences GlobalSession Glow GoldenRatio GompertzMakehamDistribution GoodmanKruskalGamma GoodmanKruskalGammaTest Goto Grad Gradient GradientFilter GradientOrientationFilter Graph GraphAssortativity GraphCenter GraphComplement GraphData GraphDensity GraphDiameter GraphDifference GraphDisjointUnion GraphDistance GraphDistanceMatrix GraphElementData GraphEmbedding GraphHighlight GraphHighlightStyle GraphHub Graphics Graphics3D Graphics3DBox Graphics3DBoxOptions GraphicsArray GraphicsBaseline GraphicsBox GraphicsBoxOptions GraphicsColor GraphicsColumn GraphicsComplex GraphicsComplex3DBox GraphicsComplex3DBoxOptions GraphicsComplexBox GraphicsComplexBoxOptions GraphicsContents GraphicsData GraphicsGrid GraphicsGridBox GraphicsGroup GraphicsGroup3DBox GraphicsGroup3DBoxOptions GraphicsGroupBox GraphicsGroupBoxOptions GraphicsGrouping GraphicsHighlightColor GraphicsRow GraphicsSpacing GraphicsStyle GraphIntersection GraphLayout GraphLinkEfficiency GraphPeriphery GraphPlot GraphPlot3D GraphPower GraphPropertyDistribution GraphQ GraphRadius GraphReciprocity GraphRoot GraphStyle GraphUnion Gray GrayLevel GreatCircleDistance Greater GreaterEqual GreaterEqualLess GreaterFullEqual GreaterGreater GreaterLess GreaterSlantEqual GreaterTilde Green Grid GridBaseline GridBox GridBoxAlignment GridBoxBackground GridBoxDividers GridBoxFrame GridBoxItemSize GridBoxItemStyle GridBoxOptions GridBoxSpacings GridCreationSettings GridDefaultElement GridElementStyleOptions GridFrame GridFrameMargins GridGraph GridLines GridLinesStyle GroebnerBasis GroupActionBase GroupCentralizer GroupElementFromWord GroupElementPosition GroupElementQ GroupElements GroupElementToWord GroupGenerators GroupMultiplicationTable GroupOrbits GroupOrder GroupPageBreakWithin GroupSetwiseStabilizer GroupStabilizer GroupStabilizerChain Gudermannian GumbelDistribution HaarWavelet HadamardMatrix HalfNormalDistribution HamiltonianGraphQ HammingDistance HammingWindow HankelH1 HankelH2 HankelMatrix HannPoissonWindow HannWindow HaradaNortonGroupHN HararyGraph HarmonicMean HarmonicMeanFilter HarmonicNumber Hash HashTable Haversine HazardFunction Head HeadCompose Heads HeavisideLambda HeavisidePi HeavisideTheta HeldGroupHe HeldPart HelpBrowserLookup HelpBrowserNotebook HelpBrowserSettings HermiteDecomposition HermiteH HermitianMatrixQ HessenbergDecomposition Hessian HexadecimalCharacter Hexahedron HexahedronBox HexahedronBoxOptions HiddenSurface HighlightGraph HighlightImage HighpassFilter HigmanSimsGroupHS HilbertFilter HilbertMatrix Histogram Histogram3D HistogramDistribution HistogramList HistogramTransform HistogramTransformInterpolation HitMissTransform HITSCentrality HodgeDual HoeffdingD HoeffdingDTest Hold HoldAll HoldAllComplete HoldComplete HoldFirst HoldForm HoldPattern HoldRest HolidayCalendar HomeDirectory HomePage Horizontal HorizontalForm HorizontalGauge HorizontalScrollPosition HornerForm HotellingTSquareDistribution HoytDistribution HTMLSave Hue HumpDownHump HumpEqual HurwitzLerchPhi HurwitzZeta HyperbolicDistribution HypercubeGraph HyperexponentialDistribution Hyperfactorial Hypergeometric0F1 Hypergeometric0F1Regularized Hypergeometric1F1 Hypergeometric1F1Regularized Hypergeometric2F1 Hypergeometric2F1Regularized HypergeometricDistribution HypergeometricPFQ HypergeometricPFQRegularized HypergeometricU Hyperlink HyperlinkCreationSettings Hyphenation HyphenationOptions HypoexponentialDistribution HypothesisTestData I Identity IdentityMatrix If IgnoreCase Im Image Image3D Image3DSlices ImageAccumulate ImageAdd ImageAdjust ImageAlign ImageApply ImageAspectRatio ImageAssemble ImageCache ImageCacheValid ImageCapture ImageChannels ImageClip ImageColorSpace ImageCompose ImageConvolve ImageCooccurrence ImageCorners ImageCorrelate ImageCorrespondingPoints ImageCrop ImageData ImageDataPacket ImageDeconvolve ImageDemosaic ImageDifference ImageDimensions ImageDistance ImageEffect ImageFeatureTrack ImageFileApply ImageFileFilter ImageFileScan ImageFilter ImageForestingComponents ImageForwardTransformation ImageHistogram ImageKeypoints ImageLevels ImageLines ImageMargins ImageMarkers ImageMeasurements ImageMultiply ImageOffset ImagePad ImagePadding ImagePartition ImagePeriodogram ImagePerspectiveTransformation ImageQ ImageRangeCache ImageReflect ImageRegion ImageResize ImageResolution ImageRotate ImageRotated ImageScaled ImageScan ImageSize ImageSizeAction ImageSizeCache ImageSizeMultipliers ImageSizeRaw ImageSubtract ImageTake ImageTransformation ImageTrim ImageType ImageValue ImageValuePositions Implies Import ImportAutoReplacements ImportString ImprovementImportance In IncidenceGraph IncidenceList IncidenceMatrix IncludeConstantBasis IncludeFileExtension IncludePods IncludeSingularTerm Increment Indent IndentingNewlineSpacings IndentMaxFraction IndependenceTest IndependentEdgeSetQ IndependentUnit IndependentVertexSetQ Indeterminate IndexCreationOptions Indexed IndexGraph IndexTag Inequality InexactNumberQ InexactNumbers Infinity Infix Information Inherited InheritScope Initialization InitializationCell InitializationCellEvaluation InitializationCellWarning InlineCounterAssignments InlineCounterIncrements InlineRules Inner Inpaint Input InputAliases InputAssumptions InputAutoReplacements InputField InputFieldBox InputFieldBoxOptions InputForm InputGrouping InputNamePacket InputNotebook InputPacket InputSettings InputStream InputString InputStringPacket InputToBoxFormPacket Insert InsertionPointObject InsertResults Inset Inset3DBox Inset3DBoxOptions InsetBox InsetBoxOptions Install InstallService InString Integer IntegerDigits IntegerExponent IntegerLength IntegerPart IntegerPartitions IntegerQ Integers IntegerString Integral Integrate Interactive InteractiveTradingChart Interlaced Interleaving InternallyBalancedDecomposition InterpolatingFunction InterpolatingPolynomial Interpolation InterpolationOrder InterpolationPoints InterpolationPrecision Interpretation InterpretationBox InterpretationBoxOptions InterpretationFunction InterpretTemplate InterquartileRange Interrupt InterruptSettings Intersection Interval IntervalIntersection IntervalMemberQ IntervalUnion Inverse InverseBetaRegularized InverseCDF InverseChiSquareDistribution InverseContinuousWaveletTransform InverseDistanceTransform InverseEllipticNomeQ InverseErf InverseErfc InverseFourier InverseFourierCosTransform InverseFourierSequenceTransform InverseFourierSinTransform InverseFourierTransform InverseFunction InverseFunctions InverseGammaDistribution InverseGammaRegularized InverseGaussianDistribution InverseGudermannian InverseHaversine InverseJacobiCD InverseJacobiCN InverseJacobiCS InverseJacobiDC InverseJacobiDN InverseJacobiDS InverseJacobiNC InverseJacobiND InverseJacobiNS InverseJacobiSC InverseJacobiSD InverseJacobiSN InverseLaplaceTransform InversePermutation InverseRadon InverseSeries InverseSurvivalFunction InverseWaveletTransform InverseWeierstrassP InverseZTransform Invisible InvisibleApplication InvisibleTimes IrreduciblePolynomialQ IsolatingInterval IsomorphicGraphQ IsotopeData Italic Item ItemBox ItemBoxOptions ItemSize ItemStyle ItoProcess JaccardDissimilarity JacobiAmplitude Jacobian JacobiCD JacobiCN JacobiCS JacobiDC JacobiDN JacobiDS JacobiNC JacobiND JacobiNS JacobiP JacobiSC JacobiSD JacobiSN JacobiSymbol JacobiZeta JankoGroupJ1 JankoGroupJ2 JankoGroupJ3 JankoGroupJ4 JarqueBeraALMTest JohnsonDistribution Join Joined JoinedCurve JoinedCurveBox JoinForm JordanDecomposition JordanModelDecomposition K KagiChart KaiserBesselWindow KaiserWindow KalmanEstimator KalmanFilter KarhunenLoeveDecomposition KaryTree KatzCentrality KCoreComponents KDistribution KelvinBei KelvinBer KelvinKei KelvinKer KendallTau KendallTauTest KernelExecute KernelMixtureDistribution KernelObject Kernels Ket Khinchin KirchhoffGraph KirchhoffMatrix KleinInvariantJ KnightTourGraph KnotData KnownUnitQ KolmogorovSmirnovTest KroneckerDelta KroneckerModelDecomposition KroneckerProduct KroneckerSymbol KuiperTest KumaraswamyDistribution Kurtosis KuwaharaFilter Label Labeled LabeledSlider LabelingFunction LabelStyle LaguerreL LambdaComponents LambertW LanczosWindow LandauDistribution Language LanguageCategory LaplaceDistribution LaplaceTransform Laplacian LaplacianFilter LaplacianGaussianFilter Large Larger Last Latitude LatitudeLongitude LatticeData LatticeReduce Launch LaunchKernels LayeredGraphPlot LayerSizeFunction LayoutInformation LCM LeafCount LeapYearQ LeastSquares LeastSquaresFilterKernel Left LeftArrow LeftArrowBar LeftArrowRightArrow LeftDownTeeVector LeftDownVector LeftDownVectorBar LeftRightArrow LeftRightVector LeftTee LeftTeeArrow LeftTeeVector LeftTriangle LeftTriangleBar LeftTriangleEqual LeftUpDownVector LeftUpTeeVector LeftUpVector LeftUpVectorBar LeftVector LeftVectorBar LegendAppearance Legended LegendFunction LegendLabel LegendLayout LegendMargins LegendMarkers LegendMarkerSize LegendreP LegendreQ LegendreType Length LengthWhile LerchPhi Less LessEqual LessEqualGreater LessFullEqual LessGreater LessLess LessSlantEqual LessTilde LetterCharacter LetterQ Level LeveneTest LeviCivitaTensor LevyDistribution Lexicographic LibraryFunction LibraryFunctionError LibraryFunctionInformation LibraryFunctionLoad LibraryFunctionUnload LibraryLoad LibraryUnload LicenseID LiftingFilterData LiftingWaveletTransform LightBlue LightBrown LightCyan Lighter LightGray LightGreen Lighting LightingAngle LightMagenta LightOrange LightPink LightPurple LightRed LightSources LightYellow Likelihood Limit LimitsPositioning LimitsPositioningTokens LindleyDistribution Line Line3DBox LinearFilter LinearFractionalTransform LinearModelFit LinearOffsetFunction LinearProgramming LinearRecurrence LinearSolve LinearSolveFunction LineBox LineBreak LinebreakAdjustments LineBreakChart LineBreakWithin LineColor LineForm LineGraph LineIndent LineIndentMaxFraction LineIntegralConvolutionPlot LineIntegralConvolutionScale LineLegend LineOpacity LineSpacing LineWrapParts LinkActivate LinkClose LinkConnect LinkConnectedQ LinkCreate LinkError LinkFlush LinkFunction LinkHost LinkInterrupt LinkLaunch LinkMode LinkObject LinkOpen LinkOptions LinkPatterns LinkProtocol LinkRead LinkReadHeld LinkReadyQ Links LinkWrite LinkWriteHeld LiouvilleLambda List Listable ListAnimate ListContourPlot ListContourPlot3D ListConvolve ListCorrelate ListCurvePathPlot ListDeconvolve ListDensityPlot Listen ListFourierSequenceTransform ListInterpolation ListLineIntegralConvolutionPlot ListLinePlot ListLogLinearPlot ListLogLogPlot ListLogPlot ListPicker ListPickerBox ListPickerBoxBackground ListPickerBoxOptions ListPlay ListPlot ListPlot3D ListPointPlot3D ListPolarPlot ListQ ListStreamDensityPlot ListStreamPlot ListSurfacePlot3D ListVectorDensityPlot ListVectorPlot ListVectorPlot3D ListZTransform Literal LiteralSearch LocalClusteringCoefficient LocalizeVariables LocationEquivalenceTest LocationTest Locator LocatorAutoCreate LocatorBox LocatorBoxOptions LocatorCentering LocatorPane LocatorPaneBox LocatorPaneBoxOptions LocatorRegion Locked Log Log10 Log2 LogBarnesG LogGamma LogGammaDistribution LogicalExpand LogIntegral LogisticDistribution LogitModelFit LogLikelihood LogLinearPlot LogLogisticDistribution LogLogPlot LogMultinormalDistribution LogNormalDistribution LogPlot LogRankTest LogSeriesDistribution LongEqual Longest LongestAscendingSequence LongestCommonSequence LongestCommonSequencePositions LongestCommonSubsequence LongestCommonSubsequencePositions LongestMatch LongForm Longitude LongLeftArrow LongLeftRightArrow LongRightArrow Loopback LoopFreeGraphQ LowerCaseQ LowerLeftArrow LowerRightArrow LowerTriangularize LowpassFilter LQEstimatorGains LQGRegulator LQOutputRegulatorGains LQRegulatorGains LUBackSubstitution LucasL LuccioSamiComponents LUDecomposition LyapunovSolve LyonsGroupLy MachineID MachineName MachineNumberQ MachinePrecision MacintoshSystemPageSetup Magenta Magnification Magnify MainSolve MaintainDynamicCaches Majority MakeBoxes MakeExpression MakeRules MangoldtLambda ManhattanDistance Manipulate Manipulator MannWhitneyTest MantissaExponent Manual Map MapAll MapAt MapIndexed MAProcess MapThread MarcumQ MardiaCombinedTest MardiaKurtosisTest MardiaSkewnessTest MarginalDistribution MarkovProcessProperties Masking MatchingDissimilarity MatchLocalNameQ MatchLocalNames MatchQ Material MathematicaNotation MathieuC MathieuCharacteristicA MathieuCharacteristicB MathieuCharacteristicExponent MathieuCPrime MathieuGroupM11 MathieuGroupM12 MathieuGroupM22 MathieuGroupM23 MathieuGroupM24 MathieuS MathieuSPrime MathMLForm MathMLText Matrices MatrixExp MatrixForm MatrixFunction MatrixLog MatrixPlot MatrixPower MatrixQ MatrixRank Max MaxBend MaxDetect MaxExtraBandwidths MaxExtraConditions MaxFeatures MaxFilter Maximize MaxIterations MaxMemoryUsed MaxMixtureKernels MaxPlotPoints MaxPoints MaxRecursion MaxStableDistribution MaxStepFraction MaxSteps MaxStepSize MaxValue MaxwellDistribution McLaughlinGroupMcL Mean MeanClusteringCoefficient MeanDegreeConnectivity MeanDeviation MeanFilter MeanGraphDistance MeanNeighborDegree MeanShift MeanShiftFilter Median MedianDeviation MedianFilter Medium MeijerG MeixnerDistribution MemberQ MemoryConstrained MemoryInUse Menu MenuAppearance MenuCommandKey MenuEvaluator MenuItem MenuPacket MenuSortingValue MenuStyle MenuView MergeDifferences Mesh MeshFunctions MeshRange MeshShading MeshStyle Message MessageDialog MessageList MessageName MessageOptions MessagePacket Messages MessagesNotebook MetaCharacters MetaInformation Method MethodOptions MexicanHatWavelet MeyerWavelet Min MinDetect MinFilter MinimalPolynomial MinimalStateSpaceModel Minimize Minors MinRecursion MinSize MinStableDistribution Minus MinusPlus MinValue Missing MissingDataMethod MittagLefflerE MixedRadix MixedRadixQuantity MixtureDistribution Mod Modal Mode Modular ModularLambda Module Modulus MoebiusMu Moment Momentary MomentConvert MomentEvaluate MomentGeneratingFunction Monday Monitor MonomialList MonomialOrder MonsterGroupM MorletWavelet MorphologicalBinarize MorphologicalBranchPoints MorphologicalComponents MorphologicalEulerNumber MorphologicalGraph MorphologicalPerimeter MorphologicalTransform Most MouseAnnotation MouseAppearance MouseAppearanceTag MouseButtons Mouseover MousePointerNote MousePosition MovingAverage MovingMedian MoyalDistribution MultiedgeStyle MultilaunchWarning MultiLetterItalics MultiLetterStyle MultilineFunction Multinomial MultinomialDistribution MultinormalDistribution MultiplicativeOrder Multiplicity Multiselection MultivariateHypergeometricDistribution MultivariatePoissonDistribution MultivariateTDistribution N NakagamiDistribution NameQ Names NamespaceBox Nand NArgMax NArgMin NBernoulliB NCache NDSolve NDSolveValue Nearest NearestFunction NeedCurrentFrontEndPackagePacket NeedCurrentFrontEndSymbolsPacket NeedlemanWunschSimilarity Needs Negative NegativeBinomialDistribution NegativeMultinomialDistribution NeighborhoodGraph Nest NestedGreaterGreater NestedLessLess NestedScriptRules NestList NestWhile NestWhileList NevilleThetaC NevilleThetaD NevilleThetaN NevilleThetaS NewPrimitiveStyle NExpectation Next NextPrime NHoldAll NHoldFirst NHoldRest NicholsGridLines NicholsPlot NIntegrate NMaximize NMaxValue NMinimize NMinValue NominalVariables NonAssociative NoncentralBetaDistribution NoncentralChiSquareDistribution NoncentralFRatioDistribution NoncentralStudentTDistribution NonCommutativeMultiply NonConstants None NonlinearModelFit NonlocalMeansFilter NonNegative NonPositive Nor NorlundB Norm Normal NormalDistribution NormalGrouping Normalize NormalizedSquaredEuclideanDistance NormalsFunction NormFunction Not NotCongruent NotCupCap NotDoubleVerticalBar Notebook NotebookApply NotebookAutoSave NotebookClose NotebookConvertSettings NotebookCreate NotebookCreateReturnObject NotebookDefault NotebookDelete NotebookDirectory NotebookDynamicExpression NotebookEvaluate NotebookEventActions NotebookFileName NotebookFind NotebookFindReturnObject NotebookGet NotebookGetLayoutInformationPacket NotebookGetMisspellingsPacket NotebookInformation NotebookInterfaceObject NotebookLocate NotebookObject NotebookOpen NotebookOpenReturnObject NotebookPath NotebookPrint NotebookPut NotebookPutReturnObject NotebookRead NotebookResetGeneratedCells Notebooks NotebookSave NotebookSaveAs NotebookSelection NotebookSetupLayoutInformationPacket NotebooksMenu NotebookWrite NotElement NotEqualTilde NotExists NotGreater NotGreaterEqual NotGreaterFullEqual NotGreaterGreater NotGreaterLess NotGreaterSlantEqual NotGreaterTilde NotHumpDownHump NotHumpEqual NotLeftTriangle NotLeftTriangleBar NotLeftTriangleEqual NotLess NotLessEqual NotLessFullEqual NotLessGreater NotLessLess NotLessSlantEqual NotLessTilde NotNestedGreaterGreater NotNestedLessLess NotPrecedes NotPrecedesEqual NotPrecedesSlantEqual NotPrecedesTilde NotReverseElement NotRightTriangle NotRightTriangleBar NotRightTriangleEqual NotSquareSubset NotSquareSubsetEqual NotSquareSuperset NotSquareSupersetEqual NotSubset NotSubsetEqual NotSucceeds NotSucceedsEqual NotSucceedsSlantEqual NotSucceedsTilde NotSuperset NotSupersetEqual NotTilde NotTildeEqual NotTildeFullEqual NotTildeTilde NotVerticalBar NProbability NProduct NProductFactors NRoots NSolve NSum NSumTerms Null NullRecords NullSpace NullWords Number NumberFieldClassNumber NumberFieldDiscriminant NumberFieldFundamentalUnits NumberFieldIntegralBasis NumberFieldNormRepresentatives NumberFieldRegulator NumberFieldRootsOfUnity NumberFieldSignature NumberForm NumberFormat NumberMarks NumberMultiplier NumberPadding NumberPoint NumberQ NumberSeparator NumberSigns NumberString Numerator NumericFunction NumericQ NuttallWindow NValues NyquistGridLines NyquistPlot O ObservabilityGramian ObservabilityMatrix ObservableDecomposition ObservableModelQ OddQ Off Offset OLEData On ONanGroupON OneIdentity Opacity Open OpenAppend Opener OpenerBox OpenerBoxOptions OpenerView OpenFunctionInspectorPacket Opening OpenRead OpenSpecialOptions OpenTemporary OpenWrite Operate OperatingSystem OptimumFlowData Optional OptionInspectorSettings OptionQ Options OptionsPacket OptionsPattern OptionValue OptionValueBox OptionValueBoxOptions Or Orange Order OrderDistribution OrderedQ Ordering Orderless OrnsteinUhlenbeckProcess Orthogonalize Out Outer OutputAutoOverwrite OutputControllabilityMatrix OutputControllableModelQ OutputForm OutputFormData OutputGrouping OutputMathEditExpression OutputNamePacket OutputResponse OutputSizeLimit OutputStream Over OverBar OverDot Overflow OverHat Overlaps Overlay OverlayBox OverlayBoxOptions Overscript OverscriptBox OverscriptBoxOptions OverTilde OverVector OwenT OwnValues PackingMethod PaddedForm Padding PadeApproximant PadLeft PadRight PageBreakAbove PageBreakBelow PageBreakWithin PageFooterLines PageFooters PageHeaderLines PageHeaders PageHeight PageRankCentrality PageWidth PairedBarChart PairedHistogram PairedSmoothHistogram PairedTTest PairedZTest PaletteNotebook PalettePath Pane PaneBox PaneBoxOptions Panel PanelBox PanelBoxOptions Paneled PaneSelector PaneSelectorBox PaneSelectorBoxOptions PaperWidth ParabolicCylinderD ParagraphIndent ParagraphSpacing ParallelArray ParallelCombine ParallelDo ParallelEvaluate Parallelization Parallelize ParallelMap ParallelNeeds ParallelProduct ParallelSubmit ParallelSum ParallelTable ParallelTry Parameter ParameterEstimator ParameterMixtureDistribution ParameterVariables ParametricFunction ParametricNDSolve ParametricNDSolveValue ParametricPlot ParametricPlot3D ParentConnect ParentDirectory ParentForm Parenthesize ParentList ParetoDistribution Part PartialCorrelationFunction PartialD ParticleData Partition PartitionsP PartitionsQ ParzenWindow PascalDistribution PassEventsDown PassEventsUp Paste PasteBoxFormInlineCells PasteButton Path PathGraph PathGraphQ Pattern PatternSequence PatternTest PauliMatrix PaulWavelet Pause PausedTime PDF PearsonChiSquareTest PearsonCorrelationTest PearsonDistribution PerformanceGoal PeriodicInterpolation Periodogram PeriodogramArray PermutationCycles PermutationCyclesQ PermutationGroup PermutationLength PermutationList PermutationListQ PermutationMax PermutationMin PermutationOrder PermutationPower PermutationProduct PermutationReplace Permutations PermutationSupport Permute PeronaMalikFilter Perpendicular PERTDistribution PetersenGraph PhaseMargins Pi Pick PIDData PIDDerivativeFilter PIDFeedforward PIDTune Piecewise PiecewiseExpand PieChart PieChart3D PillaiTrace PillaiTraceTest Pink Pivoting PixelConstrained PixelValue PixelValuePositions Placed Placeholder PlaceholderReplace Plain PlanarGraphQ Play PlayRange Plot Plot3D Plot3Matrix PlotDivision PlotJoined PlotLabel PlotLayout PlotLegends PlotMarkers PlotPoints PlotRange PlotRangeClipping PlotRangePadding PlotRegion PlotStyle Plus PlusMinus Pochhammer PodStates PodWidth Point Point3DBox PointBox PointFigureChart PointForm PointLegend PointSize PoissonConsulDistribution PoissonDistribution PoissonProcess PoissonWindow PolarAxes PolarAxesOrigin PolarGridLines PolarPlot PolarTicks PoleZeroMarkers PolyaAeppliDistribution PolyGamma Polygon Polygon3DBox Polygon3DBoxOptions PolygonBox PolygonBoxOptions PolygonHoleScale PolygonIntersections PolygonScale PolyhedronData PolyLog PolynomialExtendedGCD PolynomialForm PolynomialGCD PolynomialLCM PolynomialMod PolynomialQ PolynomialQuotient PolynomialQuotientRemainder PolynomialReduce PolynomialRemainder Polynomials PopupMenu PopupMenuBox PopupMenuBoxOptions PopupView PopupWindow Position Positive PositiveDefiniteMatrixQ PossibleZeroQ Postfix PostScript Power PowerDistribution PowerExpand PowerMod PowerModList PowerSpectralDensity PowersRepresentations PowerSymmetricPolynomial Precedence PrecedenceForm Precedes PrecedesEqual PrecedesSlantEqual PrecedesTilde Precision PrecisionGoal PreDecrement PredictionRoot PreemptProtect PreferencesPath Prefix PreIncrement Prepend PrependTo PreserveImageOptions Previous PriceGraphDistribution PrimaryPlaceholder Prime PrimeNu PrimeOmega PrimePi PrimePowerQ PrimeQ Primes PrimeZetaP PrimitiveRoot PrincipalComponents PrincipalValue Print PrintAction PrintForm PrintingCopies PrintingOptions PrintingPageRange PrintingStartingPageNumber PrintingStyleEnvironment PrintPrecision PrintTemporary Prism PrismBox PrismBoxOptions PrivateCellOptions PrivateEvaluationOptions PrivateFontOptions PrivateFrontEndOptions PrivateNotebookOptions PrivatePaths Probability ProbabilityDistribution ProbabilityPlot ProbabilityPr ProbabilityScalePlot ProbitModelFit ProcessEstimator ProcessParameterAssumptions ProcessParameterQ ProcessStateDomain ProcessTimeDomain Product ProductDistribution ProductLog ProgressIndicator ProgressIndicatorBox ProgressIndicatorBoxOptions Projection Prolog PromptForm Properties Property PropertyList PropertyValue Proportion Proportional Protect Protected ProteinData Pruning PseudoInverse Purple Put PutAppend Pyramid PyramidBox PyramidBoxOptions QBinomial QFactorial QGamma QHypergeometricPFQ QPochhammer QPolyGamma QRDecomposition QuadraticIrrationalQ Quantile QuantilePlot Quantity QuantityForm QuantityMagnitude QuantityQ QuantityUnit Quartics QuartileDeviation Quartiles QuartileSkewness QueueingNetworkProcess QueueingProcess QueueProperties Quiet Quit Quotient QuotientRemainder RadialityCentrality RadicalBox RadicalBoxOptions RadioButton RadioButtonBar RadioButtonBox RadioButtonBoxOptions Radon RamanujanTau RamanujanTauL RamanujanTauTheta RamanujanTauZ Random RandomChoice RandomComplex RandomFunction RandomGraph RandomImage RandomInteger RandomPermutation RandomPrime RandomReal RandomSample RandomSeed RandomVariate RandomWalkProcess Range RangeFilter RangeSpecification RankedMax RankedMin Raster Raster3D Raster3DBox Raster3DBoxOptions RasterArray RasterBox RasterBoxOptions Rasterize RasterSize Rational RationalFunctions Rationalize Rationals Ratios Raw RawArray RawBoxes RawData RawMedium RayleighDistribution Re Read ReadList ReadProtected Real RealBlockDiagonalForm RealDigits RealExponent Reals Reap Record RecordLists RecordSeparators Rectangle RectangleBox RectangleBoxOptions RectangleChart RectangleChart3D RecurrenceFilter RecurrenceTable RecurringDigitsForm Red Reduce RefBox ReferenceLineStyle ReferenceMarkers ReferenceMarkerStyle Refine ReflectionMatrix ReflectionTransform Refresh RefreshRate RegionBinarize RegionFunction RegionPlot RegionPlot3D RegularExpression Regularization Reinstall Release ReleaseHold ReliabilityDistribution ReliefImage ReliefPlot Remove RemoveAlphaChannel RemoveAsynchronousTask Removed RemoveInputStreamMethod RemoveOutputStreamMethod RemoveProperty RemoveScheduledTask RenameDirectory RenameFile RenderAll RenderingOptions RenewalProcess RenkoChart Repeated RepeatedNull RepeatedString Replace ReplaceAll ReplaceHeldPart ReplaceImageValue ReplaceList ReplacePart ReplacePixelValue ReplaceRepeated Resampling Rescale RescalingTransform ResetDirectory ResetMenusPacket ResetScheduledTask Residue Resolve Rest Resultant ResumePacket Return ReturnExpressionPacket ReturnInputFormPacket ReturnPacket ReturnTextPacket Reverse ReverseBiorthogonalSplineWavelet ReverseElement ReverseEquilibrium ReverseGraph ReverseUpEquilibrium RevolutionAxis RevolutionPlot3D RGBColor RiccatiSolve RiceDistribution RidgeFilter RiemannR RiemannSiegelTheta RiemannSiegelZ Riffle Right RightArrow RightArrowBar RightArrowLeftArrow RightCosetRepresentative RightDownTeeVector RightDownVector RightDownVectorBar RightTee RightTeeArrow RightTeeVector RightTriangle RightTriangleBar RightTriangleEqual RightUpDownVector RightUpTeeVector RightUpVector RightUpVectorBar RightVector RightVectorBar RiskAchievementImportance RiskReductionImportance RogersTanimotoDissimilarity Root RootApproximant RootIntervals RootLocusPlot RootMeanSquare RootOfUnityQ RootReduce Roots RootSum Rotate RotateLabel RotateLeft RotateRight RotationAction RotationBox RotationBoxOptions RotationMatrix RotationTransform Round RoundImplies RoundingRadius Row RowAlignments RowBackgrounds RowBox RowHeights RowLines RowMinHeight RowReduce RowsEqual RowSpacings RSolve RudvalisGroupRu Rule RuleCondition RuleDelayed RuleForm RulerUnits Run RunScheduledTask RunThrough RuntimeAttributes RuntimeOptions RussellRaoDissimilarity SameQ SameTest SampleDepth SampledSoundFunction SampledSoundList SampleRate SamplingPeriod SARIMAProcess SARMAProcess SatisfiabilityCount SatisfiabilityInstances SatisfiableQ Saturday Save Saveable SaveAutoDelete SaveDefinitions SawtoothWave Scale Scaled ScaleDivisions ScaledMousePosition ScaleOrigin ScalePadding ScaleRanges ScaleRangeStyle ScalingFunctions ScalingMatrix ScalingTransform Scan ScheduledTaskActiveQ ScheduledTaskData ScheduledTaskObject ScheduledTasks SchurDecomposition ScientificForm ScreenRectangle ScreenStyleEnvironment ScriptBaselineShifts ScriptLevel ScriptMinSize ScriptRules ScriptSizeMultipliers Scrollbars ScrollingOptions ScrollPosition Sec Sech SechDistribution SectionGrouping SectorChart SectorChart3D SectorOrigin SectorSpacing SeedRandom Select Selectable SelectComponents SelectedCells SelectedNotebook Selection SelectionAnimate SelectionCell SelectionCellCreateCell SelectionCellDefaultStyle SelectionCellParentStyle SelectionCreateCell SelectionDebuggerTag SelectionDuplicateCell SelectionEvaluate SelectionEvaluateCreateCell SelectionMove SelectionPlaceholder SelectionSetStyle SelectWithContents SelfLoops SelfLoopStyle SemialgebraicComponentInstances SendMail Sequence SequenceAlignment SequenceForm SequenceHold SequenceLimit Series SeriesCoefficient SeriesData SessionTime Set SetAccuracy SetAlphaChannel SetAttributes Setbacks SetBoxFormNamesPacket SetDelayed SetDirectory SetEnvironment SetEvaluationNotebook SetFileDate SetFileLoadingContext SetNotebookStatusLine SetOptions SetOptionsPacket SetPrecision SetProperty SetSelectedNotebook SetSharedFunction SetSharedVariable SetSpeechParametersPacket SetStreamPosition SetSystemOptions Setter SetterBar SetterBox SetterBoxOptions Setting SetValue Shading Shallow ShannonWavelet ShapiroWilkTest Share Sharpen ShearingMatrix ShearingTransform ShenCastanMatrix Short ShortDownArrow Shortest ShortestMatch ShortestPathFunction ShortLeftArrow ShortRightArrow ShortUpArrow Show ShowAutoStyles ShowCellBracket ShowCellLabel ShowCellTags ShowClosedCellArea ShowContents ShowControls ShowCursorTracker ShowGroupOpenCloseIcon ShowGroupOpener ShowInvisibleCharacters ShowPageBreaks ShowPredictiveInterface ShowSelection ShowShortBoxForm ShowSpecialCharacters ShowStringCharacters ShowSyntaxStyles ShrinkingDelay ShrinkWrapBoundingBox SiegelTheta SiegelTukeyTest Sign Signature SignedRankTest SignificanceLevel SignPadding SignTest SimilarityRules SimpleGraph SimpleGraphQ Simplify Sin Sinc SinghMaddalaDistribution SingleEvaluation SingleLetterItalics SingleLetterStyle SingularValueDecomposition SingularValueList SingularValuePlot SingularValues Sinh SinhIntegral SinIntegral SixJSymbol Skeleton SkeletonTransform SkellamDistribution Skewness SkewNormalDistribution Skip SliceDistribution Slider Slider2D Slider2DBox Slider2DBoxOptions SliderBox SliderBoxOptions SlideView Slot SlotSequence Small SmallCircle Smaller SmithDelayCompensator SmithWatermanSimilarity SmoothDensityHistogram SmoothHistogram SmoothHistogram3D SmoothKernelDistribution SocialMediaData Socket SokalSneathDissimilarity Solve SolveAlways SolveDelayed Sort SortBy Sound SoundAndGraphics SoundNote SoundVolume Sow Space SpaceForm Spacer Spacings Span SpanAdjustments SpanCharacterRounding SpanFromAbove SpanFromBoth SpanFromLeft SpanLineThickness SpanMaxSize SpanMinSize SpanningCharacters SpanSymmetric SparseArray SpatialGraphDistribution Speak SpeakTextPacket SpearmanRankTest SpearmanRho Spectrogram SpectrogramArray Specularity SpellingCorrection SpellingDictionaries SpellingDictionariesPath SpellingOptions SpellingSuggestionsPacket Sphere SphereBox SphericalBesselJ SphericalBesselY SphericalHankelH1 SphericalHankelH2 SphericalHarmonicY SphericalPlot3D SphericalRegion SpheroidalEigenvalue SpheroidalJoiningFactor SpheroidalPS SpheroidalPSPrime SpheroidalQS SpheroidalQSPrime SpheroidalRadialFactor SpheroidalS1 SpheroidalS1Prime SpheroidalS2 SpheroidalS2Prime Splice SplicedDistribution SplineClosed SplineDegree SplineKnots SplineWeights Split SplitBy SpokenString Sqrt SqrtBox SqrtBoxOptions Square SquaredEuclideanDistance SquareFreeQ SquareIntersection SquaresR SquareSubset SquareSubsetEqual SquareSuperset SquareSupersetEqual SquareUnion SquareWave StabilityMargins StabilityMarginsStyle StableDistribution Stack StackBegin StackComplete StackInhibit StandardDeviation StandardDeviationFilter StandardForm Standardize StandbyDistribution Star StarGraph StartAsynchronousTask StartingStepSize StartOfLine StartOfString StartScheduledTask StartupSound StateDimensions StateFeedbackGains StateOutputEstimator StateResponse StateSpaceModel StateSpaceRealization StateSpaceTransform StationaryDistribution StationaryWaveletPacketTransform StationaryWaveletTransform StatusArea StatusCentrality StepMonitor StieltjesGamma StirlingS1 StirlingS2 StopAsynchronousTask StopScheduledTask StrataVariables StratonovichProcess StreamColorFunction StreamColorFunctionScaling StreamDensityPlot StreamPlot StreamPoints StreamPosition Streams StreamScale StreamStyle String StringBreak StringByteCount StringCases StringCount StringDrop StringExpression StringForm StringFormat StringFreeQ StringInsert StringJoin StringLength StringMatchQ StringPosition StringQ StringReplace StringReplaceList StringReplacePart StringReverse StringRotateLeft StringRotateRight StringSkeleton StringSplit StringTake StringToStream StringTrim StripBoxes StripOnInput StripWrapperBoxes StrokeForm StructuralImportance StructuredArray StructuredSelection StruveH StruveL Stub StudentTDistribution Style StyleBox StyleBoxAutoDelete StyleBoxOptions StyleData StyleDefinitions StyleForm StyleKeyMapping StyleMenuListing StyleNameDialogSettings StyleNames StylePrint StyleSheetPath Subfactorial Subgraph SubMinus SubPlus SubresultantPolynomialRemainders SubresultantPolynomials Subresultants Subscript SubscriptBox SubscriptBoxOptions Subscripted Subset SubsetEqual Subsets SubStar Subsuperscript SubsuperscriptBox SubsuperscriptBoxOptions Subtract SubtractFrom SubValues Succeeds SucceedsEqual SucceedsSlantEqual SucceedsTilde SuchThat Sum SumConvergence Sunday SuperDagger SuperMinus SuperPlus Superscript SuperscriptBox SuperscriptBoxOptions Superset SupersetEqual SuperStar Surd SurdForm SurfaceColor SurfaceGraphics SurvivalDistribution SurvivalFunction SurvivalModel SurvivalModelFit SuspendPacket SuzukiDistribution SuzukiGroupSuz SwatchLegend Switch Symbol SymbolName SymletWavelet Symmetric SymmetricGroup SymmetricMatrixQ SymmetricPolynomial SymmetricReduction Symmetrize SymmetrizedArray SymmetrizedArrayRules SymmetrizedDependentComponents SymmetrizedIndependentComponents SymmetrizedReplacePart SynchronousInitialization SynchronousUpdating Syntax SyntaxForm SyntaxInformation SyntaxLength SyntaxPacket SyntaxQ SystemDialogInput SystemException SystemHelpPath SystemInformation SystemInformationData SystemOpen SystemOptions SystemsModelDelay SystemsModelDelayApproximate SystemsModelDelete SystemsModelDimensions SystemsModelExtract SystemsModelFeedbackConnect SystemsModelLabels SystemsModelOrder SystemsModelParallelConnect SystemsModelSeriesConnect SystemsModelStateFeedbackConnect SystemStub Tab TabFilling Table TableAlignments TableDepth TableDirections TableForm TableHeadings TableSpacing TableView TableViewBox TabSpacings TabView TabViewBox TabViewBoxOptions TagBox TagBoxNote TagBoxOptions TaggingRules TagSet TagSetDelayed TagStyle TagUnset Take TakeWhile Tally Tan Tanh TargetFunctions TargetUnits TautologyQ TelegraphProcess TemplateBox TemplateBoxOptions TemplateSlotSequence TemporalData Temporary TemporaryVariable TensorContract TensorDimensions TensorExpand TensorProduct TensorQ TensorRank TensorReduce TensorSymmetry TensorTranspose TensorWedge Tetrahedron TetrahedronBox TetrahedronBoxOptions TeXForm TeXSave Text Text3DBox Text3DBoxOptions TextAlignment TextBand TextBoundingBox TextBox TextCell TextClipboardType TextData TextForm TextJustification TextLine TextPacket TextParagraph TextRecognize TextRendering TextStyle Texture TextureCoordinateFunction TextureCoordinateScaling Therefore ThermometerGauge Thick Thickness Thin Thinning ThisLink ThompsonGroupTh Thread ThreeJSymbol Threshold Through Throw Thumbnail Thursday Ticks TicksStyle Tilde TildeEqual TildeFullEqual TildeTilde TimeConstrained TimeConstraint Times TimesBy TimeSeriesForecast TimeSeriesInvertibility TimeUsed TimeValue TimeZone Timing Tiny TitleGrouping TitsGroupT ToBoxes ToCharacterCode ToColor ToContinuousTimeModel ToDate ToDiscreteTimeModel ToeplitzMatrix ToExpression ToFileName Together Toggle ToggleFalse Toggler TogglerBar TogglerBox TogglerBoxOptions ToHeldExpression ToInvertibleTimeSeries TokenWords Tolerance ToLowerCase ToNumberField TooBig Tooltip TooltipBox TooltipBoxOptions TooltipDelay TooltipStyle Top TopHatTransform TopologicalSort ToRadicals ToRules ToString Total TotalHeight TotalVariationFilter TotalWidth TouchscreenAutoZoom TouchscreenControlPlacement ToUpperCase Tr Trace TraceAbove TraceAction TraceBackward TraceDepth TraceDialog TraceForward TraceInternal TraceLevel TraceOff TraceOn TraceOriginal TracePrint TraceScan TrackedSymbols TradingChart TraditionalForm TraditionalFunctionNotation TraditionalNotation TraditionalOrder TransferFunctionCancel TransferFunctionExpand TransferFunctionFactor TransferFunctionModel TransferFunctionPoles TransferFunctionTransform TransferFunctionZeros TransformationFunction TransformationFunctions TransformationMatrix TransformedDistribution TransformedField Translate TranslationTransform TransparentColor Transpose TreeForm TreeGraph TreeGraphQ TreePlot TrendStyle TriangleWave TriangularDistribution Trig TrigExpand TrigFactor TrigFactorList Trigger TrigReduce TrigToExp TrimmedMean True TrueQ TruncatedDistribution TsallisQExponentialDistribution TsallisQGaussianDistribution TTest Tube TubeBezierCurveBox TubeBezierCurveBoxOptions TubeBox TubeBSplineCurveBox TubeBSplineCurveBoxOptions Tuesday TukeyLambdaDistribution TukeyWindow Tuples TuranGraph TuringMachine Transparent UnateQ Uncompress Undefined UnderBar Underflow Underlined Underoverscript UnderoverscriptBox UnderoverscriptBoxOptions Underscript UnderscriptBox UnderscriptBoxOptions UndirectedEdge UndirectedGraph UndirectedGraphQ UndocumentedTestFEParserPacket UndocumentedTestGetSelectionPacket Unequal Unevaluated UniformDistribution UniformGraphDistribution UniformSumDistribution Uninstall Union UnionPlus Unique UnitBox UnitConvert UnitDimensions Unitize UnitRootTest UnitSimplify UnitStep UnitTriangle UnitVector Unprotect UnsameQ UnsavedVariables Unset UnsetShared UntrackedVariables Up UpArrow UpArrowBar UpArrowDownArrow Update UpdateDynamicObjects UpdateDynamicObjectsSynchronous UpdateInterval UpDownArrow UpEquilibrium UpperCaseQ UpperLeftArrow UpperRightArrow UpperTriangularize Upsample UpSet UpSetDelayed UpTee UpTeeArrow UpValues URL URLFetch URLFetchAsynchronous URLSave URLSaveAsynchronous UseGraphicsRange Using UsingFrontEnd V2Get ValidationLength Value ValueBox ValueBoxOptions ValueForm ValueQ ValuesData Variables Variance VarianceEquivalenceTest VarianceEstimatorFunction VarianceGammaDistribution VarianceTest VectorAngle VectorColorFunction VectorColorFunctionScaling VectorDensityPlot VectorGlyphData VectorPlot VectorPlot3D VectorPoints VectorQ Vectors VectorScale VectorStyle Vee Verbatim Verbose VerboseConvertToPostScriptPacket VerifyConvergence VerifySolutions VerifyTestAssumptions Version VersionNumber VertexAdd VertexCapacity VertexColors VertexComponent VertexConnectivity VertexCoordinateRules VertexCoordinates VertexCorrelationSimilarity VertexCosineSimilarity VertexCount VertexCoverQ VertexDataCoordinates VertexDegree VertexDelete VertexDiceSimilarity VertexEccentricity VertexInComponent VertexInDegree VertexIndex VertexJaccardSimilarity VertexLabeling VertexLabels VertexLabelStyle VertexList VertexNormals VertexOutComponent VertexOutDegree VertexQ VertexRenderingFunction VertexReplace VertexShape VertexShapeFunction VertexSize VertexStyle VertexTextureCoordinates VertexWeight Vertical VerticalBar VerticalForm VerticalGauge VerticalSeparator VerticalSlider VerticalTilde ViewAngle ViewCenter ViewMatrix ViewPoint ViewPointSelectorSettings ViewPort ViewRange ViewVector ViewVertical VirtualGroupData Visible VisibleCell VoigtDistribution VonMisesDistribution WaitAll WaitAsynchronousTask WaitNext WaitUntil WakebyDistribution WalleniusHypergeometricDistribution WaringYuleDistribution WatershedComponents WatsonUSquareTest WattsStrogatzGraphDistribution WaveletBestBasis WaveletFilterCoefficients WaveletImagePlot WaveletListPlot WaveletMapIndexed WaveletMatrixPlot WaveletPhi WaveletPsi WaveletScale WaveletScalogram WaveletThreshold WeaklyConnectedComponents WeaklyConnectedGraphQ WeakStationarity WeatherData WeberE Wedge Wednesday WeibullDistribution WeierstrassHalfPeriods WeierstrassInvariants WeierstrassP WeierstrassPPrime WeierstrassSigma WeierstrassZeta WeightedAdjacencyGraph WeightedAdjacencyMatrix WeightedData WeightedGraphQ Weights WelchWindow WheelGraph WhenEvent Which While White Whitespace WhitespaceCharacter WhittakerM WhittakerW WienerFilter WienerProcess WignerD WignerSemicircleDistribution WilksW WilksWTest WindowClickSelect WindowElements WindowFloating WindowFrame WindowFrameElements WindowMargins WindowMovable WindowOpacity WindowSelected WindowSize WindowStatusArea WindowTitle WindowToolbars WindowWidth With WolframAlpha WolframAlphaDate WolframAlphaQuantity WolframAlphaResult Word WordBoundary WordCharacter WordData WordSearch WordSeparators WorkingPrecision Write WriteString Wronskian XMLElement XMLObject Xnor Xor Yellow YuleDissimilarity ZernikeR ZeroSymmetric ZeroTest ZeroWidthTimes Zeta ZetaZero ZipfDistribution ZTest ZTransform $Aborted $ActivationGroupID $ActivationKey $ActivationUserRegistered $AddOnsDirectory $AssertFunction $Assumptions $AsynchronousTask $BaseDirectory $BatchInput $BatchOutput $BoxForms $ByteOrdering $Canceled $CharacterEncoding $CharacterEncodings $CommandLine $CompilationTarget $ConditionHold $ConfiguredKernels $Context $ContextPath $ControlActiveSetting $CreationDate $CurrentLink $DateStringFormat $DefaultFont $DefaultFrontEnd $DefaultImagingDevice $DefaultPath $Display $DisplayFunction $DistributedContexts $DynamicEvaluation $Echo $Epilog $ExportFormats $Failed $FinancialDataSource $FormatType $FrontEnd $FrontEndSession $GeoLocation $HistoryLength $HomeDirectory $HTTPCookies $IgnoreEOF $ImagingDevices $ImportFormats $InitialDirectory $Input $InputFileName $InputStreamMethods $Inspector $InstallationDate $InstallationDirectory $InterfaceEnvironment $IterationLimit $KernelCount $KernelID $Language $LaunchDirectory $LibraryPath $LicenseExpirationDate $LicenseID $LicenseProcesses $LicenseServer $LicenseSubprocesses $LicenseType $Line $Linked $LinkSupported $LoadedFiles $MachineAddresses $MachineDomain $MachineDomains $MachineEpsilon $MachineID $MachineName $MachinePrecision $MachineType $MaxExtraPrecision $MaxLicenseProcesses $MaxLicenseSubprocesses $MaxMachineNumber $MaxNumber $MaxPiecewiseCases $MaxPrecision $MaxRootDegree $MessageGroups $MessageList $MessagePrePrint $Messages $MinMachineNumber $MinNumber $MinorReleaseNumber $MinPrecision $ModuleNumber $NetworkLicense $NewMessage $NewSymbol $Notebooks $NumberMarks $Off $OperatingSystem $Output $OutputForms $OutputSizeLimit $OutputStreamMethods $Packages $ParentLink $ParentProcessID $PasswordFile $PatchLevelID $Path $PathnameSeparator $PerformanceGoal $PipeSupported $Post $Pre $PreferencesDirectory $PrePrint $PreRead $PrintForms $PrintLiteral $ProcessID $ProcessorCount $ProcessorType $ProductInformation $ProgramName $RandomState $RecursionLimit $ReleaseNumber $RootDirectory $ScheduledTask $ScriptCommandLine $SessionID $SetParentLink $SharedFunctions $SharedVariables $SoundDisplay $SoundDisplayFunction $SuppressInputFormHeads $SynchronousEvaluation $SyntaxHandler $System $SystemCharacterEncoding $SystemID $SystemWordLength $TemporaryDirectory $TemporaryPrefix $TextStyle $TimedOut $TimeUnit $TimeZone $TopDirectory $TraceOff $TraceOn $TracePattern $TracePostAction $TracePreAction $Urgent $UserAddOnsDirectory $UserBaseDirectory $UserDocumentsDirectory $UserName $Version $VersionNumber",c:[{cN:"comment",b:/\(\*/,e:/\*\)/},a.ASM,a.QSM,a.CNM,{cN:"list",b:/\{/,e:/\}/,i:/:/}]}});hljs.registerLanguage("cs",function(b){var a="abstract as base bool break byte case catch char checked const continue decimal default delegate do double else enum event explicit extern false finally fixed float for foreach goto if implicit in int interface internal is lock long new null object operator out override params private protected public readonly ref return sbyte sealed short sizeof stackalloc static string struct switch this throw true try typeof uint ulong unchecked unsafe ushort using virtual volatile void while async await ascending descending from get group into join let orderby partial select set value var where yield";return{k:a,c:[{cN:"comment",b:"///",e:"$",rB:true,c:[{cN:"xmlDocTag",b:"///|"},{cN:"xmlDocTag",b:""}]},b.CLCM,b.CBLCLM,{cN:"preprocessor",b:"#",e:"$",k:"if else elif endif define undef warning error line region endregion pragma checksum"},{cN:"string",b:'@"',e:'"',c:[{b:'""'}]},b.ASM,b.QSM,b.CNM,{bK:"protected public private internal",e:/[{;=]/,k:a,c:[{bK:"class namespace interface",starts:{c:[b.TM]}},{b:b.IR+"\\s*\\(",rB:true,c:[b.TM]}]}]}});hljs.registerLanguage("http",function(a){return{i:"\\S",c:[{cN:"status",b:"^HTTP/[0-9\\.]+",e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{cN:"request",b:"^[A-Z]+ (.*?) HTTP/[0-9\\.]+$",rB:true,e:"$",c:[{cN:"string",b:" ",e:" ",eB:true,eE:true}]},{cN:"attribute",b:"^\\w",e:": ",eE:true,i:"\\n|\\s|=",starts:{cN:"string",e:"$"}},{b:"\\n\\n",starts:{sL:"",eW:true}}]}});hljs.registerLanguage("rust",function(b){var c={cN:"number",b:"\\b(0[xb][A-Za-z0-9_]+|[0-9_]+(\\.[0-9_]+)?([uif](8|16|32|64)?)?)",r:0};var a="assert bool break char check claim comm const cont copy dir do drop else enum extern export f32 f64 fail false float fn for i16 i32 i64 i8 if impl int let log loop match mod move mut priv pub pure ref return self static str struct task true trait type u16 u32 u64 u8 uint unsafe use vec while";return{k:a,i:"\\&\\#][a-zA-Z0-9_\\-\\+\\*\\/\\<\\=\\>\\&\\#!]*";var l="(\\-|\\+)?\\d+(\\.\\d+|\\/\\d+)?((d|e|f|l|s)(\\+|\\-)?\\d+)?";var j={cN:"shebang",b:"^#!",e:"$"};var b={cN:"literal",b:"\\b(t{1}|nil)\\b"};var d={cN:"number",v:[{b:l,r:0},{b:"#b[0-1]+(/[0-1]+)?"},{b:"#o[0-7]+(/[0-7]+)?"},{b:"#x[0-9a-f]+(/[0-9a-f]+)?"},{b:"#c\\("+l+" +"+l,e:"\\)"}]};var g=h.inherit(h.QSM,{i:null});var m={cN:"comment",b:";",e:"$"};var f={cN:"variable",b:"\\*",e:"\\*"};var n={cN:"keyword",b:"[:&]"+k};var c={b:"\\(",e:"\\)",c:["self",b,g,d]};var a={cN:"quoted",c:[d,g,f,n,c],v:[{b:"['`]\\(",e:"\\)",},{b:"\\(quote ",e:"\\)",k:{title:"quote"},}]};var i={cN:"list",b:"\\(",e:"\\)"};var e={eW:true,r:0};i.c=[{cN:"title",b:k},e];e.c=[a,i,b,d,g,m,f,n];return{i:/\S/,c:[d,j,b,g,m,a,i]}});hljs.registerLanguage("rib",function(a){return{k:"ArchiveRecord AreaLightSource Atmosphere Attribute AttributeBegin AttributeEnd Basis Begin Blobby Bound Clipping ClippingPlane Color ColorSamples ConcatTransform Cone CoordinateSystem CoordSysTransform CropWindow Curves Cylinder DepthOfField Detail DetailRange Disk Displacement Display End ErrorHandler Exposure Exterior Format FrameAspectRatio FrameBegin FrameEnd GeneralPolygon GeometricApproximation Geometry Hider Hyperboloid Identity Illuminate Imager Interior LightSource MakeCubeFaceEnvironment MakeLatLongEnvironment MakeShadow MakeTexture Matte MotionBegin MotionEnd NuPatch ObjectBegin ObjectEnd ObjectInstance Opacity Option Orientation Paraboloid Patch PatchMesh Perspective PixelFilter PixelSamples PixelVariance Points PointsGeneralPolygons PointsPolygons Polygon Procedural Projection Quantize ReadArchive RelativeDetail ReverseOrientation Rotate Scale ScreenWindow ShadingInterpolation ShadingRate Shutter Sides Skew SolidBegin SolidEnd Sphere SubdivisionMesh Surface TextureCoordinates Torus Transform TransformBegin TransformEnd TransformPoints Translate TrimCurve WorldBegin WorldEnd",i:""},{cN:"keyword",b:/\w+/,r:0,k:{common:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{e:/$/,r:0,k:{literal:"on off all"},c:[{cN:"sqbracket",b:"\\s\\[",e:"\\]$"},{cN:"cbracket",b:"[\\$%]\\{",e:"\\}",c:["self",b]},b,a.QSM]}}],i:/\S/}});hljs.registerLanguage("1c",function(b){var f="[a-zA-Zа-яА-Я][a-zA-Z0-9_а-яА-Я]*";var c="возврат дата для если и или иначе иначеесли исключение конецесли конецпопытки конецпроцедуры конецфункции конеццикла константа не перейти перем перечисление по пока попытка прервать продолжить процедура строка тогда фс функция цикл число экспорт";var e="ansitooem oemtoansi ввестивидсубконто ввестидату ввестизначение ввестиперечисление ввестипериод ввестиплансчетов ввестистроку ввестичисло вопрос восстановитьзначение врег выбранныйплансчетов вызватьисключение датагод датамесяц датачисло добавитьмесяц завершитьработусистемы заголовоксистемы записьжурналарегистрации запуститьприложение зафиксироватьтранзакцию значениевстроку значениевстрокувнутр значениевфайл значениеизстроки значениеизстрокивнутр значениеизфайла имякомпьютера имяпользователя каталогвременныхфайлов каталогиб каталогпользователя каталогпрограммы кодсимв командасистемы конгода конецпериодаби конецрассчитанногопериодаби конецстандартногоинтервала конквартала конмесяца коннедели лев лог лог10 макс максимальноеколичествосубконто мин монопольныйрежим названиеинтерфейса названиенабораправ назначитьвид назначитьсчет найти найтипомеченныенаудаление найтиссылки началопериодаби началостандартногоинтервала начатьтранзакцию начгода начквартала начмесяца начнедели номерднягода номерднянедели номернеделигода нрег обработкаожидания окр описаниеошибки основнойжурналрасчетов основнойплансчетов основнойязык открытьформу открытьформумодально отменитьтранзакцию очиститьокносообщений периодстр полноеимяпользователя получитьвремята получитьдатута получитьдокументта получитьзначенияотбора получитьпозициюта получитьпустоезначение получитьта прав праводоступа предупреждение префиксавтонумерации пустаястрока пустоезначение рабочаядаттьпустоезначение рабочаядата разделительстраниц разделительстрок разм разобратьпозициюдокумента рассчитатьрегистрына рассчитатьрегистрыпо сигнал симв символтабуляции создатьобъект сокрл сокрлп сокрп сообщить состояние сохранитьзначение сред статусвозврата стрдлина стрзаменить стрколичествострок стрполучитьстроку стрчисловхождений сформироватьпозициюдокумента счетпокоду текущаядата текущеевремя типзначения типзначениястр удалитьобъекты установитьтана установитьтапо фиксшаблон формат цел шаблон";var a={cN:"dquote",b:'""'};var d={cN:"string",b:'"',e:'"|$',c:[a]};var g={cN:"string",b:"\\|",e:'"|$',c:[a]};return{cI:true,l:f,k:{keyword:c,built_in:e},c:[b.CLCM,b.NM,d,g,{cN:"function",b:"(процедура|функция)",e:"$",l:f,k:"процедура функция",c:[b.inherit(b.TM,{b:f}),{cN:"tail",eW:true,c:[{cN:"params",b:"\\(",e:"\\)",l:f,k:"знач",c:[d,g]},{cN:"export",b:"экспорт",eW:true,l:f,k:"экспорт",c:[b.CLCM]}]},b.CLCM]},{cN:"preprocessor",b:"#",e:"$"},{cN:"date",b:"'\\d{2}\\.\\d{2}\\.(\\d{2}|\\d{4})'"}]}});hljs.registerLanguage("javascript",function(a){return{aliases:["js"],k:{keyword:"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const class",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require"},c:[{cN:"pi",b:/^\s*('|")use strict('|")/,r:10},a.ASM,a.QSM,a.CLCM,a.CBLCLM,a.CNM,{b:"("+a.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[a.CLCM,a.CBLCLM,a.REGEXP_MODE,{b:/;/,r:0,sL:"xml"}],r:0},{cN:"function",bK:"function",e:/\{/,c:[a.inherit(a.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{cN:"params",b:/\(/,e:/\)/,c:[a.CLCM,a.CBLCLM],i:/["'\(]/}],i:/\[|%/},{b:/\$[(.]/},{b:"\\."+a.IR,r:0}]}});hljs.registerLanguage("vbnet",function(a){return{cI:true,k:{keyword:"addhandler addressof alias and andalso aggregate ansi as assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into is isfalse isnot istrue join key let lib like loop me mid mod module mustinherit mustoverride mybase myclass namespace narrowing new next not notinheritable notoverridable of off on operator option optional or order orelse overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim rem removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly xor",built_in:"boolean byte cbool cbyte cchar cdate cdec cdbl char cint clng cobj csbyte cshort csng cstr ctype date decimal directcast double gettype getxmlnamespace iif integer long object sbyte short single string trycast typeof uinteger ulong ushort",literal:"true false nothing"},i:"//|{|}|endif|gosub|variant|wend",c:[a.inherit(a.QSM,{c:[{b:'""'}]}),{cN:"comment",b:"'",e:"$",rB:true,c:[{cN:"xmlDocTag",b:"'''|"},{cN:"xmlDocTag",b:""},]},a.CNM,{cN:"preprocessor",b:"#",e:"$",k:"if else elseif end region externalsource"},]}});hljs.registerLanguage("fsharp",function(a){return{k:"abstract and as assert base begin class default delegate do done downcast downto elif else end exception extern false finally for fun function global if in inherit inline interface internal lazy let match member module mutable namespace new null of open or override private public rec return sig static struct then to true try type upcast use val void when while with yield",c:[{cN:"string",b:'@"',e:'"',c:[{b:'""'}]},{cN:"string",b:'"""',e:'"""'},{cN:"comment",b:"\\(\\*",e:"\\*\\)"},{cN:"class",bK:"type",e:"\\(|=|$",c:[a.UTM]},{cN:"annotation",b:"\\[<",e:">\\]"},{cN:"attribute",b:"\\B('[A-Za-z])\\b",c:[a.BE]},a.CLCM,a.inherit(a.QSM,{i:null}),a.CNM]}});hljs.registerLanguage("matlab",function(a){var b=[a.CNM,{cN:"string",b:"'",e:"'",c:[a.BE,{b:"''"}]}];return{k:{keyword:"break case catch classdef continue else elseif end enumerated events for function global if methods otherwise parfor persistent properties return spmd switch try while",built_in:"sin sind sinh asin asind asinh cos cosd cosh acos acosd acosh tan tand tanh atan atand atan2 atanh sec secd sech asec asecd asech csc cscd csch acsc acscd acsch cot cotd coth acot acotd acoth hypot exp expm1 log log1p log10 log2 pow2 realpow reallog realsqrt sqrt nthroot nextpow2 abs angle complex conj imag real unwrap isreal cplxpair fix floor ceil round mod rem sign airy besselj bessely besselh besseli besselk beta betainc betaln ellipj ellipke erf erfc erfcx erfinv expint gamma gammainc gammaln psi legendre cross dot factor isprime primes gcd lcm rat rats perms nchoosek factorial cart2sph cart2pol pol2cart sph2cart hsv2rgb rgb2hsv zeros ones eye repmat rand randn linspace logspace freqspace meshgrid accumarray size length ndims numel disp isempty isequal isequalwithequalnans cat reshape diag blkdiag tril triu fliplr flipud flipdim rot90 find sub2ind ind2sub bsxfun ndgrid permute ipermute shiftdim circshift squeeze isscalar isvector ans eps realmax realmin pi i inf nan isnan isinf isfinite j why compan gallery hadamard hankel hilb invhilb magic pascal rosser toeplitz vander wilkinson"},i:'(//|"|#|/\\*|\\s+/\\w+)',c:[{cN:"function",bK:"function",e:"$",c:[a.UTM,{cN:"params",b:"\\(",e:"\\)"},{cN:"params",b:"\\[",e:"\\]"}]},{cN:"transposed_variable",b:"[a-zA-Z_][a-zA-Z_0-9]*('+[\\.']*|[\\.']+)",e:"",r:0},{cN:"matrix",b:"\\[",e:"\\]'*[\\.']*",c:b,r:0},{cN:"cell",b:"\\{",e:"\\}'*[\\.']*",c:b,i:/:/},{cN:"comment",b:"\\%",e:"$"}].concat(b)}});hljs.registerLanguage("applescript",function(a){var b=a.inherit(a.QSM,{i:""});var d={cN:"params",b:"\\(",e:"\\)",c:["self",a.CNM,b]};var c=[{cN:"comment",b:"--",e:"$",},{cN:"comment",b:"\\(\\*",e:"\\*\\)",c:["self",{b:"--",e:"$"}]},a.HCM];return{k:{keyword:"about above after against and around as at back before beginning behind below beneath beside between but by considering contain contains continue copy div does eighth else end equal equals error every exit fifth first for fourth from front get given global if ignoring in into is it its last local me middle mod my ninth not of on onto or over prop property put ref reference repeat returning script second set seventh since sixth some tell tenth that the then third through thru timeout times to transaction try until where while whose with without",constant:"AppleScript false linefeed return pi quote result space tab true",type:"alias application boolean class constant date file integer list number real record string text",command:"activate beep count delay launch log offset read round run say summarize write",property:"character characters contents day frontmost id item length month name paragraph paragraphs rest reverse running time version weekday word words year"},c:[b,a.CNM,{cN:"type",b:"\\bPOSIX file\\b"},{cN:"command",b:"\\b(clipboard info|the clipboard|info for|list (disks|folder)|mount volume|path to|(close|open for) access|(get|set) eof|current date|do shell script|get volume settings|random number|set volume|system attribute|system info|time to GMT|(load|run|store) script|scripting components|ASCII (character|number)|localized string|choose (application|color|file|file name|folder|from list|remote application|URL)|display (alert|dialog))\\b|^\\s*return\\b"},{cN:"constant",b:"\\b(text item delimiters|current application|missing value)\\b"},{cN:"keyword",b:"\\b(apart from|aside from|instead of|out of|greater than|isn't|(doesn't|does not) (equal|come before|come after|contain)|(greater|less) than( or equal)?|(starts?|ends|begins?) with|contained by|comes (before|after)|a (ref|reference))\\b"},{cN:"property",b:"\\b(POSIX path|(date|time) string|quoted form)\\b"},{cN:"function_start",bK:"on",i:"[${=;\\n]",c:[a.UTM,d]}].concat(c),i:"//"}});hljs.registerLanguage("delphi",function(b){var a="exports register file shl array record property for mod while set ally label uses raise not stored class safecall var interface or private static exit index inherited to else stdcall override shr asm far resourcestring finalization packed virtual out and protected library do xorwrite goto near function end div overload object unit begin string on inline repeat until destructor write message program with read initialization except default nil if case cdecl in downto threadvar of try pascal const external constructor type public then implementation finally published procedure";var e={cN:"comment",v:[{b:/\{/,e:/\}/,r:0},{b:/\(\*/,e:/\*\)/,r:10}]};var c={cN:"string",b:/'/,e:/'/,c:[{b:/''/}]};var d={cN:"string",b:/(#\d+)+/};var f={b:b.IR+"\\s*=\\s*class\\s*\\(",rB:true,c:[b.TM]};var g={cN:"function",bK:"function constructor destructor procedure",e:/[:;]/,k:"function constructor|10 destructor|10 procedure|10",c:[b.TM,{cN:"params",b:/\(/,e:/\)/,k:a,c:[c,d]},e]};return{cI:true,k:a,i:/("|\$[G-Zg-z]|\/\*|<\/)/,c:[e,b.CLCM,c,d,b.NM,f,g]}});hljs.registerLanguage("cpp",function(a){var b={keyword:"false int float while private char catch export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const struct for static_cast|10 union namespace unsigned long throw volatile static protected bool template mutable if public friend do return goto auto void enum else break new extern using true class asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue wchar_t inline delete alignof char16_t char32_t constexpr decltype noexcept nullptr static_assert thread_local restrict _Bool complex _Complex _Imaginary",built_in:"std string cin cout cerr clog stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf"};return{aliases:["c"],k:b,i:"",i:"\\n"},a.CLCM]},{cN:"stl_container",b:"\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<",e:">",k:b,r:10,c:["self"]}]}});hljs.registerLanguage("json",function(a){var e={literal:"true false null"};var d=[a.QSM,a.CNM];var c={cN:"value",e:",",eW:true,eE:true,c:d,k:e};var b={b:"{",e:"}",c:[{cN:"attribute",b:'\\s*"',e:'"\\s*:\\s*',eB:true,eE:true,c:[a.BE],i:"\\n",starts:c}],i:"\\S"};var f={b:"\\[",e:"\\]",c:[a.inherit(c,{cN:null})],i:"\\S"};d.splice(d.length,0,b,f);return{c:d,k:e,i:"\\S"}});hljs.registerLanguage("perl",function(c){var d="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when";var f={cN:"subst",b:"[$@]\\{",e:"\\}",k:d};var g={b:"->{",e:"}"};var a={cN:"variable",v:[{b:/\$\d/},{b:/[\$\%\@\*](\^\w\b|#\w+(\:\:\w+)*|{\w+}|\w+(\:\:\w*)*)/},{b:/[\$\%\@\*][^\s\w{]/,r:0}]};var e={cN:"comment",b:"^(__END__|__DATA__)",e:"\\n$",r:5};var h=[c.BE,f,a];var b=[a,c.HCM,e,{cN:"comment",b:"^\\=\\w",e:"\\=cut",eW:true},g,{cN:"string",c:h,v:[{b:"q[qwxr]?\\s*\\(",e:"\\)",r:5},{b:"q[qwxr]?\\s*\\[",e:"\\]",r:5},{b:"q[qwxr]?\\s*\\{",e:"\\}",r:5},{b:"q[qwxr]?\\s*\\|",e:"\\|",r:5},{b:"q[qwxr]?\\s*\\<",e:"\\>",r:5},{b:"qw\\s+q",e:"q",r:5},{b:"'",e:"'",c:[c.BE]},{b:'"',e:'"'},{b:"`",e:"`",c:[c.BE]},{b:"{\\w+}",c:[],r:0},{b:"-?\\w+\\s*\\=\\>",c:[],r:0}]},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\/\\/|"+c.RSR+"|\\b(split|return|print|reverse|grep)\\b)\\s*",k:"split return print reverse grep",r:0,c:[c.HCM,e,{cN:"regexp",b:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",r:10},{cN:"regexp",b:"(m|qr)?/",e:"/[a-z]*",c:[c.BE],r:0}]},{cN:"sub",bK:"sub",e:"(\\s*\\(.*?\\))?[;{]",r:5},{cN:"operator",b:"-\\w\\b",r:0}];f.c=b;g.c=b;return{k:d,c:b}});hljs.registerLanguage("markdown",function(a){return{c:[{cN:"header",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",r:0},{cN:"bullet",b:"^([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",r:0}]},{cN:"blockquote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"`.+?`"},{b:"^( {4}|\t)",e:"$",r:0}]},{cN:"horizontal_rule",b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].+?[\\)\\]]",rB:true,c:[{cN:"link_label",b:"\\[",e:"\\]",eB:true,rE:true,r:0},{cN:"link_url",b:"\\]\\(",e:"\\)",eB:true,eE:true},{cN:"link_reference",b:"\\]\\[",e:"\\]",eB:true,eE:true,}],r:10},{b:"^\\[.+\\]:",e:"$",rB:true,c:[{cN:"link_reference",b:"\\[",e:"\\]",eB:true,eE:true},{cN:"link_url",b:"\\s",e:"$"}]}]}});hljs.registerLanguage("ocaml",function(a){return{k:{keyword:"and as assert asr begin class constraint do done downto else end exception external false for fun function functor if in include inherit initializer land lazy let lor lsl lsr lxor match method mod module mutable new object of open or private rec ref sig struct then to true try type val virtual when while with parser value",built_in:"bool char float int list unit array exn option int32 int64 nativeint format4 format6 lazy_t in_channel out_channel string",},i:/\/\//,c:[{cN:"string",b:'"""',e:'"""'},{cN:"comment",b:"\\(\\*",e:"\\*\\)",c:["self"]},{cN:"class",bK:"type",e:"\\(|=|$",c:[a.UTM]},{cN:"annotation",b:"\\[<",e:">\\]"},a.CBLCLM,a.inherit(a.ASM,{i:null}),a.inherit(a.QSM,{i:null}),a.CNM]}});hljs.registerLanguage("d",function(x){var b={keyword:"abstract alias align asm assert auto body break byte case cast catch class const continue debug default delete deprecated do else enum export extern final finally for foreach foreach_reverse|10 goto if immutable import in inout int interface invariant is lazy macro mixin module new nothrow out override package pragma private protected public pure ref return scope shared static struct super switch synchronized template this throw try typedef typeid typeof union unittest version void volatile while with __FILE__ __LINE__ __gshared|10 __thread __traits __DATE__ __EOF__ __TIME__ __TIMESTAMP__ __VENDOR__ __VERSION__",built_in:"bool cdouble cent cfloat char creal dchar delegate double dstring float function idouble ifloat ireal long real short string ubyte ucent uint ulong ushort wchar wstring",literal:"false null true"};var c="(0|[1-9][\\d_]*)",q="(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)",h="0[bB][01_]+",v="([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)",y="0[xX]"+v,p="([eE][+-]?"+q+")",o="("+q+"(\\.\\d*|"+p+")|\\d+\\."+q+q+"|\\."+c+p+"?)",k="(0[xX]("+v+"\\."+v+"|\\.?"+v+")[pP][+-]?"+q+")",l="("+c+"|"+h+"|"+y+")",n="("+k+"|"+o+")";var z="\\\\(['\"\\?\\\\abfnrtv]|u[\\dA-Fa-f]{4}|[0-7]{1,3}|x[\\dA-Fa-f]{2}|U[\\dA-Fa-f]{8})|&[a-zA-Z\\d]{2,};";var m={cN:"number",b:"\\b"+l+"(L|u|U|Lu|LU|uL|UL)?",r:0};var j={cN:"number",b:"\\b("+n+"([fF]|L|i|[fF]i|Li)?|"+l+"(i|[fF]i|Li))",r:0};var s={cN:"string",b:"'("+z+"|.)",e:"'",i:"."};var r={b:z,r:0};var w={cN:"string",b:'"',c:[r],e:'"[cwd]?'};var f={cN:"string",b:'[rq]"',e:'"[cwd]?',r:5};var u={cN:"string",b:"`",e:"`[cwd]?"};var i={cN:"string",b:'x"[\\da-fA-F\\s\\n\\r]*"[cwd]?',r:10};var t={cN:"string",b:'q"\\{',e:'\\}"'};var e={cN:"shebang",b:"^#!",e:"$",r:5};var g={cN:"preprocessor",b:"#(line)",e:"$",r:5};var d={cN:"keyword",b:"@[a-zA-Z_][a-zA-Z_\\d]*"};var a={cN:"comment",b:"\\/\\+",c:["self"],e:"\\+\\/",r:10};return{l:x.UIR,k:b,c:[x.CLCM,x.CBLCLM,a,i,w,f,u,t,j,m,s,e,g,d]}});hljs.registerLanguage("coffeescript",function(c){var b={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super then unless until loop of by when and or is isnt not",literal:"true false null undefined yes no on off",reserved:"case default function var void with const let enum export import native __hasProp __extends __slice __bind __indexOf",built_in:"npm require console print module exports global window document"};var a="[A-Za-z$_][0-9A-Za-z$_]*";var f=c.inherit(c.TM,{b:a});var e={cN:"subst",b:/#\{/,e:/}/,k:b};var d=[c.BNM,c.inherit(c.CNM,{starts:{e:"(\\s*/)?",r:0}}),{cN:"string",v:[{b:/'''/,e:/'''/,c:[c.BE]},{b:/'/,e:/'/,c:[c.BE]},{b:/"""/,e:/"""/,c:[c.BE,e]},{b:/"/,e:/"/,c:[c.BE,e]}]},{cN:"regexp",v:[{b:"///",e:"///",c:[e,c.HCM]},{b:"//[gim]*",r:0},{b:"/\\S(\\\\.|[^\\n])*?/[gim]*(?=\\s|\\W|$)"}]},{cN:"property",b:"@"+a},{b:"`",e:"`",eB:true,eE:true,sL:"javascript"}];e.c=d;return{k:b,c:d.concat([{cN:"comment",b:"###",e:"###"},c.HCM,{cN:"function",b:"("+a+"\\s*=\\s*)?(\\(.*\\))?\\s*\\B[-=]>",e:"[-=]>",rB:true,c:[f,{cN:"params",b:"\\(",rB:true,c:[{b:/\(/,e:/\)/,k:b,c:["self"].concat(d)}]}]},{cN:"class",bK:"class",e:"$",i:/[:="\[\]]/,c:[{bK:"extends",eW:true,i:/[:="\[\]]/,c:[f]},f]},{cN:"attribute",b:a+":",e:":",rB:true,eE:true,r:0}])}});hljs.registerLanguage("lua",function(b){var a="\\[=*\\[";var e="\\]=*\\]";var c={b:a,e:e,c:["self"]};var d=[{cN:"comment",b:"--(?!"+a+")",e:"$"},{cN:"comment",b:"--"+a,e:e,c:[c],r:10}];return{l:b.UIR,k:{keyword:"and break do else elseif end false for if in local nil not or repeat return then true until while",built_in:"_G _VERSION assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall coroutine debug io math os package string table"},c:d.concat([{cN:"function",bK:"function",e:"\\)",c:[b.inherit(b.TM,{b:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{cN:"params",b:"\\(",eW:true,c:d}].concat(d)},b.CNM,b.ASM,b.QSM,{cN:"string",b:a,e:e,c:[c],r:10}])}});hljs.registerLanguage("makefile",function(a){var b={cN:"variable",b:/\$\(/,e:/\)/,c:[a.BE]};return{c:[a.HCM,{b:/^\w+\s*\W*=/,rB:true,r:0,starts:{cN:"constant",e:/\s*\W*=/,eE:true,starts:{e:/$/,r:0,c:[b],}}},{cN:"title",b:/^[\w]+:\s*$/},{cN:"phony",b:/^\.PHONY:/,e:/$/,k:".PHONY",l:/[\.\w]+/},{b:/^\t+/,e:/$/,c:[a.QSM,b]}]}});hljs.registerLanguage("rsl",function(a){return{k:{keyword:"float color point normal vector matrix while for if do return else break extern continue",built_in:"abs acos ambient area asin atan atmosphere attribute calculatenormal ceil cellnoise clamp comp concat cos degrees depth Deriv diffuse distance Du Dv environment exp faceforward filterstep floor format fresnel incident length lightsource log match max min mod noise normalize ntransform opposite option phong pnoise pow printf ptlined radians random reflect refract renderinfo round setcomp setxcomp setycomp setzcomp shadow sign sin smoothstep specular specularbrdf spline sqrt step tan texture textureinfo trace transform vtransform xcomp ycomp zcomp"},i:"",rB:true,i:"\\(|#|//|/\\*|\\\\|:|;",c:[d,i.inherit(i.TM,{b:c})],starts:{e:";|\\.",k:f,c:j}},l,{cN:"pp",b:"^-",e:"\\.",r:0,eE:true,rB:true,l:"-"+i.IR,k:"-module -record -undef -export -ifdef -ifndef -author -copyright -doc -vsn -import -include -include_lib -compile -define -else -endif -file -behaviour -behavior",c:[d]},e,i.QSM,b,a,m,h]}});hljs.registerLanguage("sql",function(a){return{cI:true,i:/[<>]/,c:[{cN:"operator",b:"\\b(begin|end|start|commit|rollback|savepoint|lock|alter|create|drop|rename|call|delete|do|handler|insert|load|replace|select|truncate|update|set|show|pragma|grant|merge)\\b(?!:)",e:";",eW:true,k:{keyword:"all partial global month current_timestamp using go revoke smallint indicator end-exec disconnect zone with character assertion to add current_user usage input local alter match collate real then rollback get read timestamp session_user not integer bit unique day minute desc insert execute like ilike|2 level decimal drop continue isolation found where constraints domain right national some module transaction relative second connect escape close system_user for deferred section cast current sqlstate allocate intersect deallocate numeric public preserve full goto initially asc no key output collation group by union session both last language constraint column of space foreign deferrable prior connection unknown action commit view or first into float year primary cascaded except restrict set references names table outer open select size are rows from prepare distinct leading create only next inner authorization schema corresponding option declare precision immediate else timezone_minute external varying translation true case exception join hour default double scroll value cursor descriptor values dec fetch procedure delete and false int is describe char as at in varchar null trailing any absolute current_time end grant privileges when cross check write current_date pad begin temporary exec time update catalog user sql date on identity timezone_hour natural whenever interval work order cascade diagnostics nchar having left call do handler load replace truncate start lock show pragma exists number trigger if before after each row merge matched database",aggregate:"count sum min max avg"},c:[{cN:"string",b:"'",e:"'",c:[a.BE,{b:"''"}]},{cN:"string",b:'"',e:'"',c:[a.BE,{b:'""'}]},{cN:"string",b:"`",e:"`",c:[a.BE]},a.CNM]},a.CBLCLM,{cN:"comment",b:"--",e:"$"}]}});hljs.registerLanguage("mizar",function(a){return{k:["environ vocabularies notations constructors definitions registrations theorems schemes requirements","begin end definition registration cluster existence pred func defpred deffunc theorem proof","let take assume then thus hence ex for st holds consider reconsider such that and in provided of as from","be being by means equals implies iff redefine define now not or attr is mode suppose per cases set","thesis contradiction scheme reserve struct","correctness compatibility coherence symmetry assymetry reflexivity irreflexivity","connectedness uniqueness commutativity idempotence involutiveness projectivity"].join(" "),c:[{cN:"comment",b:"::",e:"$"}]}});hljs.registerLanguage("lasso",function(d){var b="[a-zA-Z_][a-zA-Z0-9_.]*";var i="<\\?(lasso(script)?|=)";var c="\\]|\\?>";var g={literal:"true false none minimal full all void and or not bw nbw ew new cn ncn lt lte gt gte eq neq rx nrx ft",built_in:"array date decimal duration integer map pair string tag xml null bytes list queue set stack staticarray tie local var variable global data self inherited",keyword:"error_code error_msg error_pop error_push error_reset cache database_names database_schemanames database_tablenames define_tag define_type email_batch encode_set html_comment handle handle_error header if inline iterate ljax_target link link_currentaction link_currentgroup link_currentrecord link_detail link_firstgroup link_firstrecord link_lastgroup link_lastrecord link_nextgroup link_nextrecord link_prevgroup link_prevrecord log loop namespace_using output_none portal private protect records referer referrer repeating resultset rows search_args search_arguments select sort_args sort_arguments thread_atomic value_list while abort case else if_empty if_false if_null if_true loop_abort loop_continue loop_count params params_up return return_value run_children soap_definetag soap_lastrequest soap_lastresponse tag_name ascending average by define descending do equals frozen group handle_failure import in into join let match max min on order parent protected provide public require returnhome skip split_thread sum take thread to trait type where with yield yieldhome"};var a={cN:"comment",b:"",r:0};var j={cN:"preprocessor",b:"\\[noprocess\\]",starts:{cN:"markup",e:"\\[/noprocess\\]",rE:true,c:[a]}};var e={cN:"preprocessor",b:"\\[/noprocess|"+i};var h={cN:"variable",b:"'"+b+"'"};var f=[d.CLCM,{cN:"javadoc",b:"/\\*\\*!",e:"\\*/"},d.CBLCLM,d.inherit(d.CNM,{b:d.CNR+"|-?(infinity|nan)\\b"}),d.inherit(d.ASM,{i:null}),d.inherit(d.QSM,{i:null}),{cN:"string",b:"`",e:"`"},{cN:"variable",v:[{b:"[#$]"+b},{b:"#",e:"\\d+",i:"\\W"}]},{cN:"tag",b:"::\\s*",e:b,i:"\\W"},{cN:"attribute",b:"\\.\\.\\.|-"+d.UIR},{cN:"subst",v:[{b:"->\\s*",c:[h]},{b:":=|/(?!\\w)=?|[-+*%=<>&|!?\\\\]+",r:0}]},{cN:"built_in",b:"\\.\\.?",r:0,c:[h]},{cN:"class",bK:"define",rE:true,e:"\\(|=>",c:[d.inherit(d.TM,{b:d.UIR+"(=(?!>))?"})]}];return{aliases:["ls","lassoscript"],cI:true,l:b+"|&[lg]t;",k:g,c:[{cN:"preprocessor",b:c,r:0,starts:{cN:"markup",e:"\\[|"+i,rE:true,r:0,c:[a]}},j,e,{cN:"preprocessor",b:"\\[no_square_brackets",starts:{e:"\\[/no_square_brackets\\]",l:b+"|&[lg]t;",k:g,c:[{cN:"preprocessor",b:c,r:0,starts:{cN:"markup",e:i,rE:true,c:[a]}},j,e].concat(f)}},{cN:"preprocessor",b:"\\[",r:0},{cN:"shebang",b:"^#!.+lasso9\\b",r:10}].concat(f)}});hljs.registerLanguage("r",function(a){var b="([a-zA-Z]|\\.[a-zA-Z.])[a-zA-Z0-9._]*";return{c:[a.HCM,{b:b,l:b,k:{keyword:"function if in break next repeat else for return switch while try tryCatch|10 stop warning require library attach detach source setMethod setGeneric setGroupGeneric setClass ...|10",literal:"NULL NA TRUE FALSE T F Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10"},r:0},{cN:"number",b:"0[xX][0-9a-fA-F]+[Li]?\\b",r:0},{cN:"number",b:"\\d+(?:[eE][+\\-]?\\d*)?L\\b",r:0},{cN:"number",b:"\\d+\\.(?!\\d)(?:i\\b)?",r:0},{cN:"number",b:"\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",r:0},{cN:"number",b:"\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",r:0},{b:"`",e:"`",r:0},{cN:"string",c:[a.BE],v:[{b:'"',e:'"'},{b:"'",e:"'"}]}]}});hljs.registerLanguage("scala",function(a){var c={cN:"annotation",b:"@[A-Za-z]+"};var b={cN:"string",b:'u?r?"""',e:'"""',r:10};return{k:"type yield lazy override def with val var false true sealed abstract private trait object null if for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws",c:[{cN:"javadoc",b:"/\\*\\*",e:"\\*/",c:[{cN:"javadoctag",b:"@[A-Za-z]+"}],r:10},a.CLCM,a.CBLCLM,b,a.ASM,a.QSM,{cN:"class",b:"((case )?class |object |trait )",e:"({|$)",i:":",k:"case class trait object",c:[{bK:"extends with",r:10},a.UTM,{cN:"params",b:"\\(",e:"\\)",c:[a.ASM,a.QSM,b,c]}]},a.CNM,c]}});hljs.registerLanguage("livecodeserver",function(a){var e={cN:"variable",b:"\\b[gtps][A-Z]+[A-Za-z0-9_\\-]*\\b|\\$_[A-Z]+",r:0};var b={cN:"comment",e:"$",v:[a.CBLCLM,a.HCM,{b:"--",},{b:"[^:]//",}]};var d=a.inherit(a.TM,{v:[{b:"\\b_*rig[A-Z]+[A-Za-z0-9_\\-]*"},{b:"\\b_[a-z0-9\\-]+"}]});var c=a.inherit(a.TM,{b:"\\b([A-Za-z0-9_\\-]+)\\b"});return{cI:false,k:{keyword:"after byte bytes english the until http forever descending using line real8 with seventh for stdout finally element word fourth before black ninth sixth characters chars stderr uInt1 uInt1s uInt2 uInt2s stdin string lines relative rel any fifth items from middle mid at else of catch then third it file milliseconds seconds second secs sec int1 int1s int4 int4s internet int2 int2s normal text item last long detailed effective uInt4 uInt4s repeat end repeat URL in try into switch to words https token binfile each tenth as ticks tick system real4 by dateItems without char character ascending eighth whole dateTime numeric short first ftp integer abbreviated abbr abbrev private case while if",constant:"SIX TEN FORMFEED NINE ZERO NONE SPACE FOUR FALSE COLON CRLF PI COMMA ENDOFFILE EOF EIGHT FIVE QUOTE EMPTY ONE TRUE RETURN CR LINEFEED RIGHT BACKSLASH NULL SEVEN TAB THREE TWO six ten formfeed nine zero none space four false colon crlf pi comma endoffile eof eight five quote empty one true return cr linefeed right backslash null seven tab three two RIVERSION RISTATE FILE_READ_MODE FILE_WRITE_MODE FILE_WRITE_MODE DIR_WRITE_MODE FILE_READ_UMASK FILE_WRITE_UMASK DIR_READ_UMASK DIR_WRITE_UMASK",operator:"div mod wrap and or bitAnd bitNot bitOr bitXor among not in a an within contains ends with begins the keys of keys",built_in:"put abs acos aliasReference annuity arrayDecode arrayEncode asin atan atan2 average avg base64Decode base64Encode baseConvert binaryDecode binaryEncode byteToNum cachedURL cachedURLs charToNum cipherNames commandNames compound compress constantNames cos date dateFormat decompress directories diskSpace DNSServers exp exp1 exp2 exp10 extents files flushEvents folders format functionNames global globals hasMemory hostAddress hostAddressToName hostName hostNameToAddress isNumber ISOToMac itemOffset keys len length libURLErrorData libUrlFormData libURLftpCommand libURLLastHTTPHeaders libURLLastRHHeaders libUrlMultipartFormAddPart libUrlMultipartFormData libURLVersion lineOffset ln ln1 localNames log log2 log10 longFilePath lower macToISO matchChunk matchText matrixMultiply max md5Digest median merge millisec millisecs millisecond milliseconds min monthNames num number numToByte numToChar offset open openfiles openProcesses openProcessIDs openSockets paramCount param params peerAddress pendingMessages platform processID random randomBytes replaceText result revCreateXMLTree revCreateXMLTreeFromFile revCurrentRecord revCurrentRecordIsFirst revCurrentRecordIsLast revDatabaseColumnCount revDatabaseColumnIsNull revDatabaseColumnLengths revDatabaseColumnNames revDatabaseColumnNamed revDatabaseColumnNumbered revDatabaseColumnTypes revDatabaseConnectResult revDatabaseCursors revDatabaseID revDatabaseTableNames revDatabaseType revDataFromQuery revdb_closeCursor revdb_columnbynumber revdb_columncount revdb_columnisnull revdb_columnlengths revdb_columnnames revdb_columntypes revdb_commit revdb_connect revdb_connections revdb_connectionerr revdb_currentrecord revdb_cursorconnection revdb_cursorerr revdb_cursors revdb_dbtype revdb_disconnect revdb_execute revdb_iseof revdb_isbof revdb_movefirst revdb_movelast revdb_movenext revdb_moveprev revdb_query revdb_querylist revdb_recordcount revdb_rollback revdb_tablenames revGetDatabaseDriverPath revNumberOfRecords revOpenDatabase revOpenDatabases revQueryDatabase revQueryDatabaseBlob revQueryResult revQueryIsAtStart revQueryIsAtEnd revUnixFromMacPath revXMLAttribute revXMLAttributes revXMLAttributeValues revXMLChildContents revXMLChildNames revXMLFirstChild revXMLMatchingNode revXMLNextSibling revXMLNodeContents revXMLNumberOfChildren revXMLParent revXMLPreviousSibling revXMLRootNode revXMLRPC_CreateRequest revXMLRPC_Documents revXMLRPC_Error revXMLRPC_Execute revXMLRPC_GetHost revXMLRPC_GetMethod revXMLRPC_GetParam revXMLText revXMLRPC_GetParamCount revXMLRPC_GetParamNode revXMLRPC_GetParamType revXMLRPC_GetPath revXMLRPC_GetPort revXMLRPC_GetProtocol revXMLRPC_GetRequest revXMLRPC_GetResponse revXMLRPC_GetSocket revXMLTree revXMLTrees revXMLValidateDTD revZipDescribeItem revZipEnumerateItems revZipOpenArchives round sec secs seconds sha1Digest shell shortFilePath sin specialFolderPath sqrt standardDeviation statRound stdDev sum sysError systemVersion tan tempName tick ticks time to toLower toUpper transpose trunc uniDecode uniEncode upper URLDecode URLEncode URLStatus value variableNames version waitDepth weekdayNames wordOffset add breakpoint cancel clear local variable file word line folder directory URL close socket process combine constant convert create new alias folder directory decrypt delete variable word line folder directory URL dispatch divide do encrypt filter get include intersect kill libURLDownloadToFile libURLFollowHttpRedirects libURLftpUpload libURLftpUploadFile libURLresetAll libUrlSetAuthCallback libURLSetCustomHTTPHeaders libUrlSetExpect100 libURLSetFTPListCommand libURLSetFTPMode libURLSetFTPStopTime libURLSetStatusCallback load multiply socket process post seek rel relative read from process rename replace require resetAll revAddXMLNode revAppendXML revCloseCursor revCloseDatabase revCommitDatabase revCopyFile revCopyFolder revCopyXMLNode revDeleteFolder revDeleteXMLNode revDeleteAllXMLTrees revDeleteXMLTree revExecuteSQL revGoURL revInsertXMLNode revMoveFolder revMoveToFirstRecord revMoveToLastRecord revMoveToNextRecord revMoveToPreviousRecord revMoveToRecord revMoveXMLNode revPutIntoXMLNode revRollBackDatabase revSetDatabaseDriverPath revSetXMLAttribute revXMLRPC_AddParam revXMLRPC_DeleteAllDocuments revXMLAddDTD revXMLRPC_Free revXMLRPC_FreeAll revXMLRPC_DeleteDocument revXMLRPC_DeleteParam revXMLRPC_SetHost revXMLRPC_SetMethod revXMLRPC_SetPort revXMLRPC_SetProtocol revXMLRPC_SetSocket revZipAddItemWithData revZipAddItemWithFile revZipAddUncompressedItemWithData revZipAddUncompressedItemWithFile revZipCancel revZipCloseArchive revZipDeleteItem revZipExtractItemToFile revZipExtractItemToVariable revZipSetProgressCallback revZipRenameItem revZipReplaceItemWithData revZipReplaceItemWithFile revZipOpenArchive send set sort split subtract union unload wait write"},c:[e,{cN:"keyword",b:"\\bend\\sif\\b"},{cN:"function",bK:"function",e:"$",c:[e,c,a.ASM,a.QSM,a.BNM,a.CNM,d]},{cN:"function",bK:"end",e:"$",c:[c,d]},{cN:"command",bK:"command on",e:"$",c:[e,c,a.ASM,a.QSM,a.BNM,a.CNM,d]},{cN:"command",bK:"end",e:"$",c:[c,d]},{cN:"preprocessor",b:"<\\?rev|<\\?lc|<\\?livecode",r:10},{cN:"preprocessor",b:"<\\?"},{cN:"preprocessor",b:"\\?>"},b,a.ASM,a.QSM,a.BNM,a.CNM,d],i:";$|^\\[|^="}});hljs.registerLanguage("profile",function(a){return{c:[a.CNM,{cN:"built_in",b:"{",e:"}$",eB:true,eE:true,c:[a.ASM,a.QSM],r:0},{cN:"filename",b:"[a-zA-Z_][\\da-zA-Z_]+\\.[\\da-zA-Z_]{1,3}",e:":",eE:true},{cN:"header",b:"(ncalls|tottime|cumtime)",e:"$",k:"ncalls tottime|10 cumtime|10 filename",r:10},{cN:"summary",b:"function calls",e:"$",c:[a.CNM],r:10},a.ASM,a.QSM,{cN:"function",b:"\\(",e:"\\)$",c:[a.UTM],r:0}]}});hljs.registerLanguage("php",function(b){var e={cN:"variable",b:"\\$+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*"};var a={cN:"preprocessor",b:/<\?(php)?|\?>/};var c={cN:"string",c:[b.BE,a],v:[{b:'b"',e:'"'},{b:"b'",e:"'"},b.inherit(b.ASM,{i:null}),b.inherit(b.QSM,{i:null})]};var d={v:[b.BNM,b.CNM]};return{cI:true,k:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",c:[b.CLCM,b.HCM,{cN:"comment",b:"/\\*",e:"\\*/",c:[{cN:"phpdoc",b:"\\s@[A-Za-z]+"},a]},{cN:"comment",b:"__halt_compiler.+?;",eW:true,k:"__halt_compiler",l:b.UIR},{cN:"string",b:"<<<['\"]?\\w+['\"]?$",e:"^\\w+;",c:[b.BE]},a,e,{cN:"function",bK:"function",e:/[;{]/,i:"\\$|\\[|%",c:[b.UTM,{cN:"params",b:"\\(",e:"\\)",c:["self",e,b.CBLCLM,c,d]}]},{cN:"class",bK:"class interface",e:"{",i:/[:\(\$"]/,c:[{bK:"extends implements",r:10},b.UTM]},{bK:"namespace",e:";",i:/[\.']/,c:[b.UTM]},{bK:"use",e:";",c:[b.UTM]},{b:"=>"},c,d]}});hljs.registerLanguage("parser3",function(a){return{sL:"xml",r:0,c:[{cN:"comment",b:"^#",e:"$"},{cN:"comment",b:"\\^rem{",e:"}",r:10,c:[{b:"{",e:"}",c:["self"]}]},{cN:"preprocessor",b:"^@(?:BASE|USE|CLASS|OPTIONS)$",r:10},{cN:"title",b:"@[\\w\\-]+\\[[\\w^;\\-]*\\](?:\\[[\\w^;\\-]*\\])?(?:.*)$"},{cN:"variable",b:"\\$\\{?[\\w\\-\\.\\:]+\\}?"},{cN:"keyword",b:"\\^[\\w\\-\\.\\:]+"},{cN:"number",b:"\\^#[0-9a-fA-F]+"},a.CNM]}});hljs.registerLanguage("actionscript",function(a){var c="[a-zA-Z_$][a-zA-Z0-9_$]*";var b="([*]|[a-zA-Z_$][a-zA-Z0-9_$]*)";var d={cN:"rest_arg",b:"[.]{3}",e:c,r:10};return{k:{keyword:"as break case catch class const continue default delete do dynamic each else extends final finally for function get if implements import in include instanceof interface internal is namespace native new override package private protected public return set static super switch this throw try typeof use var void while with",literal:"true false null undefined"},c:[a.ASM,a.QSM,a.CLCM,a.CBLCLM,a.CNM,{cN:"package",bK:"package",e:"{",c:[a.TM]},{cN:"class",bK:"class interface",e:"{",c:[{bK:"extends implements"},a.TM]},{cN:"preprocessor",bK:"import include",e:";"},{cN:"function",bK:"function",e:"[{;]",i:"\\S",c:[a.TM,{cN:"params",b:"\\(",e:"\\)",c:[a.ASM,a.QSM,a.CLCM,a.CBLCLM,d]},{cN:"type",b:":",e:b,r:10}]}]}});hljs.registerLanguage("nginx",function(c){var b={cN:"variable",v:[{b:/\$\d+/},{b:/\$\{/,e:/}/},{b:"[\\$\\@]"+c.UIR}]};var a={eW:true,l:"[a-z/_]+",k:{built_in:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},r:0,i:"=>",c:[c.HCM,{cN:"string",c:[c.BE,b],v:[{b:/"/,e:/"/},{b:/'/,e:/'/}]},{cN:"url",b:"([a-z]+):/",e:"\\s",eW:true,eE:true},{cN:"regexp",c:[c.BE,b],v:[{b:"\\s\\^",e:"\\s|{|;",rE:true},{b:"~\\*?\\s+",e:"\\s|{|;",rE:true},{b:"\\*(\\.[a-z\\-]+)+"},{b:"([a-z\\-]+\\.)+\\*"}]},{cN:"number",b:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{cN:"number",b:"\\b\\d+[kKmMgGdshdwy]*\\b",r:0},b]};return{c:[c.HCM,{b:c.UIR+"\\s",e:";|{",rB:true,c:[c.inherit(c.UTM,{starts:a})],r:0}],i:"[^\\s\\}]"}});hljs.registerLanguage("vhdl",function(a){return{cI:true,k:{keyword:"abs access after alias all and architecture array assert attribute begin block body buffer bus case component configuration constant context cover disconnect downto default else elsif end entity exit fairness file for force function generate generic group guarded if impure in inertial inout is label library linkage literal loop map mod nand new next nor not null of on open or others out package port postponed procedure process property protected pure range record register reject release rem report restrict restrict_guarantee return rol ror select sequence severity shared signal sla sll sra srl strong subtype then to transport type unaffected units until use variable vmode vprop vunit wait when while with xnor xor",typename:"boolean bit character severity_level integer time delay_length natural positive string bit_vector file_open_kind file_open_status std_ulogic std_ulogic_vector std_logic std_logic_vector unsigned signed boolean_vector integer_vector real_vector time_vector"},i:"{",c:[a.CBLCLM,{cN:"comment",b:"--",e:"$"},a.QSM,a.CNM,{cN:"literal",b:"'(U|X|0|1|Z|W|L|H|-)'",c:[a.BE]},{cN:"attribute",b:"'[A-Za-z](_?[A-Za-z0-9])*",c:[a.BE]}]}});hljs.registerLanguage("fix",function(a){return{c:[{b:/[^\u2401\u0001]+/,e:/[\u2401\u0001]/,eE:true,rB:true,rE:false,c:[{b:/([^\u2401\u0001=]+)/,e:/=([^\u2401\u0001=]+)/,rE:true,rB:false,cN:"attribute"},{b:/=/,e:/([\u2401\u0001])/,eE:true,eB:true,cN:"string"}]}],cI:true}});hljs.registerLanguage("diff",function(a){return{c:[{cN:"chunk",r:10,v:[{b:/^\@\@ +\-\d+,\d+ +\+\d+,\d+ +\@\@$/},{b:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{b:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{cN:"header",v:[{b:/Index: /,e:/$/},{b:/=====/,e:/=====$/},{b:/^\-\-\-/,e:/$/},{b:/^\*{3} /,e:/$/},{b:/^\+\+\+/,e:/$/},{b:/\*{5}/,e:/\*{5}$/}]},{cN:"addition",b:"^\\+",e:"$"},{cN:"deletion",b:"^\\-",e:"$"},{cN:"change",b:"^\\!",e:"$"}]}});hljs.registerLanguage("smalltalk",function(a){var b="[a-z][a-zA-Z0-9_]*";var d={cN:"char",b:"\\$.{1}"};var c={cN:"symbol",b:"#"+a.UIR};return{k:"self super nil true false thisContext",c:[{cN:"comment",b:'"',e:'"'},a.ASM,{cN:"class",b:"\\b[A-Z][A-Za-z0-9_]*",r:0},{cN:"method",b:b+":",r:0},a.CNM,c,d,{cN:"localvars",b:"\\|[ ]*"+b+"([ ]+"+b+")*[ ]*\\|",rB:true,e:/\|/,i:/\S/,c:[{b:"(\\|[ ]*)?"+b}]},{cN:"array",b:"\\#\\(",e:"\\)",c:[a.ASM,d,a.CNM,c]}]}});hljs.registerLanguage("clojure",function(l){var e={built_in:"def cond apply if-not if-let if not not= = < < > <= <= >= == + / * - rem quot neg? pos? delay? symbol? keyword? true? false? integer? empty? coll? list? set? ifn? fn? associative? sequential? sorted? counted? reversible? number? decimal? class? distinct? isa? float? rational? reduced? ratio? odd? even? char? seq? vector? string? map? nil? contains? zero? instance? not-every? not-any? libspec? -> ->> .. . inc compare do dotimes mapcat take remove take-while drop letfn drop-last take-last drop-while while intern condp case reduced cycle split-at split-with repeat replicate iterate range merge zipmap declare line-seq sort comparator sort-by dorun doall nthnext nthrest partition eval doseq await await-for let agent atom send send-off release-pending-sends add-watch mapv filterv remove-watch agent-error restart-agent set-error-handler error-handler set-error-mode! error-mode shutdown-agents quote var fn loop recur throw try monitor-enter monitor-exit defmacro defn defn- macroexpand macroexpand-1 for dosync and or when when-not when-let comp juxt partial sequence memoize constantly complement identity assert peek pop doto proxy defstruct first rest cons defprotocol cast coll deftype defrecord last butlast sigs reify second ffirst fnext nfirst nnext defmulti defmethod meta with-meta ns in-ns create-ns import refer keys select-keys vals key val rseq name namespace promise into transient persistent! conj! assoc! dissoc! pop! disj! use class type num float double short byte boolean bigint biginteger bigdec print-method print-dup throw-if printf format load compile get-in update-in pr pr-on newline flush read slurp read-line subvec with-open memfn time re-find re-groups rand-int rand mod locking assert-valid-fdecl alias resolve ref deref refset swap! reset! set-validator! compare-and-set! alter-meta! reset-meta! commute get-validator alter ref-set ref-history-count ref-min-history ref-max-history ensure sync io! new next conj set! to-array future future-call into-array aset gen-class reduce map filter find empty hash-map hash-set sorted-map sorted-map-by sorted-set sorted-set-by vec vector seq flatten reverse assoc dissoc list disj get union difference intersection extend extend-type extend-protocol int nth delay count concat chunk chunk-buffer chunk-append chunk-first chunk-rest max min dec unchecked-inc-int unchecked-inc unchecked-dec-inc unchecked-dec unchecked-negate unchecked-add-int unchecked-add unchecked-subtract-int unchecked-subtract chunk-next chunk-cons chunked-seq? prn vary-meta lazy-seq spread list* str find-keyword keyword symbol gensym force rationalize"};var f="[a-zA-Z_0-9\\!\\.\\?\\-\\+\\*\\/\\<\\=\\>\\&\\#\\$';]+";var a="[\\s:\\(\\{]+\\d+(\\.\\d+)?";var d={cN:"number",b:a,r:0};var j=l.inherit(l.QSM,{i:null});var o={cN:"comment",b:";",e:"$",r:0};var n={cN:"collection",b:"[\\[\\{]",e:"[\\]\\}]"};var c={cN:"comment",b:"\\^"+f};var b={cN:"comment",b:"\\^\\{",e:"\\}"};var h={cN:"attribute",b:"[:]"+f};var m={cN:"list",b:"\\(",e:"\\)"};var g={eW:true,k:{literal:"true false nil"},r:0};var i={k:e,l:f,cN:"title",b:f,starts:g};m.c=[{cN:"comment",b:"comment"},i,g];g.c=[m,j,c,b,o,h,n,d];n.c=[m,j,c,o,h,n,d];return{i:/\S/,c:[o,m,{cN:"prompt",b:/^=> /,starts:{e:/\n\n|\Z/}}]}});hljs.registerLanguage("oxygene",function(b){var g="abstract add and array as asc aspect assembly async begin break block by case class concat const copy constructor continue create default delegate desc distinct div do downto dynamic each else empty end ensure enum equals event except exit extension external false final finalize finalizer finally flags for forward from function future global group has if implementation implements implies in index inherited inline interface into invariants is iterator join locked locking loop matching method mod module namespace nested new nil not notify nullable of old on operator or order out override parallel params partial pinned private procedure property protected public queryable raise read readonly record reintroduce remove repeat require result reverse sealed select self sequence set shl shr skip static step soft take then to true try tuple type union unit unsafe until uses using var virtual raises volatile where while with write xor yield await mapped deprecated stdcall cdecl pascal register safecall overload library platform reference packed strict published autoreleasepool selector strong weak unretained";var a={cN:"comment",b:"{",e:"}",r:0};var e={cN:"comment",b:"\\(\\*",e:"\\*\\)",r:10};var c={cN:"string",b:"'",e:"'",c:[{b:"''"}]};var d={cN:"string",b:"(#\\d+)+"};var f={cN:"function",bK:"function constructor destructor procedure method",e:"[:;]",k:"function constructor|10 destructor|10 procedure|10 method|10",c:[b.TM,{cN:"params",b:"\\(",e:"\\)",k:g,c:[c,d]},a,e]};return{cI:true,k:g,i:'("|\\$[G-Zg-z]|\\/\\*|",sL:"xml",r:0}],r:10},{cN:"bullet",b:"^(\\*+|\\-+|\\.+|[^\\n]+?::)\\s+"},{cN:"label",b:"^(NOTE|TIP|IMPORTANT|WARNING|CAUTION):\\s+",r:10},{cN:"strong",b:"\\B\\*(?![\\*\\s])",e:"(\\n{2}|\\*)",c:[{b:"\\\\*\\w",r:0}]},{cN:"emphasis",b:"\\B'(?!['\\s])",e:"(\\n{2}|')",c:[{b:"\\\\'\\w",r:0}],r:0},{cN:"emphasis",b:"_(?![_\\s])",e:"(\\n{2}|_)",r:0},{cN:"smartquote",b:"``.+?''",r:10},{cN:"smartquote",b:"`.+?'",r:10},{cN:"code",b:"(`.+?`|\\+.+?\\+)",r:0},{cN:"code",b:"^[ \\t]",e:"$",r:0},{cN:"horizontal_rule",b:"^'{3,}[ \\t]*$",r:10},{b:"(link:)?(http|https|ftp|file|irc|image:?):\\S+\\[.*?\\]",rB:true,c:[{b:"(link|image:?):",r:0},{cN:"link_url",b:"\\w",e:"[^\\[]+",r:0},{cN:"link_label",b:"\\[",e:"\\]",eB:true,eE:true,r:0}],r:10}]}});hljs.registerLanguage("erlang-repl",function(a){return{k:{special_functions:"spawn spawn_link self",reserved:"after and andalso|10 band begin bnot bor bsl bsr bxor case catch cond div end fun if let not of or orelse|10 query receive rem try when xor"},c:[{cN:"prompt",b:"^[0-9]+> ",r:10},{cN:"comment",b:"%",e:"$"},{cN:"number",b:"\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)",r:0},a.ASM,a.QSM,{cN:"constant",b:"\\?(::)?([A-Z]\\w*(::)?)+"},{cN:"arrow",b:"->"},{cN:"ok",b:"ok"},{cN:"exclamation_mark",b:"!"},{cN:"function_or_atom",b:"(\\b[a-z'][a-zA-Z0-9_']*:[a-z'][a-zA-Z0-9_']*)|(\\b[a-z'][a-zA-Z0-9_']*)",r:0},{cN:"variable",b:"[A-Z][a-zA-Z0-9_']*",r:0}]}});hljs.registerLanguage("autohotkey",function(b){var d={cN:"escape",b:"`[\\s\\S]"};var c={cN:"comment",b:";",e:"$",r:0};var a=[{cN:"built_in",b:"A_[a-zA-Z0-9]+"},{cN:"built_in",bK:"ComSpec Clipboard ClipboardAll ErrorLevel"}];return{cI:true,k:{keyword:"Break Continue Else Gosub If Loop Return While",literal:"A true false NOT AND OR"},c:a.concat([d,b.inherit(b.QSM,{c:[d]}),c,{cN:"number",b:b.NR,r:0},{cN:"var_expand",b:"%",e:"%",i:"\\n",c:[d]},{cN:"label",c:[d],v:[{b:'^[^\\n";]+::(?!=)'},{b:'^[^\\n";]+:(?!=)',r:0}]},{b:",\\s*,",r:10}])}});hljs.registerLanguage("scilab",function(a){var b=[a.CNM,{cN:"string",b:"'|\"",e:"'|\"",c:[a.BE,{b:"''"}]}];return{k:{keyword:"abort break case clear catch continue do elseif else endfunction end for functionglobal if pause return resume select try then while%f %F %t %T %pi %eps %inf %nan %e %i %z %s",built_in:"abs and acos asin atan ceil cd chdir clearglobal cosh cos cumprod deff disp errorexec execstr exists exp eye gettext floor fprintf fread fsolve imag isdef isemptyisinfisnan isvector lasterror length load linspace list listfiles log10 log2 logmax min msprintf mclose mopen ones or pathconvert poly printf prod pwd rand realround sinh sin size gsort sprintf sqrt strcat strcmps tring sum system tanh tantype typename warning zeros matrix"},i:'("|#|/\\*|\\s+/\\w+)',c:[{cN:"function",bK:"function endfunction",e:"$",k:"function endfunction|10",c:[a.UTM,{cN:"params",b:"\\(",e:"\\)"},],},{cN:"transposed_variable",b:"[a-zA-Z_][a-zA-Z_0-9]*('+[\\.']*|[\\.']+)",e:"",r:0},{cN:"matrix",b:"\\[",e:"\\]'*[\\.']*",r:0,c:b},{cN:"comment",b:"//",e:"$"}].concat(b)}}); \ No newline at end of file diff --git a/fs-framework/fs-preview/src/main/resources/static/lib/marked/marked.min.js b/fs-framework/fs-preview/src/main/resources/static/lib/marked/marked.min.js new file mode 100644 index 0000000000000000000000000000000000000000..516b3f5d0889466914930c891f9f8f1e59d312bb --- /dev/null +++ b/fs-framework/fs-preview/src/main/resources/static/lib/marked/marked.min.js @@ -0,0 +1,6 @@ +/** + * marked v11.1.1 - a markdown parser + * Copyright (c) 2011-2023, Christopher Jeffrey. (MIT Licensed) + * https://github.com/markedjs/marked + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).marked={})}(this,(function(e){"use strict";function t(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}function n(t){e.defaults=t}e.defaults={async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null};const s=/[&<>"']/,r=new RegExp(s.source,"g"),i=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,l=new RegExp(i.source,"g"),o={"&":"&","<":"<",">":">",'"':""","'":"'"},a=e=>o[e];function c(e,t){if(t){if(s.test(e))return e.replace(r,a)}else if(i.test(e))return e.replace(l,a);return e}const h=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function p(e){return e.replace(h,((e,t)=>"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""))}const u=/(^|[^\[])\^/g;function k(e,t){let n="string"==typeof e?e:e.source;t=t||"";const s={replace:(e,t)=>{let r="string"==typeof t?t:t.source;return r=r.replace(u,"$1"),n=n.replace(e,r),s},getRegex:()=>new RegExp(n,t)};return s}function g(e){try{e=encodeURI(e).replace(/%25/g,"%")}catch(e){return null}return e}const f={exec:()=>null};function d(e,t){const n=e.replace(/\|/g,((e,t,n)=>{let s=!1,r=t;for(;--r>=0&&"\\"===n[r];)s=!s;return s?"|":" |"})).split(/ \|/);let s=0;if(n[0].trim()||n.shift(),n.length>0&&!n[n.length-1].trim()&&n.pop(),t)if(n.length>t)n.splice(t);else for(;n.length0)return{type:"space",raw:t[0]}}code(e){const t=this.rules.block.code.exec(e);if(t){const e=t[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?e:x(e,"\n")}}}fences(e){const t=this.rules.block.fences.exec(e);if(t){const e=t[0],n=function(e,t){const n=e.match(/^(\s+)(?:```)/);if(null===n)return t;const s=n[1];return t.split("\n").map((e=>{const t=e.match(/^\s+/);if(null===t)return e;const[n]=t;return n.length>=s.length?e.slice(s.length):e})).join("\n")}(e,t[3]||"");return{type:"code",raw:e,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):t[2],text:n}}}heading(e){const t=this.rules.block.heading.exec(e);if(t){let e=t[2].trim();if(/#$/.test(e)){const t=x(e,"#");this.options.pedantic?e=t.trim():t&&!/ $/.test(t)||(e=t.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:e,tokens:this.lexer.inline(e)}}}hr(e){const t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:t[0]}}blockquote(e){const t=this.rules.block.blockquote.exec(e);if(t){const e=x(t[0].replace(/^ *>[ \t]?/gm,""),"\n"),n=this.lexer.state.top;this.lexer.state.top=!0;const s=this.lexer.blockTokens(e);return this.lexer.state.top=n,{type:"blockquote",raw:t[0],tokens:s,text:e}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim();const s=n.length>1,r={type:"list",raw:"",ordered:s,start:s?+n.slice(0,-1):"",loose:!1,items:[]};n=s?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=s?n:"[*+-]");const i=new RegExp(`^( {0,3}${n})((?:[\t ][^\\n]*)?(?:\\n|$))`);let l="",o="",a=!1;for(;e;){let n=!1;if(!(t=i.exec(e)))break;if(this.rules.block.hr.test(e))break;l=t[0],e=e.substring(l.length);let s=t[2].split("\n",1)[0].replace(/^\t+/,(e=>" ".repeat(3*e.length))),c=e.split("\n",1)[0],h=0;this.options.pedantic?(h=2,o=s.trimStart()):(h=t[2].search(/[^ ]/),h=h>4?1:h,o=s.slice(h),h+=t[1].length);let p=!1;if(!s&&/^ *$/.test(c)&&(l+=c+"\n",e=e.substring(c.length+1),n=!0),!n){const t=new RegExp(`^ {0,${Math.min(3,h-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ \t][^\\n]*)?(?:\\n|$))`),n=new RegExp(`^ {0,${Math.min(3,h-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),r=new RegExp(`^ {0,${Math.min(3,h-1)}}(?:\`\`\`|~~~)`),i=new RegExp(`^ {0,${Math.min(3,h-1)}}#`);for(;e;){const a=e.split("\n",1)[0];if(c=a,this.options.pedantic&&(c=c.replace(/^ {1,4}(?=( {4})*[^ ])/g," ")),r.test(c))break;if(i.test(c))break;if(t.test(c))break;if(n.test(e))break;if(c.search(/[^ ]/)>=h||!c.trim())o+="\n"+c.slice(h);else{if(p)break;if(s.search(/[^ ]/)>=4)break;if(r.test(s))break;if(i.test(s))break;if(n.test(s))break;o+="\n"+c}p||c.trim()||(p=!0),l+=a+"\n",e=e.substring(a.length+1),s=c.slice(h)}}r.loose||(a?r.loose=!0:/\n *\n *$/.test(l)&&(a=!0));let u,k=null;this.options.gfm&&(k=/^\[[ xX]\] /.exec(o),k&&(u="[ ] "!==k[0],o=o.replace(/^\[[ xX]\] +/,""))),r.items.push({type:"list_item",raw:l,task:!!k,checked:u,loose:!1,text:o,tokens:[]}),r.raw+=l}r.items[r.items.length-1].raw=l.trimEnd(),r.items[r.items.length-1].text=o.trimEnd(),r.raw=r.raw.trimEnd();for(let e=0;e"space"===e.type)),n=t.length>0&&t.some((e=>/\n.*\n/.test(e.raw)));r.loose=n}if(r.loose)for(let e=0;e$/,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",s=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):t[3];return{type:"def",tag:e,raw:t[0],href:n,title:s}}}table(e){const t=this.rules.block.table.exec(e);if(!t)return;if(!/[:|]/.test(t[2]))return;const n=d(t[1]),s=t[2].replace(/^\||\| *$/g,"").split("|"),r=t[3]&&t[3].trim()?t[3].replace(/\n[ \t]*$/,"").split("\n"):[],i={type:"table",raw:t[0],header:[],align:[],rows:[]};if(n.length===s.length){for(const e of s)/^ *-+: *$/.test(e)?i.align.push("right"):/^ *:-+: *$/.test(e)?i.align.push("center"):/^ *:-+ *$/.test(e)?i.align.push("left"):i.align.push(null);for(const e of n)i.header.push({text:e,tokens:this.lexer.inline(e)});for(const e of r)i.rows.push(d(e,i.header.length).map((e=>({text:e,tokens:this.lexer.inline(e)}))));return i}}lheading(e){const t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:"="===t[2].charAt(0)?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){const t=this.rules.block.paragraph.exec(e);if(t){const e="\n"===t[1].charAt(t[1].length-1)?t[1].slice(0,-1):t[1];return{type:"paragraph",raw:t[0],text:e,tokens:this.lexer.inline(e)}}}text(e){const t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){const t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:c(t[1])}}tag(e){const t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&/^/i.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){const t=this.rules.inline.link.exec(e);if(t){const e=t[2].trim();if(!this.options.pedantic&&/^$/.test(e))return;const t=x(e.slice(0,-1),"\\");if((e.length-t.length)%2==0)return}else{const e=function(e,t){if(-1===e.indexOf(t[1]))return-1;let n=0;for(let s=0;s-1){const n=(0===t[0].indexOf("!")?5:4)+t[1].length+e;t[2]=t[2].substring(0,e),t[0]=t[0].substring(0,n).trim(),t[3]=""}}let n=t[2],s="";if(this.options.pedantic){const e=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(n);e&&(n=e[1],s=e[3])}else s=t[3]?t[3].slice(1,-1):"";return n=n.trim(),/^$/.test(e)?n.slice(1):n.slice(1,-1)),b(t,{href:n?n.replace(this.rules.inline.anyPunctuation,"$1"):n,title:s?s.replace(this.rules.inline.anyPunctuation,"$1"):s},t[0],this.lexer)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){const e=t[(n[2]||n[1]).replace(/\s+/g," ").toLowerCase()];if(!e){const e=n[0].charAt(0);return{type:"text",raw:e,text:e}}return b(n,e,n[0],this.lexer)}}emStrong(e,t,n=""){let s=this.rules.inline.emStrongLDelim.exec(e);if(!s)return;if(s[3]&&n.match(/[\p{L}\p{N}]/u))return;if(!(s[1]||s[2]||"")||!n||this.rules.inline.punctuation.exec(n)){const n=[...s[0]].length-1;let r,i,l=n,o=0;const a="*"===s[0][0]?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(a.lastIndex=0,t=t.slice(-1*e.length+n);null!=(s=a.exec(t));){if(r=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!r)continue;if(i=[...r].length,s[3]||s[4]){l+=i;continue}if((s[5]||s[6])&&n%3&&!((n+i)%3)){o+=i;continue}if(l-=i,l>0)continue;i=Math.min(i,i+l+o);const t=[...s[0]][0].length,a=e.slice(0,n+s.index+t+i);if(Math.min(n,i)%2){const e=a.slice(1,-1);return{type:"em",raw:a,text:e,tokens:this.lexer.inlineTokens(e)}}const c=a.slice(2,-2);return{type:"strong",raw:a,text:c,tokens:this.lexer.inlineTokens(c)}}}}codespan(e){const t=this.rules.inline.code.exec(e);if(t){let e=t[2].replace(/\n/g," ");const n=/[^ ]/.test(e),s=/^ /.test(e)&&/ $/.test(e);return n&&s&&(e=e.substring(1,e.length-1)),e=c(e,!0),{type:"codespan",raw:t[0],text:e}}}br(e){const t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e){const t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e){const t=this.rules.inline.autolink.exec(e);if(t){let e,n;return"@"===t[2]?(e=c(t[1]),n="mailto:"+e):(e=c(t[1]),n=e),{type:"link",raw:t[0],text:e,href:n,tokens:[{type:"text",raw:e,text:e}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let e,n;if("@"===t[2])e=c(t[0]),n="mailto:"+e;else{let s;do{s=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??""}while(s!==t[0]);e=c(t[0]),n="www."===t[1]?"http://"+t[0]:t[0]}return{type:"link",raw:t[0],text:e,href:n,tokens:[{type:"text",raw:e,text:e}]}}}inlineText(e){const t=this.rules.inline.text.exec(e);if(t){let e;return e=this.lexer.state.inRawBlock?t[0]:c(t[0]),{type:"text",raw:t[0],text:e}}}}const m=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,y=/(?:[*+-]|\d{1,9}[.)])/,$=k(/^(?!bull )((?:.|\n(?!\s*?\n|bull ))+?)\n {0,3}(=+|-+) *(?:\n+|$)/).replace(/bull/g,y).getRegex(),z=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,T=/(?!\s*\])(?:\\.|[^\[\]\\])+/,R=k(/^ {0,3}\[(label)\]: *(?:\n *)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/).replace("label",T).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),_=k(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,y).getRegex(),A="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",S=/|$)/,I=k("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))","i").replace("comment",S).replace("tag",A).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),E=k(z).replace("hr",m).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",A).getRegex(),Z={blockquote:k(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",E).getRegex(),code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,def:R,fences:/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,hr:m,html:I,lheading:$,list:_,newline:/^(?: *(?:\n|$))+/,paragraph:E,table:f,text:/^[^\n]+/},q=k("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",m).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",A).getRegex(),L={...Z,table:q,paragraph:k(z).replace("hr",m).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",q).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",A).getRegex()},P={...Z,html:k("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",S).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:f,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:k(z).replace("hr",m).replace("heading"," *#{1,6} *[^\n]").replace("lheading",$).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},Q=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,v=/^( {2,}|\\)\n(?!\s*$)/,B="\\p{P}$+<=>`^|~",M=k(/^((?![*_])[\spunctuation])/,"u").replace(/punctuation/g,B).getRegex(),O=k(/^(?:\*+(?:((?!\*)[punct])|[^\s*]))|^_+(?:((?!_)[punct])|([^\s_]))/,"u").replace(/punct/g,B).getRegex(),C=k("^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)[punct](\\*+)(?=[\\s]|$)|[^punct\\s](\\*+)(?!\\*)(?=[punct\\s]|$)|(?!\\*)[punct\\s](\\*+)(?=[^punct\\s])|[\\s](\\*+)(?!\\*)(?=[punct])|(?!\\*)[punct](\\*+)(?!\\*)(?=[punct])|[^punct\\s](\\*+)(?=[^punct\\s])","gu").replace(/punct/g,B).getRegex(),D=k("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)[punct](_+)(?=[\\s]|$)|[^punct\\s](_+)(?!_)(?=[punct\\s]|$)|(?!_)[punct\\s](_+)(?=[^punct\\s])|[\\s](_+)(?!_)(?=[punct])|(?!_)[punct](_+)(?!_)(?=[punct])","gu").replace(/punct/g,B).getRegex(),j=k(/\\([punct])/,"gu").replace(/punct/g,B).getRegex(),H=k(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),U=k(S).replace("(?:--\x3e|$)","--\x3e").getRegex(),X=k("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",U).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),F=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,N=k(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/).replace("label",F).replace("href",/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),G=k(/^!?\[(label)\]\[(ref)\]/).replace("label",F).replace("ref",T).getRegex(),J=k(/^!?\[(ref)\](?:\[\])?/).replace("ref",T).getRegex(),K={_backpedal:f,anyPunctuation:j,autolink:H,blockSkip:/\[[^[\]]*?\]\([^\(\)]*?\)|`[^`]*?`|<[^<>]*?>/g,br:v,code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,del:f,emStrongLDelim:O,emStrongRDelimAst:C,emStrongRDelimUnd:D,escape:Q,link:N,nolink:J,punctuation:M,reflink:G,reflinkSearch:k("reflink|nolink(?!\\()","g").replace("reflink",G).replace("nolink",J).getRegex(),tag:X,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\t+" ".repeat(n.length)));e;)if(!(this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some((s=>!!(n=s.call({lexer:this},e,t))&&(e=e.substring(n.raw.length),t.push(n),!0)))))if(n=this.tokenizer.space(e))e=e.substring(n.raw.length),1===n.raw.length&&t.length>0?t[t.length-1].raw+="\n":t.push(n);else if(n=this.tokenizer.code(e))e=e.substring(n.raw.length),s=t[t.length-1],!s||"paragraph"!==s.type&&"text"!==s.type?t.push(n):(s.raw+="\n"+n.raw,s.text+="\n"+n.text,this.inlineQueue[this.inlineQueue.length-1].src=s.text);else if(n=this.tokenizer.fences(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.heading(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.hr(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.blockquote(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.list(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.html(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.def(e))e=e.substring(n.raw.length),s=t[t.length-1],!s||"paragraph"!==s.type&&"text"!==s.type?this.tokens.links[n.tag]||(this.tokens.links[n.tag]={href:n.href,title:n.title}):(s.raw+="\n"+n.raw,s.text+="\n"+n.raw,this.inlineQueue[this.inlineQueue.length-1].src=s.text);else if(n=this.tokenizer.table(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.lheading(e))e=e.substring(n.raw.length),t.push(n);else{if(r=e,this.options.extensions&&this.options.extensions.startBlock){let t=1/0;const n=e.slice(1);let s;this.options.extensions.startBlock.forEach((e=>{s=e.call({lexer:this},n),"number"==typeof s&&s>=0&&(t=Math.min(t,s))})),t<1/0&&t>=0&&(r=e.substring(0,t+1))}if(this.state.top&&(n=this.tokenizer.paragraph(r)))s=t[t.length-1],i&&"paragraph"===s.type?(s.raw+="\n"+n.raw,s.text+="\n"+n.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=s.text):t.push(n),i=r.length!==e.length,e=e.substring(n.raw.length);else if(n=this.tokenizer.text(e))e=e.substring(n.raw.length),s=t[t.length-1],s&&"text"===s.type?(s.raw+="\n"+n.raw,s.text+="\n"+n.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=s.text):t.push(n);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){let n,s,r,i,l,o,a=e;if(this.tokens.links){const e=Object.keys(this.tokens.links);if(e.length>0)for(;null!=(i=this.tokenizer.rules.inline.reflinkSearch.exec(a));)e.includes(i[0].slice(i[0].lastIndexOf("[")+1,-1))&&(a=a.slice(0,i.index)+"["+"a".repeat(i[0].length-2)+"]"+a.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(i=this.tokenizer.rules.inline.blockSkip.exec(a));)a=a.slice(0,i.index)+"["+"a".repeat(i[0].length-2)+"]"+a.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(i=this.tokenizer.rules.inline.anyPunctuation.exec(a));)a=a.slice(0,i.index)+"++"+a.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;e;)if(l||(o=""),l=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some((s=>!!(n=s.call({lexer:this},e,t))&&(e=e.substring(n.raw.length),t.push(n),!0)))))if(n=this.tokenizer.escape(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.tag(e))e=e.substring(n.raw.length),s=t[t.length-1],s&&"text"===n.type&&"text"===s.type?(s.raw+=n.raw,s.text+=n.text):t.push(n);else if(n=this.tokenizer.link(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.reflink(e,this.tokens.links))e=e.substring(n.raw.length),s=t[t.length-1],s&&"text"===n.type&&"text"===s.type?(s.raw+=n.raw,s.text+=n.text):t.push(n);else if(n=this.tokenizer.emStrong(e,a,o))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.codespan(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.br(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.del(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.autolink(e))e=e.substring(n.raw.length),t.push(n);else if(this.state.inLink||!(n=this.tokenizer.url(e))){if(r=e,this.options.extensions&&this.options.extensions.startInline){let t=1/0;const n=e.slice(1);let s;this.options.extensions.startInline.forEach((e=>{s=e.call({lexer:this},n),"number"==typeof s&&s>=0&&(t=Math.min(t,s))})),t<1/0&&t>=0&&(r=e.substring(0,t+1))}if(n=this.tokenizer.inlineText(r))e=e.substring(n.raw.length),"_"!==n.raw.slice(-1)&&(o=n.raw.slice(-1)),l=!0,s=t[t.length-1],s&&"text"===s.type?(s.raw+=n.raw,s.text+=n.text):t.push(n);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}}else e=e.substring(n.raw.length),t.push(n);return t}}class se{options;constructor(t){this.options=t||e.defaults}code(e,t,n){const s=(t||"").match(/^\S*/)?.[0];return e=e.replace(/\n$/,"")+"\n",s?'
'+(n?e:c(e,!0))+"
\n":"
"+(n?e:c(e,!0))+"
\n"}blockquote(e){return`
\n${e}
\n`}html(e,t){return e}heading(e,t,n){return`${e}\n`}hr(){return"
\n"}list(e,t,n){const s=t?"ol":"ul";return"<"+s+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"\n"}listitem(e,t,n){return`
  • ${e}
  • \n`}checkbox(e){return"'}paragraph(e){return`

    ${e}

    \n`}table(e,t){return t&&(t=`${t}`),"\n\n"+e+"\n"+t+"
    \n"}tablerow(e){return`\n${e}\n`}tablecell(e,t){const n=t.header?"th":"td";return(t.align?`<${n} align="${t.align}">`:`<${n}>`)+e+`\n`}strong(e){return`${e}`}em(e){return`${e}`}codespan(e){return`${e}`}br(){return"
    "}del(e){return`${e}`}link(e,t,n){const s=g(e);if(null===s)return n;let r='
    ",r}image(e,t,n){const s=g(e);if(null===s)return n;let r=`${n}0&&"paragraph"===n.tokens[0].type?(n.tokens[0].text=e+" "+n.tokens[0].text,n.tokens[0].tokens&&n.tokens[0].tokens.length>0&&"text"===n.tokens[0].tokens[0].type&&(n.tokens[0].tokens[0].text=e+" "+n.tokens[0].tokens[0].text)):n.tokens.unshift({type:"text",text:e+" "}):o+=e+" "}o+=this.parse(n.tokens,i),l+=this.renderer.listitem(o,r,!!s)}n+=this.renderer.list(l,t,s);continue}case"html":{const e=r;n+=this.renderer.html(e.text,e.block);continue}case"paragraph":{const e=r;n+=this.renderer.paragraph(this.parseInline(e.tokens));continue}case"text":{let i=r,l=i.tokens?this.parseInline(i.tokens):i.text;for(;s+1{n=n.concat(this.walkTokens(e[s],t))})):e.tokens&&(n=n.concat(this.walkTokens(e.tokens,t)))}}return n}use(...e){const t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach((e=>{const n={...e};if(n.async=this.defaults.async||n.async||!1,e.extensions&&(e.extensions.forEach((e=>{if(!e.name)throw new Error("extension name required");if("renderer"in e){const n=t.renderers[e.name];t.renderers[e.name]=n?function(...t){let s=e.renderer.apply(this,t);return!1===s&&(s=n.apply(this,t)),s}:e.renderer}if("tokenizer"in e){if(!e.level||"block"!==e.level&&"inline"!==e.level)throw new Error("extension level must be 'block' or 'inline'");const n=t[e.level];n?n.unshift(e.tokenizer):t[e.level]=[e.tokenizer],e.start&&("block"===e.level?t.startBlock?t.startBlock.push(e.start):t.startBlock=[e.start]:"inline"===e.level&&(t.startInline?t.startInline.push(e.start):t.startInline=[e.start]))}"childTokens"in e&&e.childTokens&&(t.childTokens[e.name]=e.childTokens)})),n.extensions=t),e.renderer){const t=this.defaults.renderer||new se(this.defaults);for(const n in e.renderer){if(!(n in t))throw new Error(`renderer '${n}' does not exist`);if("options"===n)continue;const s=n,r=e.renderer[s],i=t[s];t[s]=(...e)=>{let n=r.apply(t,e);return!1===n&&(n=i.apply(t,e)),n||""}}n.renderer=t}if(e.tokenizer){const t=this.defaults.tokenizer||new w(this.defaults);for(const n in e.tokenizer){if(!(n in t))throw new Error(`tokenizer '${n}' does not exist`);if(["options","rules","lexer"].includes(n))continue;const s=n,r=e.tokenizer[s],i=t[s];t[s]=(...e)=>{let n=r.apply(t,e);return!1===n&&(n=i.apply(t,e)),n}}n.tokenizer=t}if(e.hooks){const t=this.defaults.hooks||new le;for(const n in e.hooks){if(!(n in t))throw new Error(`hook '${n}' does not exist`);if("options"===n)continue;const s=n,r=e.hooks[s],i=t[s];le.passThroughHooks.has(n)?t[s]=e=>{if(this.defaults.async)return Promise.resolve(r.call(t,e)).then((e=>i.call(t,e)));const n=r.call(t,e);return i.call(t,n)}:t[s]=(...e)=>{let n=r.apply(t,e);return!1===n&&(n=i.apply(t,e)),n}}n.hooks=t}if(e.walkTokens){const t=this.defaults.walkTokens,s=e.walkTokens;n.walkTokens=function(e){let n=[];return n.push(s.call(this,e)),t&&(n=n.concat(t.call(this,e))),n}}this.defaults={...this.defaults,...n}})),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return ne.lex(e,t??this.defaults)}parser(e,t){return ie.parse(e,t??this.defaults)}#e(e,t){return(n,s)=>{const r={...s},i={...this.defaults,...r};!0===this.defaults.async&&!1===r.async&&(i.silent||console.warn("marked(): The async option was set to true by an extension. The async: false option sent to parse will be ignored."),i.async=!0);const l=this.#t(!!i.silent,!!i.async);if(null==n)return l(new Error("marked(): input parameter is undefined or null"));if("string"!=typeof n)return l(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(n)+", string expected"));if(i.hooks&&(i.hooks.options=i),i.async)return Promise.resolve(i.hooks?i.hooks.preprocess(n):n).then((t=>e(t,i))).then((e=>i.hooks?i.hooks.processAllTokens(e):e)).then((e=>i.walkTokens?Promise.all(this.walkTokens(e,i.walkTokens)).then((()=>e)):e)).then((e=>t(e,i))).then((e=>i.hooks?i.hooks.postprocess(e):e)).catch(l);try{i.hooks&&(n=i.hooks.preprocess(n));let s=e(n,i);i.hooks&&(s=i.hooks.processAllTokens(s)),i.walkTokens&&this.walkTokens(s,i.walkTokens);let r=t(s,i);return i.hooks&&(r=i.hooks.postprocess(r)),r}catch(e){return l(e)}}}#t(e,t){return n=>{if(n.message+="\nPlease report this to https://github.com/markedjs/marked.",e){const e="

    An error occurred:

    "+c(n.message+"",!0)+"
    ";return t?Promise.resolve(e):e}if(t)return Promise.reject(n);throw n}}}const ae=new oe;function ce(e,t){return ae.parse(e,t)}ce.options=ce.setOptions=function(e){return ae.setOptions(e),ce.defaults=ae.defaults,n(ce.defaults),ce},ce.getDefaults=t,ce.defaults=e.defaults,ce.use=function(...e){return ae.use(...e),ce.defaults=ae.defaults,n(ce.defaults),ce},ce.walkTokens=function(e,t){return ae.walkTokens(e,t)},ce.parseInline=ae.parseInline,ce.Parser=ie,ce.parser=ie.parse,ce.Renderer=se,ce.TextRenderer=re,ce.Lexer=ne,ce.lexer=ne.lex,ce.Tokenizer=w,ce.Hooks=le,ce.parse=ce;const he=ce.options,pe=ce.setOptions,ue=ce.use,ke=ce.walkTokens,ge=ce.parseInline,fe=ce,de=ie.parse,xe=ne.lex;e.Hooks=le,e.Lexer=ne,e.Marked=oe,e.Parser=ie,e.Renderer=se,e.TextRenderer=re,e.Tokenizer=w,e.getDefaults=t,e.lexer=xe,e.marked=ce,e.options=he,e.parse=fe,e.parseInline=ge,e.parser=de,e.setOptions=pe,e.use=ue,e.walkTokens=ke})); \ No newline at end of file diff --git a/fs-framework/fs-preview/src/main/resources/static/lib/pdfjs/LICENSE b/fs-framework/fs-preview/src/main/resources/static/lib/pdfjs/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..f433b1a53f5b830a205fd2df78e2b34974656c7b --- /dev/null +++ b/fs-framework/fs-preview/src/main/resources/static/lib/pdfjs/LICENSE @@ -0,0 +1,177 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS diff --git a/fs-framework/fs-preview/src/main/resources/static/lib/pdfjs/build/pdf.mjs b/fs-framework/fs-preview/src/main/resources/static/lib/pdfjs/build/pdf.mjs new file mode 100644 index 0000000000000000000000000000000000000000..ffdb697b67ab4fc04ca11a38c6b94fb3542c75a4 --- /dev/null +++ b/fs-framework/fs-preview/src/main/resources/static/lib/pdfjs/build/pdf.mjs @@ -0,0 +1,26316 @@ +/** + * @licstart The following is the entire license notice for the + * JavaScript code in this page + * + * Copyright 2024 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @licend The above is the entire license notice for the + * JavaScript code in this page + */ + +/** + * pdfjsVersion = 5.4.394 + * pdfjsBuild = 2cc809ade + */ +/******/ // The require scope +/******/ var __webpack_require__ = {}; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; + +;// ./src/shared/util.js +const isNodeJS = typeof process === "object" && process + "" === "[object process]" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== "browser"); +const FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0]; +const LINE_FACTOR = 1.35; +const LINE_DESCENT_FACTOR = 0.35; +const BASELINE_FACTOR = LINE_DESCENT_FACTOR / LINE_FACTOR; +const RenderingIntentFlag = { + ANY: 0x01, + DISPLAY: 0x02, + PRINT: 0x04, + SAVE: 0x08, + ANNOTATIONS_FORMS: 0x10, + ANNOTATIONS_STORAGE: 0x20, + ANNOTATIONS_DISABLE: 0x40, + IS_EDITING: 0x80, + OPLIST: 0x100 +}; +const AnnotationMode = { + DISABLE: 0, + ENABLE: 1, + ENABLE_FORMS: 2, + ENABLE_STORAGE: 3 +}; +const AnnotationEditorPrefix = "pdfjs_internal_editor_"; +const AnnotationEditorType = { + DISABLE: -1, + NONE: 0, + FREETEXT: 3, + HIGHLIGHT: 9, + STAMP: 13, + INK: 15, + POPUP: 16, + SIGNATURE: 101, + COMMENT: 102 +}; +const AnnotationEditorParamsType = { + RESIZE: 1, + CREATE: 2, + FREETEXT_SIZE: 11, + FREETEXT_COLOR: 12, + FREETEXT_OPACITY: 13, + INK_COLOR: 21, + INK_THICKNESS: 22, + INK_OPACITY: 23, + HIGHLIGHT_COLOR: 31, + HIGHLIGHT_THICKNESS: 32, + HIGHLIGHT_FREE: 33, + HIGHLIGHT_SHOW_ALL: 34, + DRAW_STEP: 41 +}; +const PermissionFlag = { + PRINT: 0x04, + MODIFY_CONTENTS: 0x08, + COPY: 0x10, + MODIFY_ANNOTATIONS: 0x20, + FILL_INTERACTIVE_FORMS: 0x100, + COPY_FOR_ACCESSIBILITY: 0x200, + ASSEMBLE: 0x400, + PRINT_HIGH_QUALITY: 0x800 +}; +const MeshFigureType = { + TRIANGLES: 1, + LATTICE: 2, + PATCH: 3 +}; +const TextRenderingMode = { + FILL: 0, + STROKE: 1, + FILL_STROKE: 2, + INVISIBLE: 3, + FILL_ADD_TO_PATH: 4, + STROKE_ADD_TO_PATH: 5, + FILL_STROKE_ADD_TO_PATH: 6, + ADD_TO_PATH: 7, + FILL_STROKE_MASK: 3, + ADD_TO_PATH_FLAG: 4 +}; +const util_ImageKind = { + GRAYSCALE_1BPP: 1, + RGB_24BPP: 2, + RGBA_32BPP: 3 +}; +const AnnotationType = { + TEXT: 1, + LINK: 2, + FREETEXT: 3, + LINE: 4, + SQUARE: 5, + CIRCLE: 6, + POLYGON: 7, + POLYLINE: 8, + HIGHLIGHT: 9, + UNDERLINE: 10, + SQUIGGLY: 11, + STRIKEOUT: 12, + STAMP: 13, + CARET: 14, + INK: 15, + POPUP: 16, + FILEATTACHMENT: 17, + SOUND: 18, + MOVIE: 19, + WIDGET: 20, + SCREEN: 21, + PRINTERMARK: 22, + TRAPNET: 23, + WATERMARK: 24, + THREED: 25, + REDACT: 26 +}; +const AnnotationReplyType = { + GROUP: "Group", + REPLY: "R" +}; +const AnnotationFlag = { + INVISIBLE: 0x01, + HIDDEN: 0x02, + PRINT: 0x04, + NOZOOM: 0x08, + NOROTATE: 0x10, + NOVIEW: 0x20, + READONLY: 0x40, + LOCKED: 0x80, + TOGGLENOVIEW: 0x100, + LOCKEDCONTENTS: 0x200 +}; +const AnnotationFieldFlag = { + READONLY: 0x0000001, + REQUIRED: 0x0000002, + NOEXPORT: 0x0000004, + MULTILINE: 0x0001000, + PASSWORD: 0x0002000, + NOTOGGLETOOFF: 0x0004000, + RADIO: 0x0008000, + PUSHBUTTON: 0x0010000, + COMBO: 0x0020000, + EDIT: 0x0040000, + SORT: 0x0080000, + FILESELECT: 0x0100000, + MULTISELECT: 0x0200000, + DONOTSPELLCHECK: 0x0400000, + DONOTSCROLL: 0x0800000, + COMB: 0x1000000, + RICHTEXT: 0x2000000, + RADIOSINUNISON: 0x2000000, + COMMITONSELCHANGE: 0x4000000 +}; +const AnnotationBorderStyleType = { + SOLID: 1, + DASHED: 2, + BEVELED: 3, + INSET: 4, + UNDERLINE: 5 +}; +const AnnotationActionEventType = { + E: "Mouse Enter", + X: "Mouse Exit", + D: "Mouse Down", + U: "Mouse Up", + Fo: "Focus", + Bl: "Blur", + PO: "PageOpen", + PC: "PageClose", + PV: "PageVisible", + PI: "PageInvisible", + K: "Keystroke", + F: "Format", + V: "Validate", + C: "Calculate" +}; +const DocumentActionEventType = { + WC: "WillClose", + WS: "WillSave", + DS: "DidSave", + WP: "WillPrint", + DP: "DidPrint" +}; +const PageActionEventType = { + O: "PageOpen", + C: "PageClose" +}; +const VerbosityLevel = { + ERRORS: 0, + WARNINGS: 1, + INFOS: 5 +}; +const OPS = { + dependency: 1, + setLineWidth: 2, + setLineCap: 3, + setLineJoin: 4, + setMiterLimit: 5, + setDash: 6, + setRenderingIntent: 7, + setFlatness: 8, + setGState: 9, + save: 10, + restore: 11, + transform: 12, + moveTo: 13, + lineTo: 14, + curveTo: 15, + curveTo2: 16, + curveTo3: 17, + closePath: 18, + rectangle: 19, + stroke: 20, + closeStroke: 21, + fill: 22, + eoFill: 23, + fillStroke: 24, + eoFillStroke: 25, + closeFillStroke: 26, + closeEOFillStroke: 27, + endPath: 28, + clip: 29, + eoClip: 30, + beginText: 31, + endText: 32, + setCharSpacing: 33, + setWordSpacing: 34, + setHScale: 35, + setLeading: 36, + setFont: 37, + setTextRenderingMode: 38, + setTextRise: 39, + moveText: 40, + setLeadingMoveText: 41, + setTextMatrix: 42, + nextLine: 43, + showText: 44, + showSpacedText: 45, + nextLineShowText: 46, + nextLineSetSpacingShowText: 47, + setCharWidth: 48, + setCharWidthAndBounds: 49, + setStrokeColorSpace: 50, + setFillColorSpace: 51, + setStrokeColor: 52, + setStrokeColorN: 53, + setFillColor: 54, + setFillColorN: 55, + setStrokeGray: 56, + setFillGray: 57, + setStrokeRGBColor: 58, + setFillRGBColor: 59, + setStrokeCMYKColor: 60, + setFillCMYKColor: 61, + shadingFill: 62, + beginInlineImage: 63, + beginImageData: 64, + endInlineImage: 65, + paintXObject: 66, + markPoint: 67, + markPointProps: 68, + beginMarkedContent: 69, + beginMarkedContentProps: 70, + endMarkedContent: 71, + beginCompat: 72, + endCompat: 73, + paintFormXObjectBegin: 74, + paintFormXObjectEnd: 75, + beginGroup: 76, + endGroup: 77, + beginAnnotation: 80, + endAnnotation: 81, + paintImageMaskXObject: 83, + paintImageMaskXObjectGroup: 84, + paintImageXObject: 85, + paintInlineImageXObject: 86, + paintInlineImageXObjectGroup: 87, + paintImageXObjectRepeat: 88, + paintImageMaskXObjectRepeat: 89, + paintSolidColorImageMask: 90, + constructPath: 91, + setStrokeTransparent: 92, + setFillTransparent: 93, + rawFillPath: 94 +}; +const DrawOPS = { + moveTo: 0, + lineTo: 1, + curveTo: 2, + quadraticCurveTo: 3, + closePath: 4 +}; +const PasswordResponses = { + NEED_PASSWORD: 1, + INCORRECT_PASSWORD: 2 +}; +let verbosity = VerbosityLevel.WARNINGS; +function setVerbosityLevel(level) { + if (Number.isInteger(level)) { + verbosity = level; + } +} +function getVerbosityLevel() { + return verbosity; +} +function info(msg) { + if (verbosity >= VerbosityLevel.INFOS) { + console.info(`Info: ${msg}`); + } +} +function warn(msg) { + if (verbosity >= VerbosityLevel.WARNINGS) { + console.warn(`Warning: ${msg}`); + } +} +function unreachable(msg) { + throw new Error(msg); +} +function assert(cond, msg) { + if (!cond) { + unreachable(msg); + } +} +function _isValidProtocol(url) { + switch (url?.protocol) { + case "http:": + case "https:": + case "ftp:": + case "mailto:": + case "tel:": + return true; + default: + return false; + } +} +function createValidAbsoluteUrl(url, baseUrl = null, options = null) { + if (!url) { + return null; + } + if (options && typeof url === "string") { + if (options.addDefaultProtocol && url.startsWith("www.")) { + const dots = url.match(/\./g); + if (dots?.length >= 2) { + url = `http://${url}`; + } + } + if (options.tryConvertEncoding) { + try { + url = stringToUTF8String(url); + } catch {} + } + } + const absoluteUrl = baseUrl ? URL.parse(url, baseUrl) : URL.parse(url); + return _isValidProtocol(absoluteUrl) ? absoluteUrl : null; +} +function updateUrlHash(url, hash, allowRel = false) { + const res = URL.parse(url); + if (res) { + res.hash = hash; + return res.href; + } + if (allowRel && createValidAbsoluteUrl(url, "http://example.com")) { + return url.split("#", 1)[0] + `${hash ? `#${hash}` : ""}`; + } + return ""; +} +function shadow(obj, prop, value, nonSerializable = false) { + Object.defineProperty(obj, prop, { + value, + enumerable: !nonSerializable, + configurable: true, + writable: false + }); + return value; +} +const BaseException = function BaseExceptionClosure() { + function BaseException(message, name) { + this.message = message; + this.name = name; + } + BaseException.prototype = new Error(); + BaseException.constructor = BaseException; + return BaseException; +}(); +class PasswordException extends BaseException { + constructor(msg, code) { + super(msg, "PasswordException"); + this.code = code; + } +} +class UnknownErrorException extends BaseException { + constructor(msg, details) { + super(msg, "UnknownErrorException"); + this.details = details; + } +} +class InvalidPDFException extends BaseException { + constructor(msg) { + super(msg, "InvalidPDFException"); + } +} +class ResponseException extends BaseException { + constructor(msg, status, missing) { + super(msg, "ResponseException"); + this.status = status; + this.missing = missing; + } +} +class FormatError extends BaseException { + constructor(msg) { + super(msg, "FormatError"); + } +} +class AbortException extends BaseException { + constructor(msg) { + super(msg, "AbortException"); + } +} +function bytesToString(bytes) { + if (typeof bytes !== "object" || bytes?.length === undefined) { + unreachable("Invalid argument for bytesToString"); + } + const length = bytes.length; + const MAX_ARGUMENT_COUNT = 8192; + if (length < MAX_ARGUMENT_COUNT) { + return String.fromCharCode.apply(null, bytes); + } + const strBuf = []; + for (let i = 0; i < length; i += MAX_ARGUMENT_COUNT) { + const chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length); + const chunk = bytes.subarray(i, chunkEnd); + strBuf.push(String.fromCharCode.apply(null, chunk)); + } + return strBuf.join(""); +} +function stringToBytes(str) { + if (typeof str !== "string") { + unreachable("Invalid argument for stringToBytes"); + } + const length = str.length; + const bytes = new Uint8Array(length); + for (let i = 0; i < length; ++i) { + bytes[i] = str.charCodeAt(i) & 0xff; + } + return bytes; +} +function string32(value) { + return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff); +} +function objectSize(obj) { + return Object.keys(obj).length; +} +function isLittleEndian() { + const buffer8 = new Uint8Array(4); + buffer8[0] = 1; + const view32 = new Uint32Array(buffer8.buffer, 0, 1); + return view32[0] === 1; +} +function isEvalSupported() { + try { + new Function(""); + return true; + } catch { + return false; + } +} +class util_FeatureTest { + static get isLittleEndian() { + return shadow(this, "isLittleEndian", isLittleEndian()); + } + static get isEvalSupported() { + return shadow(this, "isEvalSupported", isEvalSupported()); + } + static get isOffscreenCanvasSupported() { + return shadow(this, "isOffscreenCanvasSupported", typeof OffscreenCanvas !== "undefined"); + } + static get isImageDecoderSupported() { + return shadow(this, "isImageDecoderSupported", typeof ImageDecoder !== "undefined"); + } + static get isFloat16ArraySupported() { + return shadow(this, "isFloat16ArraySupported", typeof Float16Array !== "undefined"); + } + static get isSanitizerSupported() { + return shadow(this, "isSanitizerSupported", typeof Sanitizer !== "undefined"); + } + static get platform() { + const { + platform, + userAgent + } = navigator; + return shadow(this, "platform", { + isAndroid: userAgent.includes("Android"), + isLinux: platform.includes("Linux"), + isMac: platform.includes("Mac"), + isWindows: platform.includes("Win"), + isFirefox: userAgent.includes("Firefox") + }); + } + static get isCSSRoundSupported() { + return shadow(this, "isCSSRoundSupported", globalThis.CSS?.supports?.("width: round(1.5px, 1px)")); + } +} +const hexNumbers = Array.from(Array(256).keys(), n => n.toString(16).padStart(2, "0")); +class Util { + static makeHexColor(r, g, b) { + return `#${hexNumbers[r]}${hexNumbers[g]}${hexNumbers[b]}`; + } + static domMatrixToTransform(dm) { + return [dm.a, dm.b, dm.c, dm.d, dm.e, dm.f]; + } + static scaleMinMax(transform, minMax) { + let temp; + if (transform[0]) { + if (transform[0] < 0) { + temp = minMax[0]; + minMax[0] = minMax[2]; + minMax[2] = temp; + } + minMax[0] *= transform[0]; + minMax[2] *= transform[0]; + if (transform[3] < 0) { + temp = minMax[1]; + minMax[1] = minMax[3]; + minMax[3] = temp; + } + minMax[1] *= transform[3]; + minMax[3] *= transform[3]; + } else { + temp = minMax[0]; + minMax[0] = minMax[1]; + minMax[1] = temp; + temp = minMax[2]; + minMax[2] = minMax[3]; + minMax[3] = temp; + if (transform[1] < 0) { + temp = minMax[1]; + minMax[1] = minMax[3]; + minMax[3] = temp; + } + minMax[1] *= transform[1]; + minMax[3] *= transform[1]; + if (transform[2] < 0) { + temp = minMax[0]; + minMax[0] = minMax[2]; + minMax[2] = temp; + } + minMax[0] *= transform[2]; + minMax[2] *= transform[2]; + } + minMax[0] += transform[4]; + minMax[1] += transform[5]; + minMax[2] += transform[4]; + minMax[3] += transform[5]; + } + static transform(m1, m2) { + return [m1[0] * m2[0] + m1[2] * m2[1], m1[1] * m2[0] + m1[3] * m2[1], m1[0] * m2[2] + m1[2] * m2[3], m1[1] * m2[2] + m1[3] * m2[3], m1[0] * m2[4] + m1[2] * m2[5] + m1[4], m1[1] * m2[4] + m1[3] * m2[5] + m1[5]]; + } + static multiplyByDOMMatrix(m, md) { + return [m[0] * md.a + m[2] * md.b, m[1] * md.a + m[3] * md.b, m[0] * md.c + m[2] * md.d, m[1] * md.c + m[3] * md.d, m[0] * md.e + m[2] * md.f + m[4], m[1] * md.e + m[3] * md.f + m[5]]; + } + static applyTransform(p, m, pos = 0) { + const p0 = p[pos]; + const p1 = p[pos + 1]; + p[pos] = p0 * m[0] + p1 * m[2] + m[4]; + p[pos + 1] = p0 * m[1] + p1 * m[3] + m[5]; + } + static applyTransformToBezier(p, transform, pos = 0) { + const m0 = transform[0]; + const m1 = transform[1]; + const m2 = transform[2]; + const m3 = transform[3]; + const m4 = transform[4]; + const m5 = transform[5]; + for (let i = 0; i < 6; i += 2) { + const pI = p[pos + i]; + const pI1 = p[pos + i + 1]; + p[pos + i] = pI * m0 + pI1 * m2 + m4; + p[pos + i + 1] = pI * m1 + pI1 * m3 + m5; + } + } + static applyInverseTransform(p, m) { + const p0 = p[0]; + const p1 = p[1]; + const d = m[0] * m[3] - m[1] * m[2]; + p[0] = (p0 * m[3] - p1 * m[2] + m[2] * m[5] - m[4] * m[3]) / d; + p[1] = (-p0 * m[1] + p1 * m[0] + m[4] * m[1] - m[5] * m[0]) / d; + } + static axialAlignedBoundingBox(rect, transform, output) { + const m0 = transform[0]; + const m1 = transform[1]; + const m2 = transform[2]; + const m3 = transform[3]; + const m4 = transform[4]; + const m5 = transform[5]; + const r0 = rect[0]; + const r1 = rect[1]; + const r2 = rect[2]; + const r3 = rect[3]; + let a0 = m0 * r0 + m4; + let a2 = a0; + let a1 = m0 * r2 + m4; + let a3 = a1; + let b0 = m3 * r1 + m5; + let b2 = b0; + let b1 = m3 * r3 + m5; + let b3 = b1; + if (m1 !== 0 || m2 !== 0) { + const m1r0 = m1 * r0; + const m1r2 = m1 * r2; + const m2r1 = m2 * r1; + const m2r3 = m2 * r3; + a0 += m2r1; + a3 += m2r1; + a1 += m2r3; + a2 += m2r3; + b0 += m1r0; + b3 += m1r0; + b1 += m1r2; + b2 += m1r2; + } + output[0] = Math.min(output[0], a0, a1, a2, a3); + output[1] = Math.min(output[1], b0, b1, b2, b3); + output[2] = Math.max(output[2], a0, a1, a2, a3); + output[3] = Math.max(output[3], b0, b1, b2, b3); + } + static inverseTransform(m) { + const d = m[0] * m[3] - m[1] * m[2]; + return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d]; + } + static singularValueDecompose2dScale(matrix, output) { + const m0 = matrix[0]; + const m1 = matrix[1]; + const m2 = matrix[2]; + const m3 = matrix[3]; + const a = m0 ** 2 + m1 ** 2; + const b = m0 * m2 + m1 * m3; + const c = m2 ** 2 + m3 ** 2; + const first = (a + c) / 2; + const second = Math.sqrt(first ** 2 - (a * c - b ** 2)); + output[0] = Math.sqrt(first + second || 1); + output[1] = Math.sqrt(first - second || 1); + } + static normalizeRect(rect) { + const r = rect.slice(0); + if (rect[0] > rect[2]) { + r[0] = rect[2]; + r[2] = rect[0]; + } + if (rect[1] > rect[3]) { + r[1] = rect[3]; + r[3] = rect[1]; + } + return r; + } + static intersect(rect1, rect2) { + const xLow = Math.max(Math.min(rect1[0], rect1[2]), Math.min(rect2[0], rect2[2])); + const xHigh = Math.min(Math.max(rect1[0], rect1[2]), Math.max(rect2[0], rect2[2])); + if (xLow > xHigh) { + return null; + } + const yLow = Math.max(Math.min(rect1[1], rect1[3]), Math.min(rect2[1], rect2[3])); + const yHigh = Math.min(Math.max(rect1[1], rect1[3]), Math.max(rect2[1], rect2[3])); + if (yLow > yHigh) { + return null; + } + return [xLow, yLow, xHigh, yHigh]; + } + static pointBoundingBox(x, y, minMax) { + minMax[0] = Math.min(minMax[0], x); + minMax[1] = Math.min(minMax[1], y); + minMax[2] = Math.max(minMax[2], x); + minMax[3] = Math.max(minMax[3], y); + } + static rectBoundingBox(x0, y0, x1, y1, minMax) { + minMax[0] = Math.min(minMax[0], x0, x1); + minMax[1] = Math.min(minMax[1], y0, y1); + minMax[2] = Math.max(minMax[2], x0, x1); + minMax[3] = Math.max(minMax[3], y0, y1); + } + static #getExtremumOnCurve(x0, x1, x2, x3, y0, y1, y2, y3, t, minMax) { + if (t <= 0 || t >= 1) { + return; + } + const mt = 1 - t; + const tt = t * t; + const ttt = tt * t; + const x = mt * (mt * (mt * x0 + 3 * t * x1) + 3 * tt * x2) + ttt * x3; + const y = mt * (mt * (mt * y0 + 3 * t * y1) + 3 * tt * y2) + ttt * y3; + minMax[0] = Math.min(minMax[0], x); + minMax[1] = Math.min(minMax[1], y); + minMax[2] = Math.max(minMax[2], x); + minMax[3] = Math.max(minMax[3], y); + } + static #getExtremum(x0, x1, x2, x3, y0, y1, y2, y3, a, b, c, minMax) { + if (Math.abs(a) < 1e-12) { + if (Math.abs(b) >= 1e-12) { + this.#getExtremumOnCurve(x0, x1, x2, x3, y0, y1, y2, y3, -c / b, minMax); + } + return; + } + const delta = b ** 2 - 4 * c * a; + if (delta < 0) { + return; + } + const sqrtDelta = Math.sqrt(delta); + const a2 = 2 * a; + this.#getExtremumOnCurve(x0, x1, x2, x3, y0, y1, y2, y3, (-b + sqrtDelta) / a2, minMax); + this.#getExtremumOnCurve(x0, x1, x2, x3, y0, y1, y2, y3, (-b - sqrtDelta) / a2, minMax); + } + static bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3, minMax) { + minMax[0] = Math.min(minMax[0], x0, x3); + minMax[1] = Math.min(minMax[1], y0, y3); + minMax[2] = Math.max(minMax[2], x0, x3); + minMax[3] = Math.max(minMax[3], y0, y3); + this.#getExtremum(x0, x1, x2, x3, y0, y1, y2, y3, 3 * (-x0 + 3 * (x1 - x2) + x3), 6 * (x0 - 2 * x1 + x2), 3 * (x1 - x0), minMax); + this.#getExtremum(x0, x1, x2, x3, y0, y1, y2, y3, 3 * (-y0 + 3 * (y1 - y2) + y3), 6 * (y0 - 2 * y1 + y2), 3 * (y1 - y0), minMax); + } +} +const PDFStringTranslateTable = (/* unused pure expression or super */ null && ([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2d8, 0x2c7, 0x2c6, 0x2d9, 0x2dd, 0x2db, 0x2da, 0x2dc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192, 0x2044, 0x2039, 0x203a, 0x2212, 0x2030, 0x201e, 0x201c, 0x201d, 0x2018, 0x2019, 0x201a, 0x2122, 0xfb01, 0xfb02, 0x141, 0x152, 0x160, 0x178, 0x17d, 0x131, 0x142, 0x153, 0x161, 0x17e, 0, 0x20ac])); +function stringToPDFString(str, keepEscapeSequence = false) { + if (str[0] >= "\xEF") { + let encoding; + if (str[0] === "\xFE" && str[1] === "\xFF") { + encoding = "utf-16be"; + if (str.length % 2 === 1) { + str = str.slice(0, -1); + } + } else if (str[0] === "\xFF" && str[1] === "\xFE") { + encoding = "utf-16le"; + if (str.length % 2 === 1) { + str = str.slice(0, -1); + } + } else if (str[0] === "\xEF" && str[1] === "\xBB" && str[2] === "\xBF") { + encoding = "utf-8"; + } + if (encoding) { + try { + const decoder = new TextDecoder(encoding, { + fatal: true + }); + const buffer = stringToBytes(str); + const decoded = decoder.decode(buffer); + if (keepEscapeSequence || !decoded.includes("\x1b")) { + return decoded; + } + return decoded.replaceAll(/\x1b[^\x1b]*(?:\x1b|$)/g, ""); + } catch (ex) { + warn(`stringToPDFString: "${ex}".`); + } + } + } + const strBuf = []; + for (let i = 0, ii = str.length; i < ii; i++) { + const charCode = str.charCodeAt(i); + if (!keepEscapeSequence && charCode === 0x1b) { + while (++i < ii && str.charCodeAt(i) !== 0x1b) {} + continue; + } + const code = PDFStringTranslateTable[charCode]; + strBuf.push(code ? String.fromCharCode(code) : str.charAt(i)); + } + return strBuf.join(""); +} +function stringToUTF8String(str) { + return decodeURIComponent(escape(str)); +} +function utf8StringToString(str) { + return unescape(encodeURIComponent(str)); +} +function isArrayEqual(arr1, arr2) { + if (arr1.length !== arr2.length) { + return false; + } + for (let i = 0, ii = arr1.length; i < ii; i++) { + if (arr1[i] !== arr2[i]) { + return false; + } + } + return true; +} +function getModificationDate(date = new Date()) { + if (!(date instanceof Date)) { + date = new Date(date); + } + const buffer = [date.getUTCFullYear().toString(), (date.getUTCMonth() + 1).toString().padStart(2, "0"), date.getUTCDate().toString().padStart(2, "0"), date.getUTCHours().toString().padStart(2, "0"), date.getUTCMinutes().toString().padStart(2, "0"), date.getUTCSeconds().toString().padStart(2, "0")]; + return buffer.join(""); +} +let NormalizeRegex = null; +let NormalizationMap = null; +function normalizeUnicode(str) { + if (!NormalizeRegex) { + NormalizeRegex = /([\u00a0\u00b5\u037e\u0eb3\u2000-\u200a\u202f\u2126\ufb00-\ufb04\ufb06\ufb20-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufba1\ufba4-\ufba9\ufbae-\ufbb1\ufbd3-\ufbdc\ufbde-\ufbe7\ufbea-\ufbf8\ufbfc-\ufbfd\ufc00-\ufc5d\ufc64-\ufcf1\ufcf5-\ufd3d\ufd88\ufdf4\ufdfa-\ufdfb\ufe71\ufe77\ufe79\ufe7b\ufe7d]+)|(\ufb05+)/gu; + NormalizationMap = new Map([["ſt", "ſt"]]); + } + return str.replaceAll(NormalizeRegex, (_, p1, p2) => p1 ? p1.normalize("NFKC") : NormalizationMap.get(p2)); +} +function getUuid() { + if (typeof crypto.randomUUID === "function") { + return crypto.randomUUID(); + } + const buf = new Uint8Array(32); + crypto.getRandomValues(buf); + return bytesToString(buf); +} +const AnnotationPrefix = "pdfjs_internal_id_"; +function _isValidExplicitDest(validRef, validName, dest) { + if (!Array.isArray(dest) || dest.length < 2) { + return false; + } + const [page, zoom, ...args] = dest; + if (!validRef(page) && !Number.isInteger(page)) { + return false; + } + if (!validName(zoom)) { + return false; + } + const argsLen = args.length; + let allowNull = true; + switch (zoom.name) { + case "XYZ": + if (argsLen < 2 || argsLen > 3) { + return false; + } + break; + case "Fit": + case "FitB": + return argsLen === 0; + case "FitH": + case "FitBH": + case "FitV": + case "FitBV": + if (argsLen > 1) { + return false; + } + break; + case "FitR": + if (argsLen !== 4) { + return false; + } + allowNull = false; + break; + default: + return false; + } + for (const arg of args) { + if (typeof arg === "number" || allowNull && arg === null) { + continue; + } + return false; + } + return true; +} +function MathClamp(v, min, max) { + return Math.min(Math.max(v, min), max); +} +function toHexUtil(arr) { + if (Uint8Array.prototype.toHex) { + return arr.toHex(); + } + return Array.from(arr, num => hexNumbers[num]).join(""); +} +function toBase64Util(arr) { + if (Uint8Array.prototype.toBase64) { + return arr.toBase64(); + } + return btoa(bytesToString(arr)); +} +function fromBase64Util(str) { + if (Uint8Array.fromBase64) { + return Uint8Array.fromBase64(str); + } + return stringToBytes(atob(str)); +} +if (typeof Promise.try !== "function") { + Promise.try = function (fn, ...args) { + return new Promise(resolve => { + resolve(fn(...args)); + }); + }; +} +if (typeof Math.sumPrecise !== "function") { + Math.sumPrecise = function (numbers) { + return numbers.reduce((a, b) => a + b, 0); + }; +} + +;// ./src/display/xfa_text.js +class XfaText { + static textContent(xfa) { + const items = []; + const output = { + items, + styles: Object.create(null) + }; + function walk(node) { + if (!node) { + return; + } + let str = null; + const name = node.name; + if (name === "#text") { + str = node.value; + } else if (!XfaText.shouldBuildText(name)) { + return; + } else if (node?.attributes?.textContent) { + str = node.attributes.textContent; + } else if (node.value) { + str = node.value; + } + if (str !== null) { + items.push({ + str + }); + } + if (!node.children) { + return; + } + for (const child of node.children) { + walk(child); + } + } + walk(xfa); + return output; + } + static shouldBuildText(name) { + return !(name === "textarea" || name === "input" || name === "option" || name === "select"); + } +} + +;// ./src/display/xfa_layer.js + +class XfaLayer { + static setupStorage(html, id, element, storage, intent) { + const storedData = storage.getValue(id, { + value: null + }); + switch (element.name) { + case "textarea": + if (storedData.value !== null) { + html.textContent = storedData.value; + } + if (intent === "print") { + break; + } + html.addEventListener("input", event => { + storage.setValue(id, { + value: event.target.value + }); + }); + break; + case "input": + if (element.attributes.type === "radio" || element.attributes.type === "checkbox") { + if (storedData.value === element.attributes.xfaOn) { + html.setAttribute("checked", true); + } else if (storedData.value === element.attributes.xfaOff) { + html.removeAttribute("checked"); + } + if (intent === "print") { + break; + } + html.addEventListener("change", event => { + storage.setValue(id, { + value: event.target.checked ? event.target.getAttribute("xfaOn") : event.target.getAttribute("xfaOff") + }); + }); + } else { + if (storedData.value !== null) { + html.setAttribute("value", storedData.value); + } + if (intent === "print") { + break; + } + html.addEventListener("input", event => { + storage.setValue(id, { + value: event.target.value + }); + }); + } + break; + case "select": + if (storedData.value !== null) { + html.setAttribute("value", storedData.value); + for (const option of element.children) { + if (option.attributes.value === storedData.value) { + option.attributes.selected = true; + } else if (option.attributes.hasOwnProperty("selected")) { + delete option.attributes.selected; + } + } + } + html.addEventListener("input", event => { + const options = event.target.options; + const value = options.selectedIndex === -1 ? "" : options[options.selectedIndex].value; + storage.setValue(id, { + value + }); + }); + break; + } + } + static setAttributes({ + html, + element, + storage = null, + intent, + linkService + }) { + const { + attributes + } = element; + const isHTMLAnchorElement = html instanceof HTMLAnchorElement; + if (attributes.type === "radio") { + attributes.name = `${attributes.name}-${intent}`; + } + for (const [key, value] of Object.entries(attributes)) { + if (value === null || value === undefined) { + continue; + } + switch (key) { + case "class": + if (value.length) { + html.setAttribute(key, value.join(" ")); + } + break; + case "dataId": + break; + case "id": + html.setAttribute("data-element-id", value); + break; + case "style": + Object.assign(html.style, value); + break; + case "textContent": + html.textContent = value; + break; + default: + if (!isHTMLAnchorElement || key !== "href" && key !== "newWindow") { + html.setAttribute(key, value); + } + } + } + if (isHTMLAnchorElement) { + linkService.addLinkAttributes(html, attributes.href, attributes.newWindow); + } + if (storage && attributes.dataId) { + this.setupStorage(html, attributes.dataId, element, storage); + } + } + static render(parameters) { + const storage = parameters.annotationStorage; + const linkService = parameters.linkService; + const root = parameters.xfaHtml; + const intent = parameters.intent || "display"; + const rootHtml = document.createElement(root.name); + if (root.attributes) { + this.setAttributes({ + html: rootHtml, + element: root, + intent, + linkService + }); + } + const isNotForRichText = intent !== "richText"; + const rootDiv = parameters.div; + rootDiv.append(rootHtml); + if (parameters.viewport) { + const transform = `matrix(${parameters.viewport.transform.join(",")})`; + rootDiv.style.transform = transform; + } + if (isNotForRichText) { + rootDiv.setAttribute("class", "xfaLayer xfaFont"); + } + const textDivs = []; + if (root.children.length === 0) { + if (root.value) { + const node = document.createTextNode(root.value); + rootHtml.append(node); + if (isNotForRichText && XfaText.shouldBuildText(root.name)) { + textDivs.push(node); + } + } + return { + textDivs + }; + } + const stack = [[root, -1, rootHtml]]; + while (stack.length > 0) { + const [parent, i, html] = stack.at(-1); + if (i + 1 === parent.children.length) { + stack.pop(); + continue; + } + const child = parent.children[++stack.at(-1)[1]]; + if (child === null) { + continue; + } + const { + name + } = child; + if (name === "#text") { + const node = document.createTextNode(child.value); + textDivs.push(node); + html.append(node); + continue; + } + const childHtml = child?.attributes?.xmlns ? document.createElementNS(child.attributes.xmlns, name) : document.createElement(name); + html.append(childHtml); + if (child.attributes) { + this.setAttributes({ + html: childHtml, + element: child, + storage, + intent, + linkService + }); + } + if (child.children?.length > 0) { + stack.push([child, -1, childHtml]); + } else if (child.value) { + const node = document.createTextNode(child.value); + if (isNotForRichText && XfaText.shouldBuildText(name)) { + textDivs.push(node); + } + childHtml.append(node); + } + } + for (const el of rootDiv.querySelectorAll(".xfaNonInteractive input, .xfaNonInteractive textarea")) { + el.setAttribute("readOnly", true); + } + return { + textDivs + }; + } + static update(parameters) { + const transform = `matrix(${parameters.viewport.transform.join(",")})`; + parameters.div.style.transform = transform; + parameters.div.hidden = false; + } +} + +;// ./src/display/display_utils.js + + +const SVG_NS = "http://www.w3.org/2000/svg"; +class PixelsPerInch { + static CSS = 96.0; + static PDF = 72.0; + static PDF_TO_CSS_UNITS = this.CSS / this.PDF; +} +async function fetchData(url, type = "text") { + if (isValidFetchUrl(url, document.baseURI)) { + const response = await fetch(url); + if (!response.ok) { + throw new Error(response.statusText); + } + switch (type) { + case "arraybuffer": + return response.arrayBuffer(); + case "blob": + return response.blob(); + case "json": + return response.json(); + } + return response.text(); + } + return new Promise((resolve, reject) => { + const request = new XMLHttpRequest(); + request.open("GET", url, true); + request.responseType = type; + request.onreadystatechange = () => { + if (request.readyState !== XMLHttpRequest.DONE) { + return; + } + if (request.status === 200 || request.status === 0) { + switch (type) { + case "arraybuffer": + case "blob": + case "json": + resolve(request.response); + return; + } + resolve(request.responseText); + return; + } + reject(new Error(request.statusText)); + }; + request.send(null); + }); +} +class PageViewport { + constructor({ + viewBox, + userUnit, + scale, + rotation, + offsetX = 0, + offsetY = 0, + dontFlip = false + }) { + this.viewBox = viewBox; + this.userUnit = userUnit; + this.scale = scale; + this.rotation = rotation; + this.offsetX = offsetX; + this.offsetY = offsetY; + scale *= userUnit; + const centerX = (viewBox[2] + viewBox[0]) / 2; + const centerY = (viewBox[3] + viewBox[1]) / 2; + let rotateA, rotateB, rotateC, rotateD; + rotation %= 360; + if (rotation < 0) { + rotation += 360; + } + switch (rotation) { + case 180: + rotateA = -1; + rotateB = 0; + rotateC = 0; + rotateD = 1; + break; + case 90: + rotateA = 0; + rotateB = 1; + rotateC = 1; + rotateD = 0; + break; + case 270: + rotateA = 0; + rotateB = -1; + rotateC = -1; + rotateD = 0; + break; + case 0: + rotateA = 1; + rotateB = 0; + rotateC = 0; + rotateD = -1; + break; + default: + throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees."); + } + if (dontFlip) { + rotateC = -rotateC; + rotateD = -rotateD; + } + let offsetCanvasX, offsetCanvasY; + let width, height; + if (rotateA === 0) { + offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX; + offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY; + width = (viewBox[3] - viewBox[1]) * scale; + height = (viewBox[2] - viewBox[0]) * scale; + } else { + offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX; + offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY; + width = (viewBox[2] - viewBox[0]) * scale; + height = (viewBox[3] - viewBox[1]) * scale; + } + this.transform = [rotateA * scale, rotateB * scale, rotateC * scale, rotateD * scale, offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY]; + this.width = width; + this.height = height; + } + get rawDims() { + const dims = this.viewBox; + return shadow(this, "rawDims", { + pageWidth: dims[2] - dims[0], + pageHeight: dims[3] - dims[1], + pageX: dims[0], + pageY: dims[1] + }); + } + clone({ + scale = this.scale, + rotation = this.rotation, + offsetX = this.offsetX, + offsetY = this.offsetY, + dontFlip = false + } = {}) { + return new PageViewport({ + viewBox: this.viewBox.slice(), + userUnit: this.userUnit, + scale, + rotation, + offsetX, + offsetY, + dontFlip + }); + } + convertToViewportPoint(x, y) { + const p = [x, y]; + Util.applyTransform(p, this.transform); + return p; + } + convertToViewportRectangle(rect) { + const topLeft = [rect[0], rect[1]]; + Util.applyTransform(topLeft, this.transform); + const bottomRight = [rect[2], rect[3]]; + Util.applyTransform(bottomRight, this.transform); + return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]]; + } + convertToPdfPoint(x, y) { + const p = [x, y]; + Util.applyInverseTransform(p, this.transform); + return p; + } +} +class RenderingCancelledException extends BaseException { + constructor(msg, extraDelay = 0) { + super(msg, "RenderingCancelledException"); + this.extraDelay = extraDelay; + } +} +function isDataScheme(url) { + const ii = url.length; + let i = 0; + while (i < ii && url[i].trim() === "") { + i++; + } + return url.substring(i, i + 5).toLowerCase() === "data:"; +} +function isPdfFile(filename) { + return typeof filename === "string" && /\.pdf$/i.test(filename); +} +function getFilenameFromUrl(url) { + [url] = url.split(/[#?]/, 1); + return url.substring(url.lastIndexOf("/") + 1); +} +function getPdfFilenameFromUrl(url, defaultFilename = "document.pdf") { + if (typeof url !== "string") { + return defaultFilename; + } + if (isDataScheme(url)) { + warn('getPdfFilenameFromUrl: ignore "data:"-URL for performance reasons.'); + return defaultFilename; + } + const getURL = urlString => { + try { + return new URL(urlString); + } catch { + try { + return new URL(decodeURIComponent(urlString)); + } catch { + try { + return new URL(urlString, "https://foo.bar"); + } catch { + try { + return new URL(decodeURIComponent(urlString), "https://foo.bar"); + } catch { + return null; + } + } + } + } + }; + const newURL = getURL(url); + if (!newURL) { + return defaultFilename; + } + const decode = name => { + try { + let decoded = decodeURIComponent(name); + if (decoded.includes("/")) { + decoded = decoded.split("/").at(-1); + if (decoded.test(/^\.pdf$/i)) { + return decoded; + } + return name; + } + return decoded; + } catch { + return name; + } + }; + const pdfRegex = /\.pdf$/i; + const filename = newURL.pathname.split("/").at(-1); + if (pdfRegex.test(filename)) { + return decode(filename); + } + if (newURL.searchParams.size > 0) { + const values = Array.from(newURL.searchParams.values()).reverse(); + for (const value of values) { + if (pdfRegex.test(value)) { + return decode(value); + } + } + const keys = Array.from(newURL.searchParams.keys()).reverse(); + for (const key of keys) { + if (pdfRegex.test(key)) { + return decode(key); + } + } + } + if (newURL.hash) { + const reFilename = /[^/?#=]+\.pdf\b(?!.*\.pdf\b)/i; + const hashFilename = reFilename.exec(newURL.hash); + if (hashFilename) { + return decode(hashFilename[0]); + } + } + return defaultFilename; +} +class StatTimer { + started = Object.create(null); + times = []; + time(name) { + if (name in this.started) { + warn(`Timer is already running for ${name}`); + } + this.started[name] = Date.now(); + } + timeEnd(name) { + if (!(name in this.started)) { + warn(`Timer has not been started for ${name}`); + } + this.times.push({ + name, + start: this.started[name], + end: Date.now() + }); + delete this.started[name]; + } + toString() { + const outBuf = []; + let longest = 0; + for (const { + name + } of this.times) { + longest = Math.max(name.length, longest); + } + for (const { + name, + start, + end + } of this.times) { + outBuf.push(`${name.padEnd(longest)} ${end - start}ms\n`); + } + return outBuf.join(""); + } +} +function isValidFetchUrl(url, baseUrl) { + const res = baseUrl ? URL.parse(url, baseUrl) : URL.parse(url); + return res?.protocol === "http:" || res?.protocol === "https:"; +} +function noContextMenu(e) { + e.preventDefault(); +} +function stopEvent(e) { + e.preventDefault(); + e.stopPropagation(); +} +function deprecated(details) { + console.log("Deprecated API usage: " + details); +} +class PDFDateString { + static #regex; + static toDateObject(input) { + if (input instanceof Date) { + return input; + } + if (!input || typeof input !== "string") { + return null; + } + this.#regex ||= new RegExp("^D:" + "(\\d{4})" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "([Z|+|-])?" + "(\\d{2})?" + "'?" + "(\\d{2})?" + "'?"); + const matches = this.#regex.exec(input); + if (!matches) { + return null; + } + const year = parseInt(matches[1], 10); + let month = parseInt(matches[2], 10); + month = month >= 1 && month <= 12 ? month - 1 : 0; + let day = parseInt(matches[3], 10); + day = day >= 1 && day <= 31 ? day : 1; + let hour = parseInt(matches[4], 10); + hour = hour >= 0 && hour <= 23 ? hour : 0; + let minute = parseInt(matches[5], 10); + minute = minute >= 0 && minute <= 59 ? minute : 0; + let second = parseInt(matches[6], 10); + second = second >= 0 && second <= 59 ? second : 0; + const universalTimeRelation = matches[7] || "Z"; + let offsetHour = parseInt(matches[8], 10); + offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0; + let offsetMinute = parseInt(matches[9], 10) || 0; + offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0; + if (universalTimeRelation === "-") { + hour += offsetHour; + minute += offsetMinute; + } else if (universalTimeRelation === "+") { + hour -= offsetHour; + minute -= offsetMinute; + } + return new Date(Date.UTC(year, month, day, hour, minute, second)); + } +} +function getXfaPageViewport(xfaPage, { + scale = 1, + rotation = 0 +}) { + const { + width, + height + } = xfaPage.attributes.style; + const viewBox = [0, 0, parseInt(width), parseInt(height)]; + return new PageViewport({ + viewBox, + userUnit: 1, + scale, + rotation + }); +} +function getRGB(color) { + if (color.startsWith("#")) { + const colorRGB = parseInt(color.slice(1), 16); + return [(colorRGB & 0xff0000) >> 16, (colorRGB & 0x00ff00) >> 8, colorRGB & 0x0000ff]; + } + if (color.startsWith("rgb(")) { + return color.slice(4, -1).split(",").map(x => parseInt(x)); + } + if (color.startsWith("rgba(")) { + return color.slice(5, -1).split(",").map(x => parseInt(x)).slice(0, 3); + } + warn(`Not a valid color format: "${color}"`); + return [0, 0, 0]; +} +function getColorValues(colors) { + const span = document.createElement("span"); + span.style.visibility = "hidden"; + span.style.colorScheme = "only light"; + document.body.append(span); + for (const name of colors.keys()) { + span.style.color = name; + const computedColor = window.getComputedStyle(span).color; + colors.set(name, getRGB(computedColor)); + } + span.remove(); +} +function getCurrentTransform(ctx) { + const { + a, + b, + c, + d, + e, + f + } = ctx.getTransform(); + return [a, b, c, d, e, f]; +} +function getCurrentTransformInverse(ctx) { + const { + a, + b, + c, + d, + e, + f + } = ctx.getTransform().invertSelf(); + return [a, b, c, d, e, f]; +} +function setLayerDimensions(div, viewport, mustFlip = false, mustRotate = true) { + if (viewport instanceof PageViewport) { + const { + pageWidth, + pageHeight + } = viewport.rawDims; + const { + style + } = div; + const useRound = util_FeatureTest.isCSSRoundSupported; + const w = `var(--total-scale-factor) * ${pageWidth}px`, + h = `var(--total-scale-factor) * ${pageHeight}px`; + const widthStr = useRound ? `round(down, ${w}, var(--scale-round-x))` : `calc(${w})`, + heightStr = useRound ? `round(down, ${h}, var(--scale-round-y))` : `calc(${h})`; + if (!mustFlip || viewport.rotation % 180 === 0) { + style.width = widthStr; + style.height = heightStr; + } else { + style.width = heightStr; + style.height = widthStr; + } + } + if (mustRotate) { + div.setAttribute("data-main-rotation", viewport.rotation); + } +} +class OutputScale { + constructor() { + const { + pixelRatio + } = OutputScale; + this.sx = pixelRatio; + this.sy = pixelRatio; + } + get scaled() { + return this.sx !== 1 || this.sy !== 1; + } + get symmetric() { + return this.sx === this.sy; + } + limitCanvas(width, height, maxPixels, maxDim, capAreaFactor = -1) { + let maxAreaScale = Infinity, + maxWidthScale = Infinity, + maxHeightScale = Infinity; + maxPixels = OutputScale.capPixels(maxPixels, capAreaFactor); + if (maxPixels > 0) { + maxAreaScale = Math.sqrt(maxPixels / (width * height)); + } + if (maxDim !== -1) { + maxWidthScale = maxDim / width; + maxHeightScale = maxDim / height; + } + const maxScale = Math.min(maxAreaScale, maxWidthScale, maxHeightScale); + if (this.sx > maxScale || this.sy > maxScale) { + this.sx = maxScale; + this.sy = maxScale; + return true; + } + return false; + } + static get pixelRatio() { + return globalThis.devicePixelRatio || 1; + } + static capPixels(maxPixels, capAreaFactor) { + if (capAreaFactor >= 0) { + const winPixels = Math.ceil(window.screen.availWidth * window.screen.availHeight * this.pixelRatio ** 2 * (1 + capAreaFactor / 100)); + return maxPixels > 0 ? Math.min(maxPixels, winPixels) : winPixels; + } + return maxPixels; + } +} +const SupportedImageMimeTypes = ["image/apng", "image/avif", "image/bmp", "image/gif", "image/jpeg", "image/png", "image/svg+xml", "image/webp", "image/x-icon"]; +class ColorScheme { + static get isDarkMode() { + return shadow(this, "isDarkMode", !!window?.matchMedia?.("(prefers-color-scheme: dark)").matches); + } +} +class CSSConstants { + static get commentForegroundColor() { + const element = document.createElement("span"); + element.classList.add("comment", "sidebar"); + const { + style + } = element; + style.width = style.height = "0"; + style.display = "none"; + style.color = "var(--comment-fg-color)"; + document.body.append(element); + const { + color + } = window.getComputedStyle(element); + element.remove(); + return shadow(this, "commentForegroundColor", getRGB(color)); + } +} +function applyOpacity(r, g, b, opacity) { + opacity = Math.min(Math.max(opacity ?? 1, 0), 1); + const white = 255 * (1 - opacity); + r = Math.round(r * opacity + white); + g = Math.round(g * opacity + white); + b = Math.round(b * opacity + white); + return [r, g, b]; +} +function RGBToHSL(rgb, output) { + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + const max = Math.max(r, g, b); + const min = Math.min(r, g, b); + const l = (max + min) / 2; + if (max === min) { + output[0] = output[1] = 0; + } else { + const d = max - min; + output[1] = l < 0.5 ? d / (max + min) : d / (2 - max - min); + switch (max) { + case r: + output[0] = ((g - b) / d + (g < b ? 6 : 0)) * 60; + break; + case g: + output[0] = ((b - r) / d + 2) * 60; + break; + case b: + output[0] = ((r - g) / d + 4) * 60; + break; + } + } + output[2] = l; +} +function HSLToRGB(hsl, output) { + const h = hsl[0]; + const s = hsl[1]; + const l = hsl[2]; + const c = (1 - Math.abs(2 * l - 1)) * s; + const x = c * (1 - Math.abs(h / 60 % 2 - 1)); + const m = l - c / 2; + switch (Math.floor(h / 60)) { + case 0: + output[0] = c + m; + output[1] = x + m; + output[2] = m; + break; + case 1: + output[0] = x + m; + output[1] = c + m; + output[2] = m; + break; + case 2: + output[0] = m; + output[1] = c + m; + output[2] = x + m; + break; + case 3: + output[0] = m; + output[1] = x + m; + output[2] = c + m; + break; + case 4: + output[0] = x + m; + output[1] = m; + output[2] = c + m; + break; + case 5: + case 6: + output[0] = c + m; + output[1] = m; + output[2] = x + m; + break; + } +} +function computeLuminance(x) { + return x <= 0.03928 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4; +} +function contrastRatio(hsl1, hsl2, output) { + HSLToRGB(hsl1, output); + output.map(computeLuminance); + const lum1 = 0.2126 * output[0] + 0.7152 * output[1] + 0.0722 * output[2]; + HSLToRGB(hsl2, output); + output.map(computeLuminance); + const lum2 = 0.2126 * output[0] + 0.7152 * output[1] + 0.0722 * output[2]; + return lum1 > lum2 ? (lum1 + 0.05) / (lum2 + 0.05) : (lum2 + 0.05) / (lum1 + 0.05); +} +const contrastCache = new Map(); +function findContrastColor(baseColor, fixedColor) { + const key = baseColor[0] + baseColor[1] * 0x100 + baseColor[2] * 0x10000 + fixedColor[0] * 0x1000000 + fixedColor[1] * 0x100000000 + fixedColor[2] * 0x10000000000; + let cachedValue = contrastCache.get(key); + if (cachedValue) { + return cachedValue; + } + const array = new Float32Array(9); + const output = array.subarray(0, 3); + const baseHSL = array.subarray(3, 6); + RGBToHSL(baseColor, baseHSL); + const fixedHSL = array.subarray(6, 9); + RGBToHSL(fixedColor, fixedHSL); + const isFixedColorDark = fixedHSL[2] < 0.5; + const minContrast = isFixedColorDark ? 12 : 4.5; + baseHSL[2] = isFixedColorDark ? Math.sqrt(baseHSL[2]) : 1 - Math.sqrt(1 - baseHSL[2]); + if (contrastRatio(baseHSL, fixedHSL, output) < minContrast) { + let start, end; + if (isFixedColorDark) { + start = baseHSL[2]; + end = 1; + } else { + start = 0; + end = baseHSL[2]; + } + const PRECISION = 0.005; + while (end - start > PRECISION) { + const mid = baseHSL[2] = (start + end) / 2; + if (isFixedColorDark === contrastRatio(baseHSL, fixedHSL, output) < minContrast) { + start = mid; + } else { + end = mid; + } + } + baseHSL[2] = isFixedColorDark ? end : start; + } + HSLToRGB(baseHSL, output); + cachedValue = Util.makeHexColor(Math.round(output[0] * 255), Math.round(output[1] * 255), Math.round(output[2] * 255)); + contrastCache.set(key, cachedValue); + return cachedValue; +} +function renderRichText({ + html, + dir, + className +}, container) { + const fragment = document.createDocumentFragment(); + if (typeof html === "string") { + const p = document.createElement("p"); + p.dir = dir || "auto"; + const lines = html.split(/(?:\r\n?|\n)/); + for (let i = 0, ii = lines.length; i < ii; ++i) { + const line = lines[i]; + p.append(document.createTextNode(line)); + if (i < ii - 1) { + p.append(document.createElement("br")); + } + } + fragment.append(p); + } else { + XfaLayer.render({ + xfaHtml: html, + div: fragment, + intent: "richText" + }); + } + fragment.firstChild.classList.add("richText", className); + container.append(fragment); +} +function makePathFromDrawOPS(data) { + const path = new Path2D(); + if (!data) { + return path; + } + for (let i = 0, ii = data.length; i < ii;) { + switch (data[i++]) { + case DrawOPS.moveTo: + path.moveTo(data[i++], data[i++]); + break; + case DrawOPS.lineTo: + path.lineTo(data[i++], data[i++]); + break; + case DrawOPS.curveTo: + path.bezierCurveTo(data[i++], data[i++], data[i++], data[i++], data[i++], data[i++]); + break; + case DrawOPS.quadraticCurveTo: + path.quadraticCurveTo(data[i++], data[i++], data[i++], data[i++]); + break; + case DrawOPS.closePath: + path.closePath(); + break; + default: + warn(`Unrecognized drawing path operator: ${data[i - 1]}`); + break; + } + } + return path; +} + +;// ./src/display/editor/toolbar.js + +class EditorToolbar { + #toolbar = null; + #colorPicker = null; + #editor; + #buttons = null; + #altText = null; + #comment = null; + #commentButtonDivider = null; + #signatureDescriptionButton = null; + static #l10nRemove = null; + constructor(editor) { + this.#editor = editor; + EditorToolbar.#l10nRemove ||= Object.freeze({ + freetext: "pdfjs-editor-remove-freetext-button", + highlight: "pdfjs-editor-remove-highlight-button", + ink: "pdfjs-editor-remove-ink-button", + stamp: "pdfjs-editor-remove-stamp-button", + signature: "pdfjs-editor-remove-signature-button" + }); + } + render() { + const editToolbar = this.#toolbar = document.createElement("div"); + editToolbar.classList.add("editToolbar", "hidden"); + editToolbar.setAttribute("role", "toolbar"); + const signal = this.#editor._uiManager._signal; + if (signal instanceof AbortSignal && !signal.aborted) { + editToolbar.addEventListener("contextmenu", noContextMenu, { + signal + }); + editToolbar.addEventListener("pointerdown", EditorToolbar.#pointerDown, { + signal + }); + } + const buttons = this.#buttons = document.createElement("div"); + buttons.className = "buttons"; + editToolbar.append(buttons); + const position = this.#editor.toolbarPosition; + if (position) { + const { + style + } = editToolbar; + const x = this.#editor._uiManager.direction === "ltr" ? 1 - position[0] : position[0]; + style.insetInlineEnd = `${100 * x}%`; + style.top = `calc(${100 * position[1]}% + var(--editor-toolbar-vert-offset))`; + } + return editToolbar; + } + get div() { + return this.#toolbar; + } + static #pointerDown(e) { + e.stopPropagation(); + } + #focusIn(e) { + this.#editor._focusEventsAllowed = false; + stopEvent(e); + } + #focusOut(e) { + this.#editor._focusEventsAllowed = true; + stopEvent(e); + } + #addListenersToElement(element) { + const signal = this.#editor._uiManager._signal; + if (!(signal instanceof AbortSignal) || signal.aborted) { + return false; + } + element.addEventListener("focusin", this.#focusIn.bind(this), { + capture: true, + signal + }); + element.addEventListener("focusout", this.#focusOut.bind(this), { + capture: true, + signal + }); + element.addEventListener("contextmenu", noContextMenu, { + signal + }); + return true; + } + hide() { + this.#toolbar.classList.add("hidden"); + this.#colorPicker?.hideDropdown(); + } + show() { + this.#toolbar.classList.remove("hidden"); + this.#altText?.shown(); + this.#comment?.shown(); + } + addDeleteButton() { + const { + editorType, + _uiManager + } = this.#editor; + const button = document.createElement("button"); + button.classList.add("basic", "deleteButton"); + button.tabIndex = 0; + button.setAttribute("data-l10n-id", EditorToolbar.#l10nRemove[editorType]); + if (this.#addListenersToElement(button)) { + button.addEventListener("click", e => { + _uiManager.delete(); + }, { + signal: _uiManager._signal + }); + } + this.#buttons.append(button); + } + get #divider() { + const divider = document.createElement("div"); + divider.className = "divider"; + return divider; + } + async addAltText(altText) { + const button = await altText.render(); + this.#addListenersToElement(button); + this.#buttons.append(button, this.#divider); + this.#altText = altText; + } + addComment(comment, beforeElement = null) { + if (this.#comment) { + return; + } + const button = comment.renderForToolbar(); + if (!button) { + return; + } + this.#addListenersToElement(button); + const divider = this.#commentButtonDivider = this.#divider; + if (!beforeElement) { + this.#buttons.append(button, divider); + } else { + this.#buttons.insertBefore(button, beforeElement); + this.#buttons.insertBefore(divider, beforeElement); + } + this.#comment = comment; + comment.toolbar = this; + } + addColorPicker(colorPicker) { + if (this.#colorPicker) { + return; + } + this.#colorPicker = colorPicker; + const button = colorPicker.renderButton(); + this.#addListenersToElement(button); + this.#buttons.append(button, this.#divider); + } + async addEditSignatureButton(signatureManager) { + const button = this.#signatureDescriptionButton = await signatureManager.renderEditButton(this.#editor); + this.#addListenersToElement(button); + this.#buttons.append(button, this.#divider); + } + removeButton(name) { + switch (name) { + case "comment": + this.#comment?.removeToolbarCommentButton(); + this.#comment = null; + this.#commentButtonDivider?.remove(); + this.#commentButtonDivider = null; + break; + } + } + async addButton(name, tool) { + switch (name) { + case "colorPicker": + if (tool) { + this.addColorPicker(tool); + } + break; + case "altText": + if (tool) { + await this.addAltText(tool); + } + break; + case "editSignature": + if (tool) { + await this.addEditSignatureButton(tool); + } + break; + case "delete": + this.addDeleteButton(); + break; + case "comment": + if (tool) { + this.addComment(tool); + } + break; + } + } + async addButtonBefore(name, tool, beforeSelector) { + if (!tool && name === "comment") { + return; + } + const beforeElement = this.#buttons.querySelector(beforeSelector); + if (!beforeElement) { + return; + } + if (name === "comment") { + this.addComment(tool, beforeElement); + } + } + updateEditSignatureButton(description) { + if (this.#signatureDescriptionButton) { + this.#signatureDescriptionButton.title = description; + } + } + remove() { + this.#toolbar.remove(); + this.#colorPicker?.destroy(); + this.#colorPicker = null; + } +} +class FloatingToolbar { + #buttons = null; + #toolbar = null; + #uiManager; + constructor(uiManager) { + this.#uiManager = uiManager; + } + #render() { + const editToolbar = this.#toolbar = document.createElement("div"); + editToolbar.className = "editToolbar"; + editToolbar.setAttribute("role", "toolbar"); + const signal = this.#uiManager._signal; + if (signal instanceof AbortSignal && !signal.aborted) { + editToolbar.addEventListener("contextmenu", noContextMenu, { + signal + }); + } + const buttons = this.#buttons = document.createElement("div"); + buttons.className = "buttons"; + editToolbar.append(buttons); + if (this.#uiManager.hasCommentManager()) { + this.#makeButton("commentButton", `pdfjs-comment-floating-button`, "pdfjs-comment-floating-button-label", () => { + this.#uiManager.commentSelection("floating_button"); + }); + } + this.#makeButton("highlightButton", `pdfjs-highlight-floating-button1`, "pdfjs-highlight-floating-button-label", () => { + this.#uiManager.highlightSelection("floating_button"); + }); + return editToolbar; + } + #getLastPoint(boxes, isLTR) { + let lastY = 0; + let lastX = 0; + for (const box of boxes) { + const y = box.y + box.height; + if (y < lastY) { + continue; + } + const x = box.x + (isLTR ? box.width : 0); + if (y > lastY) { + lastX = x; + lastY = y; + continue; + } + if (isLTR) { + if (x > lastX) { + lastX = x; + } + } else if (x < lastX) { + lastX = x; + } + } + return [isLTR ? 1 - lastX : lastX, lastY]; + } + show(parent, boxes, isLTR) { + const [x, y] = this.#getLastPoint(boxes, isLTR); + const { + style + } = this.#toolbar ||= this.#render(); + parent.append(this.#toolbar); + style.insetInlineEnd = `${100 * x}%`; + style.top = `calc(${100 * y}% + var(--editor-toolbar-vert-offset))`; + } + hide() { + this.#toolbar.remove(); + } + #makeButton(buttonClass, l10nId, labelL10nId, clickHandler) { + const button = document.createElement("button"); + button.classList.add("basic", buttonClass); + button.tabIndex = 0; + button.setAttribute("data-l10n-id", l10nId); + const span = document.createElement("span"); + button.append(span); + span.className = "visuallyHidden"; + span.setAttribute("data-l10n-id", labelL10nId); + const signal = this.#uiManager._signal; + if (signal instanceof AbortSignal && !signal.aborted) { + button.addEventListener("contextmenu", noContextMenu, { + signal + }); + button.addEventListener("click", clickHandler, { + signal + }); + } + this.#buttons.append(button); + } +} + +;// ./src/display/editor/tools.js + + + +function bindEvents(obj, element, names) { + for (const name of names) { + element.addEventListener(name, obj[name].bind(obj)); + } +} +class CurrentPointers { + static #pointerId = NaN; + static #pointerIds = null; + static #moveTimestamp = NaN; + static #pointerType = null; + static initializeAndAddPointerId(pointerId) { + (CurrentPointers.#pointerIds ||= new Set()).add(pointerId); + } + static setPointer(pointerType, pointerId) { + CurrentPointers.#pointerId ||= pointerId; + CurrentPointers.#pointerType ??= pointerType; + } + static setTimeStamp(timeStamp) { + CurrentPointers.#moveTimestamp = timeStamp; + } + static isSamePointerId(pointerId) { + return CurrentPointers.#pointerId === pointerId; + } + static isSamePointerIdOrRemove(pointerId) { + if (CurrentPointers.#pointerId === pointerId) { + return true; + } + CurrentPointers.#pointerIds?.delete(pointerId); + return false; + } + static isSamePointerType(pointerType) { + return CurrentPointers.#pointerType === pointerType; + } + static isInitializedAndDifferentPointerType(pointerType) { + return CurrentPointers.#pointerType !== null && !CurrentPointers.isSamePointerType(pointerType); + } + static isSameTimeStamp(timeStamp) { + return CurrentPointers.#moveTimestamp === timeStamp; + } + static isUsingMultiplePointers() { + return CurrentPointers.#pointerIds?.size >= 1; + } + static clearPointerType() { + CurrentPointers.#pointerType = null; + } + static clearPointerIds() { + CurrentPointers.#pointerId = NaN; + CurrentPointers.#pointerIds = null; + } + static clearTimeStamp() { + CurrentPointers.#moveTimestamp = NaN; + } +} +class IdManager { + #id = 0; + get id() { + return `${AnnotationEditorPrefix}${this.#id++}`; + } +} +class ImageManager { + #baseId = getUuid(); + #id = 0; + #cache = null; + static get _isSVGFittingCanvas() { + const svg = `data:image/svg+xml;charset=UTF-8,`; + const canvas = new OffscreenCanvas(1, 3); + const ctx = canvas.getContext("2d", { + willReadFrequently: true + }); + const image = new Image(); + image.src = svg; + const promise = image.decode().then(() => { + ctx.drawImage(image, 0, 0, 1, 1, 0, 0, 1, 3); + return new Uint32Array(ctx.getImageData(0, 0, 1, 1).data.buffer)[0] === 0; + }); + return shadow(this, "_isSVGFittingCanvas", promise); + } + async #get(key, rawData) { + this.#cache ||= new Map(); + let data = this.#cache.get(key); + if (data === null) { + return null; + } + if (data?.bitmap) { + data.refCounter += 1; + return data; + } + try { + data ||= { + bitmap: null, + id: `image_${this.#baseId}_${this.#id++}`, + refCounter: 0, + isSvg: false + }; + let image; + if (typeof rawData === "string") { + data.url = rawData; + image = await fetchData(rawData, "blob"); + } else if (rawData instanceof File) { + image = data.file = rawData; + } else if (rawData instanceof Blob) { + image = rawData; + } + if (image.type === "image/svg+xml") { + const mustRemoveAspectRatioPromise = ImageManager._isSVGFittingCanvas; + const fileReader = new FileReader(); + const imageElement = new Image(); + const imagePromise = new Promise((resolve, reject) => { + imageElement.onload = () => { + data.bitmap = imageElement; + data.isSvg = true; + resolve(); + }; + fileReader.onload = async () => { + const url = data.svgUrl = fileReader.result; + imageElement.src = (await mustRemoveAspectRatioPromise) ? `${url}#svgView(preserveAspectRatio(none))` : url; + }; + imageElement.onerror = fileReader.onerror = reject; + }); + fileReader.readAsDataURL(image); + await imagePromise; + } else { + data.bitmap = await createImageBitmap(image); + } + data.refCounter = 1; + } catch (e) { + warn(e); + data = null; + } + this.#cache.set(key, data); + if (data) { + this.#cache.set(data.id, data); + } + return data; + } + async getFromFile(file) { + const { + lastModified, + name, + size, + type + } = file; + return this.#get(`${lastModified}_${name}_${size}_${type}`, file); + } + async getFromUrl(url) { + return this.#get(url, url); + } + async getFromBlob(id, blobPromise) { + const blob = await blobPromise; + return this.#get(id, blob); + } + async getFromId(id) { + this.#cache ||= new Map(); + const data = this.#cache.get(id); + if (!data) { + return null; + } + if (data.bitmap) { + data.refCounter += 1; + return data; + } + if (data.file) { + return this.getFromFile(data.file); + } + if (data.blobPromise) { + const { + blobPromise + } = data; + delete data.blobPromise; + return this.getFromBlob(data.id, blobPromise); + } + return this.getFromUrl(data.url); + } + getFromCanvas(id, canvas) { + this.#cache ||= new Map(); + let data = this.#cache.get(id); + if (data?.bitmap) { + data.refCounter += 1; + return data; + } + const offscreen = new OffscreenCanvas(canvas.width, canvas.height); + const ctx = offscreen.getContext("2d"); + ctx.drawImage(canvas, 0, 0); + data = { + bitmap: offscreen.transferToImageBitmap(), + id: `image_${this.#baseId}_${this.#id++}`, + refCounter: 1, + isSvg: false + }; + this.#cache.set(id, data); + this.#cache.set(data.id, data); + return data; + } + getSvgUrl(id) { + const data = this.#cache.get(id); + if (!data?.isSvg) { + return null; + } + return data.svgUrl; + } + deleteId(id) { + this.#cache ||= new Map(); + const data = this.#cache.get(id); + if (!data) { + return; + } + data.refCounter -= 1; + if (data.refCounter !== 0) { + return; + } + const { + bitmap + } = data; + if (!data.url && !data.file) { + const canvas = new OffscreenCanvas(bitmap.width, bitmap.height); + const ctx = canvas.getContext("bitmaprenderer"); + ctx.transferFromImageBitmap(bitmap); + data.blobPromise = canvas.convertToBlob(); + } + bitmap.close?.(); + data.bitmap = null; + } + isValidId(id) { + return id.startsWith(`image_${this.#baseId}_`); + } +} +class CommandManager { + #commands = []; + #locked = false; + #maxSize; + #position = -1; + constructor(maxSize = 128) { + this.#maxSize = maxSize; + } + add({ + cmd, + undo, + post, + mustExec, + type = NaN, + overwriteIfSameType = false, + keepUndo = false + }) { + if (mustExec) { + cmd(); + } + if (this.#locked) { + return; + } + const save = { + cmd, + undo, + post, + type + }; + if (this.#position === -1) { + if (this.#commands.length > 0) { + this.#commands.length = 0; + } + this.#position = 0; + this.#commands.push(save); + return; + } + if (overwriteIfSameType && this.#commands[this.#position].type === type) { + if (keepUndo) { + save.undo = this.#commands[this.#position].undo; + } + this.#commands[this.#position] = save; + return; + } + const next = this.#position + 1; + if (next === this.#maxSize) { + this.#commands.splice(0, 1); + } else { + this.#position = next; + if (next < this.#commands.length) { + this.#commands.splice(next); + } + } + this.#commands.push(save); + } + undo() { + if (this.#position === -1) { + return; + } + this.#locked = true; + const { + undo, + post + } = this.#commands[this.#position]; + undo(); + post?.(); + this.#locked = false; + this.#position -= 1; + } + redo() { + if (this.#position < this.#commands.length - 1) { + this.#position += 1; + this.#locked = true; + const { + cmd, + post + } = this.#commands[this.#position]; + cmd(); + post?.(); + this.#locked = false; + } + } + hasSomethingToUndo() { + return this.#position !== -1; + } + hasSomethingToRedo() { + return this.#position < this.#commands.length - 1; + } + cleanType(type) { + if (this.#position === -1) { + return; + } + for (let i = this.#position; i >= 0; i--) { + if (this.#commands[i].type !== type) { + this.#commands.splice(i + 1, this.#position - i); + this.#position = i; + return; + } + } + this.#commands.length = 0; + this.#position = -1; + } + destroy() { + this.#commands = null; + } +} +class KeyboardManager { + constructor(callbacks) { + this.buffer = []; + this.callbacks = new Map(); + this.allKeys = new Set(); + const { + isMac + } = util_FeatureTest.platform; + for (const [keys, callback, options = {}] of callbacks) { + for (const key of keys) { + const isMacKey = key.startsWith("mac+"); + if (isMac && isMacKey) { + this.callbacks.set(key.slice(4), { + callback, + options + }); + this.allKeys.add(key.split("+").at(-1)); + } else if (!isMac && !isMacKey) { + this.callbacks.set(key, { + callback, + options + }); + this.allKeys.add(key.split("+").at(-1)); + } + } + } + } + #serialize(event) { + if (event.altKey) { + this.buffer.push("alt"); + } + if (event.ctrlKey) { + this.buffer.push("ctrl"); + } + if (event.metaKey) { + this.buffer.push("meta"); + } + if (event.shiftKey) { + this.buffer.push("shift"); + } + this.buffer.push(event.key); + const str = this.buffer.join("+"); + this.buffer.length = 0; + return str; + } + exec(self, event) { + if (!this.allKeys.has(event.key)) { + return; + } + const info = this.callbacks.get(this.#serialize(event)); + if (!info) { + return; + } + const { + callback, + options: { + bubbles = false, + args = [], + checker = null + } + } = info; + if (checker && !checker(self, event)) { + return; + } + callback.bind(self, ...args, event)(); + if (!bubbles) { + stopEvent(event); + } + } +} +class ColorManager { + static _colorsMapping = new Map([["CanvasText", [0, 0, 0]], ["Canvas", [255, 255, 255]]]); + get _colors() { + const colors = new Map([["CanvasText", null], ["Canvas", null]]); + getColorValues(colors); + return shadow(this, "_colors", colors); + } + convert(color) { + const rgb = getRGB(color); + if (!window.matchMedia("(forced-colors: active)").matches) { + return rgb; + } + for (const [name, RGB] of this._colors) { + if (RGB.every((x, i) => x === rgb[i])) { + return ColorManager._colorsMapping.get(name); + } + } + return rgb; + } + getHexCode(name) { + const rgb = this._colors.get(name); + if (!rgb) { + return name; + } + return Util.makeHexColor(...rgb); + } +} +class AnnotationEditorUIManager { + #abortController = new AbortController(); + #activeEditor = null; + #allEditableAnnotations = null; + #allEditors = new Map(); + #allLayers = new Map(); + #altTextManager = null; + #annotationStorage = null; + #changedExistingAnnotations = null; + #commandManager = new CommandManager(); + #commentManager = null; + #copyPasteAC = null; + #currentDrawingSession = null; + #currentPageIndex = 0; + #deletedAnnotationsElementIds = new Set(); + #draggingEditors = null; + #editorTypes = null; + #editorsToRescale = new Set(); + _editorUndoBar = null; + #enableHighlightFloatingButton = false; + #enableUpdatedAddImage = false; + #enableNewAltTextWhenAddingImage = false; + #filterFactory = null; + #focusMainContainerTimeoutId = null; + #focusManagerAC = null; + #highlightColors = null; + #highlightWhenShiftUp = false; + #floatingToolbar = null; + #idManager = new IdManager(); + #isEnabled = false; + #isPointerDown = false; + #isWaiting = false; + #keyboardManagerAC = null; + #lastActiveElement = null; + #mainHighlightColorPicker = null; + #missingCanvases = null; + #mlManager = null; + #mode = AnnotationEditorType.NONE; + #selectedEditors = new Set(); + #selectedTextNode = null; + #signatureManager = null; + #pageColors = null; + #showAllStates = null; + #pdfDocument = null; + #previousStates = { + isEditing: false, + isEmpty: true, + hasSomethingToUndo: false, + hasSomethingToRedo: false, + hasSelectedEditor: false, + hasSelectedText: false + }; + #translation = [0, 0]; + #translationTimeoutId = null; + #container = null; + #viewer = null; + #viewerAlert = null; + #updateModeCapability = null; + static TRANSLATE_SMALL = 1; + static TRANSLATE_BIG = 10; + static get _keyboardManager() { + const proto = AnnotationEditorUIManager.prototype; + const arrowChecker = self => self.#container.contains(document.activeElement) && document.activeElement.tagName !== "BUTTON" && self.hasSomethingToControl(); + const textInputChecker = (_self, { + target: el + }) => { + if (el instanceof HTMLInputElement) { + const { + type + } = el; + return type !== "text" && type !== "number"; + } + return true; + }; + const small = this.TRANSLATE_SMALL; + const big = this.TRANSLATE_BIG; + return shadow(this, "_keyboardManager", new KeyboardManager([[["ctrl+a", "mac+meta+a"], proto.selectAll, { + checker: textInputChecker + }], [["ctrl+z", "mac+meta+z"], proto.undo, { + checker: textInputChecker + }], [["ctrl+y", "ctrl+shift+z", "mac+meta+shift+z", "ctrl+shift+Z", "mac+meta+shift+Z"], proto.redo, { + checker: textInputChecker + }], [["Backspace", "alt+Backspace", "ctrl+Backspace", "shift+Backspace", "mac+Backspace", "mac+alt+Backspace", "mac+ctrl+Backspace", "Delete", "ctrl+Delete", "shift+Delete", "mac+Delete"], proto.delete, { + checker: textInputChecker + }], [["Enter", "mac+Enter"], proto.addNewEditorFromKeyboard, { + checker: (self, { + target: el + }) => !(el instanceof HTMLButtonElement) && self.#container.contains(el) && !self.isEnterHandled + }], [[" ", "mac+ "], proto.addNewEditorFromKeyboard, { + checker: (self, { + target: el + }) => !(el instanceof HTMLButtonElement) && self.#container.contains(document.activeElement) + }], [["Escape", "mac+Escape"], proto.unselectAll], [["ArrowLeft", "mac+ArrowLeft"], proto.translateSelectedEditors, { + args: [-small, 0], + checker: arrowChecker + }], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], proto.translateSelectedEditors, { + args: [-big, 0], + checker: arrowChecker + }], [["ArrowRight", "mac+ArrowRight"], proto.translateSelectedEditors, { + args: [small, 0], + checker: arrowChecker + }], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], proto.translateSelectedEditors, { + args: [big, 0], + checker: arrowChecker + }], [["ArrowUp", "mac+ArrowUp"], proto.translateSelectedEditors, { + args: [0, -small], + checker: arrowChecker + }], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], proto.translateSelectedEditors, { + args: [0, -big], + checker: arrowChecker + }], [["ArrowDown", "mac+ArrowDown"], proto.translateSelectedEditors, { + args: [0, small], + checker: arrowChecker + }], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], proto.translateSelectedEditors, { + args: [0, big], + checker: arrowChecker + }]])); + } + constructor(container, viewer, viewerAlert, altTextManager, commentManager, signatureManager, eventBus, pdfDocument, pageColors, highlightColors, enableHighlightFloatingButton, enableUpdatedAddImage, enableNewAltTextWhenAddingImage, mlManager, editorUndoBar, supportsPinchToZoom) { + const signal = this._signal = this.#abortController.signal; + this.#container = container; + this.#viewer = viewer; + this.#viewerAlert = viewerAlert; + this.#altTextManager = altTextManager; + this.#commentManager = commentManager; + this.#signatureManager = signatureManager; + this.#pdfDocument = pdfDocument; + this._eventBus = eventBus; + eventBus._on("editingaction", this.onEditingAction.bind(this), { + signal + }); + eventBus._on("pagechanging", this.onPageChanging.bind(this), { + signal + }); + eventBus._on("scalechanging", this.onScaleChanging.bind(this), { + signal + }); + eventBus._on("rotationchanging", this.onRotationChanging.bind(this), { + signal + }); + eventBus._on("setpreference", this.onSetPreference.bind(this), { + signal + }); + eventBus._on("switchannotationeditorparams", evt => this.updateParams(evt.type, evt.value), { + signal + }); + window.addEventListener("pointerdown", () => { + this.#isPointerDown = true; + }, { + capture: true, + signal + }); + window.addEventListener("pointerup", () => { + this.#isPointerDown = false; + }, { + capture: true, + signal + }); + this.#addSelectionListener(); + this.#addDragAndDropListeners(); + this.#addKeyboardManager(); + this.#annotationStorage = pdfDocument.annotationStorage; + this.#filterFactory = pdfDocument.filterFactory; + this.#pageColors = pageColors; + this.#highlightColors = highlightColors || null; + this.#enableHighlightFloatingButton = enableHighlightFloatingButton; + this.#enableUpdatedAddImage = enableUpdatedAddImage; + this.#enableNewAltTextWhenAddingImage = enableNewAltTextWhenAddingImage; + this.#mlManager = mlManager || null; + this.viewParameters = { + realScale: PixelsPerInch.PDF_TO_CSS_UNITS, + rotation: 0 + }; + this.isShiftKeyDown = false; + this._editorUndoBar = editorUndoBar || null; + this._supportsPinchToZoom = supportsPinchToZoom !== false; + commentManager?.setSidebarUiManager(this); + } + destroy() { + this.#updateModeCapability?.resolve(); + this.#updateModeCapability = null; + this.#abortController?.abort(); + this.#abortController = null; + this._signal = null; + for (const layer of this.#allLayers.values()) { + layer.destroy(); + } + this.#allLayers.clear(); + this.#allEditors.clear(); + this.#editorsToRescale.clear(); + this.#missingCanvases?.clear(); + this.#activeEditor = null; + this.#selectedEditors.clear(); + this.#commandManager.destroy(); + this.#altTextManager?.destroy(); + this.#commentManager?.destroy(); + this.#signatureManager?.destroy(); + this.#floatingToolbar?.hide(); + this.#floatingToolbar = null; + this.#mainHighlightColorPicker?.destroy(); + this.#mainHighlightColorPicker = null; + this.#allEditableAnnotations = null; + if (this.#focusMainContainerTimeoutId) { + clearTimeout(this.#focusMainContainerTimeoutId); + this.#focusMainContainerTimeoutId = null; + } + if (this.#translationTimeoutId) { + clearTimeout(this.#translationTimeoutId); + this.#translationTimeoutId = null; + } + this._editorUndoBar?.destroy(); + this.#pdfDocument = null; + } + combinedSignal(ac) { + return AbortSignal.any([this._signal, ac.signal]); + } + get mlManager() { + return this.#mlManager; + } + get useNewAltTextFlow() { + return this.#enableUpdatedAddImage; + } + get useNewAltTextWhenAddingImage() { + return this.#enableNewAltTextWhenAddingImage; + } + get hcmFilter() { + return shadow(this, "hcmFilter", this.#pageColors ? this.#filterFactory.addHCMFilter(this.#pageColors.foreground, this.#pageColors.background) : "none"); + } + get direction() { + return shadow(this, "direction", getComputedStyle(this.#container).direction); + } + get _highlightColors() { + return shadow(this, "_highlightColors", this.#highlightColors ? new Map(this.#highlightColors.split(",").map(pair => { + pair = pair.split("=").map(x => x.trim()); + pair[1] = pair[1].toUpperCase(); + return pair; + })) : null); + } + get highlightColors() { + const { + _highlightColors + } = this; + if (!_highlightColors) { + return shadow(this, "highlightColors", null); + } + const map = new Map(); + const hasHCM = !!this.#pageColors; + for (const [name, color] of _highlightColors) { + const isNameForHCM = name.endsWith("_HCM"); + if (hasHCM && isNameForHCM) { + map.set(name.replace("_HCM", ""), color); + continue; + } + if (!hasHCM && !isNameForHCM) { + map.set(name, color); + } + } + return shadow(this, "highlightColors", map); + } + get highlightColorNames() { + return shadow(this, "highlightColorNames", this.highlightColors ? new Map(Array.from(this.highlightColors, e => e.reverse())) : null); + } + getNonHCMColor(color) { + if (!this._highlightColors) { + return color; + } + const colorName = this.highlightColorNames.get(color); + return this._highlightColors.get(colorName) || color; + } + getNonHCMColorName(color) { + return this.highlightColorNames.get(color) || color; + } + setCurrentDrawingSession(layer) { + if (layer) { + this.unselectAll(); + this.disableUserSelect(true); + } else { + this.disableUserSelect(false); + } + this.#currentDrawingSession = layer; + } + setMainHighlightColorPicker(colorPicker) { + this.#mainHighlightColorPicker = colorPicker; + } + editAltText(editor, firstTime = false) { + this.#altTextManager?.editAltText(this, editor, firstTime); + } + hasCommentManager() { + return !!this.#commentManager; + } + editComment(editor, posX, posY, options) { + this.#commentManager?.showDialog(this, editor, posX, posY, options); + } + selectComment(pageIndex, uid) { + const layer = this.#allLayers.get(pageIndex); + const editor = layer?.getEditorByUID(uid); + editor?.toggleComment(true, true); + } + updateComment(editor) { + this.#commentManager?.updateComment(editor.getData()); + } + updatePopupColor(editor) { + this.#commentManager?.updatePopupColor(editor); + } + removeComment(editor) { + this.#commentManager?.removeComments([editor.uid]); + } + toggleComment(editor, isSelected, visibility = undefined) { + this.#commentManager?.toggleCommentPopup(editor, isSelected, visibility); + } + makeCommentColor(color, opacity) { + return color && this.#commentManager?.makeCommentColor(color, opacity) || null; + } + getCommentDialogElement() { + return this.#commentManager?.dialogElement || null; + } + async waitForEditorsRendered(pageNumber) { + if (this.#allLayers.has(pageNumber - 1)) { + return; + } + const { + resolve, + promise + } = Promise.withResolvers(); + const onEditorsRendered = evt => { + if (evt.pageNumber === pageNumber) { + this._eventBus._off("editorsrendered", onEditorsRendered); + resolve(); + } + }; + this._eventBus.on("editorsrendered", onEditorsRendered); + await promise; + } + getSignature(editor) { + this.#signatureManager?.getSignature({ + uiManager: this, + editor + }); + } + get signatureManager() { + return this.#signatureManager; + } + switchToMode(mode, callback) { + this._eventBus.on("annotationeditormodechanged", callback, { + once: true, + signal: this._signal + }); + this._eventBus.dispatch("showannotationeditorui", { + source: this, + mode + }); + } + setPreference(name, value) { + this._eventBus.dispatch("setpreference", { + source: this, + name, + value + }); + } + onSetPreference({ + name, + value + }) { + switch (name) { + case "enableNewAltTextWhenAddingImage": + this.#enableNewAltTextWhenAddingImage = value; + break; + } + } + onPageChanging({ + pageNumber + }) { + this.#currentPageIndex = pageNumber - 1; + } + focusMainContainer() { + this.#container.focus(); + } + findParent(x, y) { + for (const layer of this.#allLayers.values()) { + const { + x: layerX, + y: layerY, + width, + height + } = layer.div.getBoundingClientRect(); + if (x >= layerX && x <= layerX + width && y >= layerY && y <= layerY + height) { + return layer; + } + } + return null; + } + disableUserSelect(value = false) { + this.#viewer.classList.toggle("noUserSelect", value); + } + addShouldRescale(editor) { + this.#editorsToRescale.add(editor); + } + removeShouldRescale(editor) { + this.#editorsToRescale.delete(editor); + } + onScaleChanging({ + scale + }) { + this.commitOrRemove(); + this.viewParameters.realScale = scale * PixelsPerInch.PDF_TO_CSS_UNITS; + for (const editor of this.#editorsToRescale) { + editor.onScaleChanging(); + } + this.#currentDrawingSession?.onScaleChanging(); + } + onRotationChanging({ + pagesRotation + }) { + this.commitOrRemove(); + this.viewParameters.rotation = pagesRotation; + } + #getAnchorElementForSelection({ + anchorNode + }) { + return anchorNode.nodeType === Node.TEXT_NODE ? anchorNode.parentElement : anchorNode; + } + #getLayerForTextLayer(textLayer) { + const { + currentLayer + } = this; + if (currentLayer.hasTextLayer(textLayer)) { + return currentLayer; + } + for (const layer of this.#allLayers.values()) { + if (layer.hasTextLayer(textLayer)) { + return layer; + } + } + return null; + } + highlightSelection(methodOfCreation = "", comment = false) { + const selection = document.getSelection(); + if (!selection || selection.isCollapsed) { + return; + } + const { + anchorNode, + anchorOffset, + focusNode, + focusOffset + } = selection; + const text = selection.toString(); + const anchorElement = this.#getAnchorElementForSelection(selection); + const textLayer = anchorElement.closest(".textLayer"); + const boxes = this.getSelectionBoxes(textLayer); + if (!boxes) { + return; + } + selection.empty(); + const layer = this.#getLayerForTextLayer(textLayer); + const isNoneMode = this.#mode === AnnotationEditorType.NONE; + const callback = () => { + const editor = layer?.createAndAddNewEditor({ + x: 0, + y: 0 + }, false, { + methodOfCreation, + boxes, + anchorNode, + anchorOffset, + focusNode, + focusOffset, + text + }); + if (isNoneMode) { + this.showAllEditors("highlight", true, true); + } + if (comment) { + editor?.editComment(); + } + }; + if (isNoneMode) { + this.switchToMode(AnnotationEditorType.HIGHLIGHT, callback); + return; + } + callback(); + } + commentSelection(methodOfCreation = "") { + this.highlightSelection(methodOfCreation, true); + } + #displayFloatingToolbar() { + const selection = document.getSelection(); + if (!selection || selection.isCollapsed) { + return; + } + const anchorElement = this.#getAnchorElementForSelection(selection); + const textLayer = anchorElement.closest(".textLayer"); + const boxes = this.getSelectionBoxes(textLayer); + if (!boxes) { + return; + } + this.#floatingToolbar ||= new FloatingToolbar(this); + this.#floatingToolbar.show(textLayer, boxes, this.direction === "ltr"); + } + getAndRemoveDataFromAnnotationStorage(annotationId) { + if (!this.#annotationStorage) { + return null; + } + const key = `${AnnotationEditorPrefix}${annotationId}`; + const storedValue = this.#annotationStorage.getRawValue(key); + if (storedValue) { + this.#annotationStorage.remove(key); + } + return storedValue; + } + addToAnnotationStorage(editor) { + if (!editor.isEmpty() && this.#annotationStorage && !this.#annotationStorage.has(editor.id)) { + this.#annotationStorage.setValue(editor.id, editor); + } + } + a11yAlert(messageId, args = null) { + const viewerAlert = this.#viewerAlert; + if (!viewerAlert) { + return; + } + viewerAlert.setAttribute("data-l10n-id", messageId); + if (args) { + viewerAlert.setAttribute("data-l10n-args", JSON.stringify(args)); + } else { + viewerAlert.removeAttribute("data-l10n-args"); + } + } + #selectionChange() { + const selection = document.getSelection(); + if (!selection || selection.isCollapsed) { + if (this.#selectedTextNode) { + this.#floatingToolbar?.hide(); + this.#selectedTextNode = null; + this.#dispatchUpdateStates({ + hasSelectedText: false + }); + } + return; + } + const { + anchorNode + } = selection; + if (anchorNode === this.#selectedTextNode) { + return; + } + const anchorElement = this.#getAnchorElementForSelection(selection); + const textLayer = anchorElement.closest(".textLayer"); + if (!textLayer) { + if (this.#selectedTextNode) { + this.#floatingToolbar?.hide(); + this.#selectedTextNode = null; + this.#dispatchUpdateStates({ + hasSelectedText: false + }); + } + return; + } + this.#floatingToolbar?.hide(); + this.#selectedTextNode = anchorNode; + this.#dispatchUpdateStates({ + hasSelectedText: true + }); + if (this.#mode !== AnnotationEditorType.HIGHLIGHT && this.#mode !== AnnotationEditorType.NONE) { + return; + } + if (this.#mode === AnnotationEditorType.HIGHLIGHT) { + this.showAllEditors("highlight", true, true); + } + this.#highlightWhenShiftUp = this.isShiftKeyDown; + if (!this.isShiftKeyDown) { + const activeLayer = this.#mode === AnnotationEditorType.HIGHLIGHT ? this.#getLayerForTextLayer(textLayer) : null; + activeLayer?.toggleDrawing(); + if (this.#isPointerDown) { + const ac = new AbortController(); + const signal = this.combinedSignal(ac); + const pointerup = e => { + if (e.type === "pointerup" && e.button !== 0) { + return; + } + ac.abort(); + activeLayer?.toggleDrawing(true); + if (e.type === "pointerup") { + this.#onSelectEnd("main_toolbar"); + } + }; + window.addEventListener("pointerup", pointerup, { + signal + }); + window.addEventListener("blur", pointerup, { + signal + }); + } else { + activeLayer?.toggleDrawing(true); + this.#onSelectEnd("main_toolbar"); + } + } + } + #onSelectEnd(methodOfCreation = "") { + if (this.#mode === AnnotationEditorType.HIGHLIGHT) { + this.highlightSelection(methodOfCreation); + } else if (this.#enableHighlightFloatingButton) { + this.#displayFloatingToolbar(); + } + } + #addSelectionListener() { + document.addEventListener("selectionchange", this.#selectionChange.bind(this), { + signal: this._signal + }); + } + #addFocusManager() { + if (this.#focusManagerAC) { + return; + } + this.#focusManagerAC = new AbortController(); + const signal = this.combinedSignal(this.#focusManagerAC); + window.addEventListener("focus", this.focus.bind(this), { + signal + }); + window.addEventListener("blur", this.blur.bind(this), { + signal + }); + } + #removeFocusManager() { + this.#focusManagerAC?.abort(); + this.#focusManagerAC = null; + } + blur() { + this.isShiftKeyDown = false; + if (this.#highlightWhenShiftUp) { + this.#highlightWhenShiftUp = false; + this.#onSelectEnd("main_toolbar"); + } + if (!this.hasSelection) { + return; + } + const { + activeElement + } = document; + for (const editor of this.#selectedEditors) { + if (editor.div.contains(activeElement)) { + this.#lastActiveElement = [editor, activeElement]; + editor._focusEventsAllowed = false; + break; + } + } + } + focus() { + if (!this.#lastActiveElement) { + return; + } + const [lastEditor, lastActiveElement] = this.#lastActiveElement; + this.#lastActiveElement = null; + lastActiveElement.addEventListener("focusin", () => { + lastEditor._focusEventsAllowed = true; + }, { + once: true, + signal: this._signal + }); + lastActiveElement.focus(); + } + #addKeyboardManager() { + if (this.#keyboardManagerAC) { + return; + } + this.#keyboardManagerAC = new AbortController(); + const signal = this.combinedSignal(this.#keyboardManagerAC); + window.addEventListener("keydown", this.keydown.bind(this), { + signal + }); + window.addEventListener("keyup", this.keyup.bind(this), { + signal + }); + } + #removeKeyboardManager() { + this.#keyboardManagerAC?.abort(); + this.#keyboardManagerAC = null; + } + #addCopyPasteListeners() { + if (this.#copyPasteAC) { + return; + } + this.#copyPasteAC = new AbortController(); + const signal = this.combinedSignal(this.#copyPasteAC); + document.addEventListener("copy", this.copy.bind(this), { + signal + }); + document.addEventListener("cut", this.cut.bind(this), { + signal + }); + document.addEventListener("paste", this.paste.bind(this), { + signal + }); + } + #removeCopyPasteListeners() { + this.#copyPasteAC?.abort(); + this.#copyPasteAC = null; + } + #addDragAndDropListeners() { + const signal = this._signal; + document.addEventListener("dragover", this.dragOver.bind(this), { + signal + }); + document.addEventListener("drop", this.drop.bind(this), { + signal + }); + } + addEditListeners() { + this.#addKeyboardManager(); + this.setEditingState(true); + } + removeEditListeners() { + this.#removeKeyboardManager(); + this.setEditingState(false); + } + dragOver(event) { + for (const { + type + } of event.dataTransfer.items) { + for (const editorType of this.#editorTypes) { + if (editorType.isHandlingMimeForPasting(type)) { + event.dataTransfer.dropEffect = "copy"; + event.preventDefault(); + return; + } + } + } + } + drop(event) { + for (const item of event.dataTransfer.items) { + for (const editorType of this.#editorTypes) { + if (editorType.isHandlingMimeForPasting(item.type)) { + editorType.paste(item, this.currentLayer); + event.preventDefault(); + return; + } + } + } + } + copy(event) { + event.preventDefault(); + this.#activeEditor?.commitOrRemove(); + if (!this.hasSelection) { + return; + } + const editors = []; + for (const editor of this.#selectedEditors) { + const serialized = editor.serialize(true); + if (serialized) { + editors.push(serialized); + } + } + if (editors.length === 0) { + return; + } + event.clipboardData.setData("application/pdfjs", JSON.stringify(editors)); + } + cut(event) { + this.copy(event); + this.delete(); + } + async paste(event) { + event.preventDefault(); + const { + clipboardData + } = event; + for (const item of clipboardData.items) { + for (const editorType of this.#editorTypes) { + if (editorType.isHandlingMimeForPasting(item.type)) { + editorType.paste(item, this.currentLayer); + return; + } + } + } + let data = clipboardData.getData("application/pdfjs"); + if (!data) { + return; + } + try { + data = JSON.parse(data); + } catch (ex) { + warn(`paste: "${ex.message}".`); + return; + } + if (!Array.isArray(data)) { + return; + } + this.unselectAll(); + const layer = this.currentLayer; + try { + const newEditors = []; + for (const editor of data) { + const deserializedEditor = await layer.deserialize(editor); + if (!deserializedEditor) { + return; + } + newEditors.push(deserializedEditor); + } + const cmd = () => { + for (const editor of newEditors) { + this.#addEditorToLayer(editor); + } + this.#selectEditors(newEditors); + }; + const undo = () => { + for (const editor of newEditors) { + editor.remove(); + } + }; + this.addCommands({ + cmd, + undo, + mustExec: true + }); + } catch (ex) { + warn(`paste: "${ex.message}".`); + } + } + keydown(event) { + if (!this.isShiftKeyDown && event.key === "Shift") { + this.isShiftKeyDown = true; + } + if (this.#mode !== AnnotationEditorType.NONE && !this.isEditorHandlingKeyboard) { + AnnotationEditorUIManager._keyboardManager.exec(this, event); + } + } + keyup(event) { + if (this.isShiftKeyDown && event.key === "Shift") { + this.isShiftKeyDown = false; + if (this.#highlightWhenShiftUp) { + this.#highlightWhenShiftUp = false; + this.#onSelectEnd("main_toolbar"); + } + } + } + onEditingAction({ + name + }) { + switch (name) { + case "undo": + case "redo": + case "delete": + case "selectAll": + this[name](); + break; + case "highlightSelection": + this.highlightSelection("context_menu"); + break; + case "commentSelection": + this.commentSelection("context_menu"); + break; + } + } + #dispatchUpdateStates(details) { + const hasChanged = Object.entries(details).some(([key, value]) => this.#previousStates[key] !== value); + if (hasChanged) { + this._eventBus.dispatch("annotationeditorstateschanged", { + source: this, + details: Object.assign(this.#previousStates, details) + }); + if (this.#mode === AnnotationEditorType.HIGHLIGHT && details.hasSelectedEditor === false) { + this.#dispatchUpdateUI([[AnnotationEditorParamsType.HIGHLIGHT_FREE, true]]); + } + } + } + #dispatchUpdateUI(details) { + this._eventBus.dispatch("annotationeditorparamschanged", { + source: this, + details + }); + } + setEditingState(isEditing) { + if (isEditing) { + this.#addFocusManager(); + this.#addCopyPasteListeners(); + this.#dispatchUpdateStates({ + isEditing: this.#mode !== AnnotationEditorType.NONE, + isEmpty: this.#isEmpty(), + hasSomethingToUndo: this.#commandManager.hasSomethingToUndo(), + hasSomethingToRedo: this.#commandManager.hasSomethingToRedo(), + hasSelectedEditor: false + }); + } else { + this.#removeFocusManager(); + this.#removeCopyPasteListeners(); + this.#dispatchUpdateStates({ + isEditing: false + }); + this.disableUserSelect(false); + } + } + registerEditorTypes(types) { + if (this.#editorTypes) { + return; + } + this.#editorTypes = types; + for (const editorType of this.#editorTypes) { + this.#dispatchUpdateUI(editorType.defaultPropertiesToUpdate); + } + } + getId() { + return this.#idManager.id; + } + get currentLayer() { + return this.#allLayers.get(this.#currentPageIndex); + } + getLayer(pageIndex) { + return this.#allLayers.get(pageIndex); + } + get currentPageIndex() { + return this.#currentPageIndex; + } + addLayer(layer) { + this.#allLayers.set(layer.pageIndex, layer); + if (this.#isEnabled) { + layer.enable(); + } else { + layer.disable(); + } + } + removeLayer(layer) { + this.#allLayers.delete(layer.pageIndex); + } + async updateMode(mode, editId = null, isFromKeyboard = false, mustEnterInEditMode = false, editComment = false) { + if (this.#mode === mode) { + return; + } + if (this.#updateModeCapability) { + await this.#updateModeCapability.promise; + if (!this.#updateModeCapability) { + return; + } + } + this.#updateModeCapability = Promise.withResolvers(); + this.#currentDrawingSession?.commitOrRemove(); + if (this.#mode === AnnotationEditorType.POPUP) { + this.#commentManager?.hideSidebar(); + } + this.#commentManager?.destroyPopup(); + this.#mode = mode; + if (mode === AnnotationEditorType.NONE) { + this.setEditingState(false); + this.#disableAll(); + for (const editor of this.#allEditors.values()) { + editor.hideStandaloneCommentButton(); + } + this._editorUndoBar?.hide(); + this.toggleComment(null); + this.#updateModeCapability.resolve(); + return; + } + for (const editor of this.#allEditors.values()) { + editor.addStandaloneCommentButton(); + } + if (mode === AnnotationEditorType.SIGNATURE) { + await this.#signatureManager?.loadSignatures(); + } + this.setEditingState(true); + await this.#enableAll(); + this.unselectAll(); + for (const layer of this.#allLayers.values()) { + layer.updateMode(mode); + } + if (mode === AnnotationEditorType.POPUP) { + this.#allEditableAnnotations ||= await this.#pdfDocument.getAnnotationsByType(new Set(this.#editorTypes.map(editorClass => editorClass._editorType))); + const elementIds = new Set(); + const allComments = []; + for (const editor of this.#allEditors.values()) { + const { + annotationElementId, + hasComment, + deleted + } = editor; + if (annotationElementId) { + elementIds.add(annotationElementId); + } + if (hasComment && !deleted) { + allComments.push(editor.getData()); + } + } + for (const annotation of this.#allEditableAnnotations) { + const { + id, + popupRef, + contentsObj + } = annotation; + if (popupRef && contentsObj?.str && !elementIds.has(id) && !this.#deletedAnnotationsElementIds.has(id)) { + allComments.push(annotation); + } + } + this.#commentManager?.showSidebar(allComments); + } + if (!editId) { + if (isFromKeyboard) { + this.addNewEditorFromKeyboard(); + } + this.#updateModeCapability.resolve(); + return; + } + for (const editor of this.#allEditors.values()) { + if (editor.uid === editId) { + this.setSelected(editor); + if (editComment) { + editor.editComment(); + } else if (mustEnterInEditMode) { + editor.enterInEditMode(); + } else { + editor.focus(); + } + } else { + editor.unselect(); + } + } + this.#updateModeCapability.resolve(); + } + addNewEditorFromKeyboard() { + if (this.currentLayer.canCreateNewEmptyEditor()) { + this.currentLayer.addNewEditor(); + } + } + updateToolbar(options) { + if (options.mode === this.#mode) { + return; + } + this._eventBus.dispatch("switchannotationeditormode", { + source: this, + ...options + }); + } + updateParams(type, value) { + if (!this.#editorTypes) { + return; + } + switch (type) { + case AnnotationEditorParamsType.CREATE: + this.currentLayer.addNewEditor(value); + return; + case AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL: + this._eventBus.dispatch("reporttelemetry", { + source: this, + details: { + type: "editing", + data: { + type: "highlight", + action: "toggle_visibility" + } + } + }); + (this.#showAllStates ||= new Map()).set(type, value); + this.showAllEditors("highlight", value); + break; + } + if (this.hasSelection) { + for (const editor of this.#selectedEditors) { + editor.updateParams(type, value); + } + } else { + for (const editorType of this.#editorTypes) { + editorType.updateDefaultParams(type, value); + } + } + } + showAllEditors(type, visible, updateButton = false) { + for (const editor of this.#allEditors.values()) { + if (editor.editorType === type) { + editor.show(visible); + } + } + const state = this.#showAllStates?.get(AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL) ?? true; + if (state !== visible) { + this.#dispatchUpdateUI([[AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL, visible]]); + } + } + enableWaiting(mustWait = false) { + if (this.#isWaiting === mustWait) { + return; + } + this.#isWaiting = mustWait; + for (const layer of this.#allLayers.values()) { + if (mustWait) { + layer.disableClick(); + } else { + layer.enableClick(); + } + layer.div.classList.toggle("waiting", mustWait); + } + } + async #enableAll() { + if (!this.#isEnabled) { + this.#isEnabled = true; + const promises = []; + for (const layer of this.#allLayers.values()) { + promises.push(layer.enable()); + } + await Promise.all(promises); + for (const editor of this.#allEditors.values()) { + editor.enable(); + } + } + } + #disableAll() { + this.unselectAll(); + if (this.#isEnabled) { + this.#isEnabled = false; + for (const layer of this.#allLayers.values()) { + layer.disable(); + } + for (const editor of this.#allEditors.values()) { + editor.disable(); + } + } + } + *getEditors(pageIndex) { + for (const editor of this.#allEditors.values()) { + if (editor.pageIndex === pageIndex) { + yield editor; + } + } + } + getEditor(id) { + return this.#allEditors.get(id); + } + addEditor(editor) { + this.#allEditors.set(editor.id, editor); + } + removeEditor(editor) { + if (editor.div.contains(document.activeElement)) { + if (this.#focusMainContainerTimeoutId) { + clearTimeout(this.#focusMainContainerTimeoutId); + } + this.#focusMainContainerTimeoutId = setTimeout(() => { + this.focusMainContainer(); + this.#focusMainContainerTimeoutId = null; + }, 0); + } + this.#allEditors.delete(editor.id); + if (editor.annotationElementId) { + this.#missingCanvases?.delete(editor.annotationElementId); + } + this.unselect(editor); + if (!editor.annotationElementId || !this.#deletedAnnotationsElementIds.has(editor.annotationElementId)) { + this.#annotationStorage?.remove(editor.id); + } + } + addDeletedAnnotationElement(editor) { + this.#deletedAnnotationsElementIds.add(editor.annotationElementId); + this.addChangedExistingAnnotation(editor); + editor.deleted = true; + } + isDeletedAnnotationElement(annotationElementId) { + return this.#deletedAnnotationsElementIds.has(annotationElementId); + } + removeDeletedAnnotationElement(editor) { + this.#deletedAnnotationsElementIds.delete(editor.annotationElementId); + this.removeChangedExistingAnnotation(editor); + editor.deleted = false; + } + #addEditorToLayer(editor) { + const layer = this.#allLayers.get(editor.pageIndex); + if (layer) { + layer.addOrRebuild(editor); + } else { + this.addEditor(editor); + this.addToAnnotationStorage(editor); + } + } + setActiveEditor(editor) { + if (this.#activeEditor === editor) { + return; + } + this.#activeEditor = editor; + if (editor) { + this.#dispatchUpdateUI(editor.propertiesToUpdate); + } + } + get #lastSelectedEditor() { + let ed = null; + for (ed of this.#selectedEditors) {} + return ed; + } + updateUI(editor) { + if (this.#lastSelectedEditor === editor) { + this.#dispatchUpdateUI(editor.propertiesToUpdate); + } + } + updateUIForDefaultProperties(editorType) { + this.#dispatchUpdateUI(editorType.defaultPropertiesToUpdate); + } + toggleSelected(editor) { + if (this.#selectedEditors.has(editor)) { + this.#selectedEditors.delete(editor); + editor.unselect(); + this.#dispatchUpdateStates({ + hasSelectedEditor: this.hasSelection + }); + return; + } + this.#selectedEditors.add(editor); + editor.select(); + this.#dispatchUpdateUI(editor.propertiesToUpdate); + this.#dispatchUpdateStates({ + hasSelectedEditor: true + }); + } + setSelected(editor) { + this.updateToolbar({ + mode: editor.mode, + editId: editor.uid + }); + this.#currentDrawingSession?.commitOrRemove(); + for (const ed of this.#selectedEditors) { + if (ed !== editor) { + ed.unselect(); + } + } + this.#selectedEditors.clear(); + this.#selectedEditors.add(editor); + editor.select(); + this.#dispatchUpdateUI(editor.propertiesToUpdate); + this.#dispatchUpdateStates({ + hasSelectedEditor: true + }); + } + isSelected(editor) { + return this.#selectedEditors.has(editor); + } + get firstSelectedEditor() { + return this.#selectedEditors.values().next().value; + } + unselect(editor) { + editor.unselect(); + this.#selectedEditors.delete(editor); + this.#dispatchUpdateStates({ + hasSelectedEditor: this.hasSelection + }); + } + get hasSelection() { + return this.#selectedEditors.size !== 0; + } + get isEnterHandled() { + return this.#selectedEditors.size === 1 && this.firstSelectedEditor.isEnterHandled; + } + undo() { + this.#commandManager.undo(); + this.#dispatchUpdateStates({ + hasSomethingToUndo: this.#commandManager.hasSomethingToUndo(), + hasSomethingToRedo: true, + isEmpty: this.#isEmpty() + }); + this._editorUndoBar?.hide(); + } + redo() { + this.#commandManager.redo(); + this.#dispatchUpdateStates({ + hasSomethingToUndo: true, + hasSomethingToRedo: this.#commandManager.hasSomethingToRedo(), + isEmpty: this.#isEmpty() + }); + } + addCommands(params) { + this.#commandManager.add(params); + this.#dispatchUpdateStates({ + hasSomethingToUndo: true, + hasSomethingToRedo: false, + isEmpty: this.#isEmpty() + }); + } + cleanUndoStack(type) { + this.#commandManager.cleanType(type); + } + #isEmpty() { + if (this.#allEditors.size === 0) { + return true; + } + if (this.#allEditors.size === 1) { + for (const editor of this.#allEditors.values()) { + return editor.isEmpty(); + } + } + return false; + } + delete() { + this.commitOrRemove(); + const drawingEditor = this.currentLayer?.endDrawingSession(true); + if (!this.hasSelection && !drawingEditor) { + return; + } + const editors = drawingEditor ? [drawingEditor] : [...this.#selectedEditors]; + const cmd = () => { + this._editorUndoBar?.show(undo, editors.length === 1 ? editors[0].editorType : editors.length); + for (const editor of editors) { + editor.remove(); + } + }; + const undo = () => { + for (const editor of editors) { + this.#addEditorToLayer(editor); + } + }; + this.addCommands({ + cmd, + undo, + mustExec: true + }); + } + commitOrRemove() { + this.#activeEditor?.commitOrRemove(); + } + hasSomethingToControl() { + return this.#activeEditor || this.hasSelection; + } + #selectEditors(editors) { + for (const editor of this.#selectedEditors) { + editor.unselect(); + } + this.#selectedEditors.clear(); + for (const editor of editors) { + if (editor.isEmpty()) { + continue; + } + this.#selectedEditors.add(editor); + editor.select(); + } + this.#dispatchUpdateStates({ + hasSelectedEditor: this.hasSelection + }); + } + selectAll() { + for (const editor of this.#selectedEditors) { + editor.commit(); + } + this.#selectEditors(this.#allEditors.values()); + } + unselectAll() { + if (this.#activeEditor) { + this.#activeEditor.commitOrRemove(); + if (this.#mode !== AnnotationEditorType.NONE) { + return; + } + } + if (this.#currentDrawingSession?.commitOrRemove()) { + return; + } + if (!this.hasSelection) { + return; + } + for (const editor of this.#selectedEditors) { + editor.unselect(); + } + this.#selectedEditors.clear(); + this.#dispatchUpdateStates({ + hasSelectedEditor: false + }); + } + translateSelectedEditors(x, y, noCommit = false) { + if (!noCommit) { + this.commitOrRemove(); + } + if (!this.hasSelection) { + return; + } + this.#translation[0] += x; + this.#translation[1] += y; + const [totalX, totalY] = this.#translation; + const editors = [...this.#selectedEditors]; + const TIME_TO_WAIT = 1000; + if (this.#translationTimeoutId) { + clearTimeout(this.#translationTimeoutId); + } + this.#translationTimeoutId = setTimeout(() => { + this.#translationTimeoutId = null; + this.#translation[0] = this.#translation[1] = 0; + this.addCommands({ + cmd: () => { + for (const editor of editors) { + if (this.#allEditors.has(editor.id)) { + editor.translateInPage(totalX, totalY); + editor.translationDone(); + } + } + }, + undo: () => { + for (const editor of editors) { + if (this.#allEditors.has(editor.id)) { + editor.translateInPage(-totalX, -totalY); + editor.translationDone(); + } + } + }, + mustExec: false + }); + }, TIME_TO_WAIT); + for (const editor of editors) { + editor.translateInPage(x, y); + editor.translationDone(); + } + } + setUpDragSession() { + if (!this.hasSelection) { + return; + } + this.disableUserSelect(true); + this.#draggingEditors = new Map(); + for (const editor of this.#selectedEditors) { + this.#draggingEditors.set(editor, { + savedX: editor.x, + savedY: editor.y, + savedPageIndex: editor.pageIndex, + newX: 0, + newY: 0, + newPageIndex: -1 + }); + } + } + endDragSession() { + if (!this.#draggingEditors) { + return false; + } + this.disableUserSelect(false); + const map = this.#draggingEditors; + this.#draggingEditors = null; + let mustBeAddedInUndoStack = false; + for (const [{ + x, + y, + pageIndex + }, value] of map) { + value.newX = x; + value.newY = y; + value.newPageIndex = pageIndex; + mustBeAddedInUndoStack ||= x !== value.savedX || y !== value.savedY || pageIndex !== value.savedPageIndex; + } + if (!mustBeAddedInUndoStack) { + return false; + } + const move = (editor, x, y, pageIndex) => { + if (this.#allEditors.has(editor.id)) { + const parent = this.#allLayers.get(pageIndex); + if (parent) { + editor._setParentAndPosition(parent, x, y); + } else { + editor.pageIndex = pageIndex; + editor.x = x; + editor.y = y; + } + } + }; + this.addCommands({ + cmd: () => { + for (const [editor, { + newX, + newY, + newPageIndex + }] of map) { + move(editor, newX, newY, newPageIndex); + } + }, + undo: () => { + for (const [editor, { + savedX, + savedY, + savedPageIndex + }] of map) { + move(editor, savedX, savedY, savedPageIndex); + } + }, + mustExec: true + }); + return true; + } + dragSelectedEditors(tx, ty) { + if (!this.#draggingEditors) { + return; + } + for (const editor of this.#draggingEditors.keys()) { + editor.drag(tx, ty); + } + } + rebuild(editor) { + if (editor.parent === null) { + const parent = this.getLayer(editor.pageIndex); + if (parent) { + parent.changeParent(editor); + parent.addOrRebuild(editor); + } else { + this.addEditor(editor); + this.addToAnnotationStorage(editor); + editor.rebuild(); + } + } else { + editor.parent.addOrRebuild(editor); + } + } + get isEditorHandlingKeyboard() { + return this.getActive()?.shouldGetKeyboardEvents() || this.#selectedEditors.size === 1 && this.firstSelectedEditor.shouldGetKeyboardEvents(); + } + isActive(editor) { + return this.#activeEditor === editor; + } + getActive() { + return this.#activeEditor; + } + getMode() { + return this.#mode; + } + isEditingMode() { + return this.#mode !== AnnotationEditorType.NONE; + } + get imageManager() { + return shadow(this, "imageManager", new ImageManager()); + } + getSelectionBoxes(textLayer) { + if (!textLayer) { + return null; + } + const selection = document.getSelection(); + for (let i = 0, ii = selection.rangeCount; i < ii; i++) { + if (!textLayer.contains(selection.getRangeAt(i).commonAncestorContainer)) { + return null; + } + } + const { + x: layerX, + y: layerY, + width: parentWidth, + height: parentHeight + } = textLayer.getBoundingClientRect(); + let rotator; + switch (textLayer.getAttribute("data-main-rotation")) { + case "90": + rotator = (x, y, w, h) => ({ + x: (y - layerY) / parentHeight, + y: 1 - (x + w - layerX) / parentWidth, + width: h / parentHeight, + height: w / parentWidth + }); + break; + case "180": + rotator = (x, y, w, h) => ({ + x: 1 - (x + w - layerX) / parentWidth, + y: 1 - (y + h - layerY) / parentHeight, + width: w / parentWidth, + height: h / parentHeight + }); + break; + case "270": + rotator = (x, y, w, h) => ({ + x: 1 - (y + h - layerY) / parentHeight, + y: (x - layerX) / parentWidth, + width: h / parentHeight, + height: w / parentWidth + }); + break; + default: + rotator = (x, y, w, h) => ({ + x: (x - layerX) / parentWidth, + y: (y - layerY) / parentHeight, + width: w / parentWidth, + height: h / parentHeight + }); + break; + } + const boxes = []; + for (let i = 0, ii = selection.rangeCount; i < ii; i++) { + const range = selection.getRangeAt(i); + if (range.collapsed) { + continue; + } + for (const { + x, + y, + width, + height + } of range.getClientRects()) { + if (width === 0 || height === 0) { + continue; + } + boxes.push(rotator(x, y, width, height)); + } + } + return boxes.length === 0 ? null : boxes; + } + addChangedExistingAnnotation({ + annotationElementId, + id + }) { + (this.#changedExistingAnnotations ||= new Map()).set(annotationElementId, id); + } + removeChangedExistingAnnotation({ + annotationElementId + }) { + this.#changedExistingAnnotations?.delete(annotationElementId); + } + renderAnnotationElement(annotation) { + const editorId = this.#changedExistingAnnotations?.get(annotation.data.id); + if (!editorId) { + return; + } + const editor = this.#annotationStorage.getRawValue(editorId); + if (!editor) { + return; + } + if (this.#mode === AnnotationEditorType.NONE && !editor.hasBeenModified) { + return; + } + editor.renderAnnotationElement(annotation); + } + setMissingCanvas(annotationId, annotationElementId, canvas) { + const editor = this.#missingCanvases?.get(annotationId); + if (!editor) { + return; + } + editor.setCanvas(annotationElementId, canvas); + this.#missingCanvases.delete(annotationId); + } + addMissingCanvas(annotationId, editor) { + (this.#missingCanvases ||= new Map()).set(annotationId, editor); + } +} + +;// ./src/display/editor/alt_text.js + +class AltText { + #altText = null; + #altTextDecorative = false; + #altTextButton = null; + #altTextButtonLabel = null; + #altTextTooltip = null; + #altTextTooltipTimeout = null; + #altTextWasFromKeyBoard = false; + #badge = null; + #editor = null; + #guessedText = null; + #textWithDisclaimer = null; + #useNewAltTextFlow = false; + static #l10nNewButton = null; + static _l10n = null; + constructor(editor) { + this.#editor = editor; + this.#useNewAltTextFlow = editor._uiManager.useNewAltTextFlow; + AltText.#l10nNewButton ||= Object.freeze({ + added: "pdfjs-editor-new-alt-text-added-button", + "added-label": "pdfjs-editor-new-alt-text-added-button-label", + missing: "pdfjs-editor-new-alt-text-missing-button", + "missing-label": "pdfjs-editor-new-alt-text-missing-button-label", + review: "pdfjs-editor-new-alt-text-to-review-button", + "review-label": "pdfjs-editor-new-alt-text-to-review-button-label" + }); + } + static initialize(l10n) { + AltText._l10n ??= l10n; + } + async render() { + const altText = this.#altTextButton = document.createElement("button"); + altText.className = "altText"; + altText.tabIndex = "0"; + const label = this.#altTextButtonLabel = document.createElement("span"); + altText.append(label); + if (this.#useNewAltTextFlow) { + altText.classList.add("new"); + altText.setAttribute("data-l10n-id", AltText.#l10nNewButton.missing); + label.setAttribute("data-l10n-id", AltText.#l10nNewButton["missing-label"]); + } else { + altText.setAttribute("data-l10n-id", "pdfjs-editor-alt-text-button"); + label.setAttribute("data-l10n-id", "pdfjs-editor-alt-text-button-label"); + } + const signal = this.#editor._uiManager._signal; + altText.addEventListener("contextmenu", noContextMenu, { + signal + }); + altText.addEventListener("pointerdown", event => event.stopPropagation(), { + signal + }); + const onClick = event => { + event.preventDefault(); + this.#editor._uiManager.editAltText(this.#editor); + if (this.#useNewAltTextFlow) { + this.#editor._reportTelemetry({ + action: "pdfjs.image.alt_text.image_status_label_clicked", + data: { + label: this.#label + } + }); + } + }; + altText.addEventListener("click", onClick, { + capture: true, + signal + }); + altText.addEventListener("keydown", event => { + if (event.target === altText && event.key === "Enter") { + this.#altTextWasFromKeyBoard = true; + onClick(event); + } + }, { + signal + }); + await this.#setState(); + return altText; + } + get #label() { + return this.#altText && "added" || this.#altText === null && this.guessedText && "review" || "missing"; + } + finish() { + if (!this.#altTextButton) { + return; + } + this.#altTextButton.focus({ + focusVisible: this.#altTextWasFromKeyBoard + }); + this.#altTextWasFromKeyBoard = false; + } + isEmpty() { + if (this.#useNewAltTextFlow) { + return this.#altText === null; + } + return !this.#altText && !this.#altTextDecorative; + } + hasData() { + if (this.#useNewAltTextFlow) { + return this.#altText !== null || !!this.#guessedText; + } + return this.isEmpty(); + } + get guessedText() { + return this.#guessedText; + } + async setGuessedText(guessedText) { + if (this.#altText !== null) { + return; + } + this.#guessedText = guessedText; + this.#textWithDisclaimer = await AltText._l10n.get("pdfjs-editor-new-alt-text-generated-alt-text-with-disclaimer", { + generatedAltText: guessedText + }); + this.#setState(); + } + toggleAltTextBadge(visibility = false) { + if (!this.#useNewAltTextFlow || this.#altText) { + this.#badge?.remove(); + this.#badge = null; + return; + } + if (!this.#badge) { + const badge = this.#badge = document.createElement("div"); + badge.className = "noAltTextBadge"; + this.#editor.div.append(badge); + } + this.#badge.classList.toggle("hidden", !visibility); + } + serialize(isForCopying) { + let altText = this.#altText; + if (!isForCopying && this.#guessedText === altText) { + altText = this.#textWithDisclaimer; + } + return { + altText, + decorative: this.#altTextDecorative, + guessedText: this.#guessedText, + textWithDisclaimer: this.#textWithDisclaimer + }; + } + get data() { + return { + altText: this.#altText, + decorative: this.#altTextDecorative + }; + } + set data({ + altText, + decorative, + guessedText, + textWithDisclaimer, + cancel = false + }) { + if (guessedText) { + this.#guessedText = guessedText; + this.#textWithDisclaimer = textWithDisclaimer; + } + if (this.#altText === altText && this.#altTextDecorative === decorative) { + return; + } + if (!cancel) { + this.#altText = altText; + this.#altTextDecorative = decorative; + } + this.#setState(); + } + toggle(enabled = false) { + if (!this.#altTextButton) { + return; + } + if (!enabled && this.#altTextTooltipTimeout) { + clearTimeout(this.#altTextTooltipTimeout); + this.#altTextTooltipTimeout = null; + } + this.#altTextButton.disabled = !enabled; + } + shown() { + this.#editor._reportTelemetry({ + action: "pdfjs.image.alt_text.image_status_label_displayed", + data: { + label: this.#label + } + }); + } + destroy() { + this.#altTextButton?.remove(); + this.#altTextButton = null; + this.#altTextButtonLabel = null; + this.#altTextTooltip = null; + this.#badge?.remove(); + this.#badge = null; + } + async #setState() { + const button = this.#altTextButton; + if (!button) { + return; + } + if (this.#useNewAltTextFlow) { + button.classList.toggle("done", !!this.#altText); + button.setAttribute("data-l10n-id", AltText.#l10nNewButton[this.#label]); + this.#altTextButtonLabel?.setAttribute("data-l10n-id", AltText.#l10nNewButton[`${this.#label}-label`]); + if (!this.#altText) { + this.#altTextTooltip?.remove(); + return; + } + } else { + if (!this.#altText && !this.#altTextDecorative) { + button.classList.remove("done"); + this.#altTextTooltip?.remove(); + return; + } + button.classList.add("done"); + button.setAttribute("data-l10n-id", "pdfjs-editor-alt-text-edit-button"); + } + let tooltip = this.#altTextTooltip; + if (!tooltip) { + this.#altTextTooltip = tooltip = document.createElement("span"); + tooltip.className = "tooltip"; + tooltip.setAttribute("role", "tooltip"); + tooltip.id = `alt-text-tooltip-${this.#editor.id}`; + const DELAY_TO_SHOW_TOOLTIP = 100; + const signal = this.#editor._uiManager._signal; + signal.addEventListener("abort", () => { + clearTimeout(this.#altTextTooltipTimeout); + this.#altTextTooltipTimeout = null; + }, { + once: true + }); + button.addEventListener("mouseenter", () => { + this.#altTextTooltipTimeout = setTimeout(() => { + this.#altTextTooltipTimeout = null; + this.#altTextTooltip.classList.add("show"); + this.#editor._reportTelemetry({ + action: "alt_text_tooltip" + }); + }, DELAY_TO_SHOW_TOOLTIP); + }, { + signal + }); + button.addEventListener("mouseleave", () => { + if (this.#altTextTooltipTimeout) { + clearTimeout(this.#altTextTooltipTimeout); + this.#altTextTooltipTimeout = null; + } + this.#altTextTooltip?.classList.remove("show"); + }, { + signal + }); + } + if (this.#altTextDecorative) { + tooltip.setAttribute("data-l10n-id", "pdfjs-editor-alt-text-decorative-tooltip"); + } else { + tooltip.removeAttribute("data-l10n-id"); + tooltip.textContent = this.#altText; + } + if (!tooltip.parentNode) { + button.append(tooltip); + } + const element = this.#editor.getElementForAltText(); + element?.setAttribute("aria-describedby", tooltip.id); + } +} + +;// ./src/display/editor/comment.js + +class Comment { + #commentStandaloneButton = null; + #commentToolbarButton = null; + #commentWasFromKeyBoard = false; + #editor = null; + #initialText = null; + #richText = null; + #text = null; + #date = null; + #deleted = false; + #popupPosition = null; + constructor(editor) { + this.#editor = editor; + } + renderForToolbar() { + const button = this.#commentToolbarButton = document.createElement("button"); + button.className = "comment"; + return this.#render(button, false); + } + renderForStandalone() { + const button = this.#commentStandaloneButton = document.createElement("button"); + button.className = "annotationCommentButton"; + const position = this.#editor.commentButtonPosition; + if (position) { + const { + style + } = button; + style.insetInlineEnd = `calc(${100 * (this.#editor._uiManager.direction === "ltr" ? 1 - position[0] : position[0])}% - var(--comment-button-dim))`; + style.top = `calc(${100 * position[1]}% - var(--comment-button-dim))`; + const color = this.#editor.commentButtonColor; + if (color) { + style.backgroundColor = color; + } + } + return this.#render(button, true); + } + focusButton() { + setTimeout(() => { + (this.#commentStandaloneButton ?? this.#commentToolbarButton)?.focus(); + }, 0); + } + onUpdatedColor() { + if (!this.#commentStandaloneButton) { + return; + } + const color = this.#editor.commentButtonColor; + if (color) { + this.#commentStandaloneButton.style.backgroundColor = color; + } + this.#editor._uiManager.updatePopupColor(this.#editor); + } + get commentButtonWidth() { + return (this.#commentStandaloneButton?.getBoundingClientRect().width ?? 0) / this.#editor.parent.boundingClientRect.width; + } + get commentPopupPositionInLayer() { + if (this.#popupPosition) { + return this.#popupPosition; + } + if (!this.#commentStandaloneButton) { + return null; + } + const { + x, + y, + height + } = this.#commentStandaloneButton.getBoundingClientRect(); + const { + x: parentX, + y: parentY, + width: parentWidth, + height: parentHeight + } = this.#editor.parent.boundingClientRect; + return [(x - parentX) / parentWidth, (y + height - parentY) / parentHeight]; + } + set commentPopupPositionInLayer(pos) { + this.#popupPosition = pos; + } + hasDefaultPopupPosition() { + return this.#popupPosition === null; + } + removeStandaloneCommentButton() { + this.#commentStandaloneButton?.remove(); + this.#commentStandaloneButton = null; + } + removeToolbarCommentButton() { + this.#commentToolbarButton?.remove(); + this.#commentToolbarButton = null; + } + setCommentButtonStates({ + selected, + hasPopup + }) { + if (!this.#commentStandaloneButton) { + return; + } + this.#commentStandaloneButton.classList.toggle("selected", selected); + this.#commentStandaloneButton.ariaExpanded = hasPopup; + } + #render(comment, isStandalone) { + if (!this.#editor._uiManager.hasCommentManager()) { + return null; + } + comment.tabIndex = "0"; + comment.ariaHasPopup = "dialog"; + if (isStandalone) { + comment.ariaControls = "commentPopup"; + comment.setAttribute("data-l10n-id", "pdfjs-show-comment-button"); + } else { + comment.ariaControlsElements = [this.#editor._uiManager.getCommentDialogElement()]; + comment.setAttribute("data-l10n-id", "pdfjs-editor-add-comment-button"); + } + const signal = this.#editor._uiManager._signal; + if (!(signal instanceof AbortSignal) || signal.aborted) { + return comment; + } + comment.addEventListener("contextmenu", noContextMenu, { + signal + }); + if (isStandalone) { + comment.addEventListener("focusin", e => { + this.#editor._focusEventsAllowed = false; + stopEvent(e); + }, { + capture: true, + signal + }); + comment.addEventListener("focusout", e => { + this.#editor._focusEventsAllowed = true; + stopEvent(e); + }, { + capture: true, + signal + }); + } + comment.addEventListener("pointerdown", event => event.stopPropagation(), { + signal + }); + const onClick = event => { + event.preventDefault(); + if (comment === this.#commentToolbarButton) { + this.edit(); + } else { + this.#editor.toggleComment(true); + } + }; + comment.addEventListener("click", onClick, { + capture: true, + signal + }); + comment.addEventListener("keydown", event => { + if (event.target === comment && event.key === "Enter") { + this.#commentWasFromKeyBoard = true; + onClick(event); + } + }, { + signal + }); + comment.addEventListener("pointerenter", () => { + this.#editor.toggleComment(false, true); + }, { + signal + }); + comment.addEventListener("pointerleave", () => { + this.#editor.toggleComment(false, false); + }, { + signal + }); + return comment; + } + edit(options) { + const position = this.commentPopupPositionInLayer; + let posX, posY; + if (position) { + [posX, posY] = position; + } else { + [posX, posY] = this.#editor.commentButtonPosition; + const { + width, + height, + x, + y + } = this.#editor; + posX = x + posX * width; + posY = y + posY * height; + } + const parentDimensions = this.#editor.parent.boundingClientRect; + const { + x: parentX, + y: parentY, + width: parentWidth, + height: parentHeight + } = parentDimensions; + this.#editor._uiManager.editComment(this.#editor, parentX + posX * parentWidth, parentY + posY * parentHeight, { + ...options, + parentDimensions + }); + } + finish() { + if (!this.#commentToolbarButton) { + return; + } + this.#commentToolbarButton.focus({ + focusVisible: this.#commentWasFromKeyBoard + }); + this.#commentWasFromKeyBoard = false; + } + isDeleted() { + return this.#deleted || this.#text === ""; + } + isEmpty() { + return this.#text === null; + } + hasBeenEdited() { + return this.isDeleted() || this.#text !== this.#initialText; + } + serialize() { + return this.data; + } + get data() { + return { + text: this.#text, + richText: this.#richText, + date: this.#date, + deleted: this.isDeleted() + }; + } + set data(text) { + if (text !== this.#text) { + this.#richText = null; + } + if (text === null) { + this.#text = ""; + this.#deleted = true; + return; + } + this.#text = text; + this.#date = new Date(); + this.#deleted = false; + } + setInitialText(text, richText = null) { + this.#initialText = text; + this.data = text; + this.#date = null; + this.#richText = richText; + } + shown() {} + destroy() { + this.#commentToolbarButton?.remove(); + this.#commentToolbarButton = null; + this.#commentStandaloneButton?.remove(); + this.#commentStandaloneButton = null; + this.#text = ""; + this.#richText = null; + this.#date = null; + this.#editor = null; + this.#commentWasFromKeyBoard = false; + this.#deleted = false; + } +} + +;// ./src/display/touch_manager.js + +class TouchManager { + #container; + #isPinching = false; + #isPinchingStopped = null; + #isPinchingDisabled; + #onPinchStart; + #onPinching; + #onPinchEnd; + #pointerDownAC = null; + #signal; + #touchInfo = null; + #touchManagerAC; + #touchMoveAC = null; + constructor({ + container, + isPinchingDisabled = null, + isPinchingStopped = null, + onPinchStart = null, + onPinching = null, + onPinchEnd = null, + signal + }) { + this.#container = container; + this.#isPinchingStopped = isPinchingStopped; + this.#isPinchingDisabled = isPinchingDisabled; + this.#onPinchStart = onPinchStart; + this.#onPinching = onPinching; + this.#onPinchEnd = onPinchEnd; + this.#touchManagerAC = new AbortController(); + this.#signal = AbortSignal.any([signal, this.#touchManagerAC.signal]); + container.addEventListener("touchstart", this.#onTouchStart.bind(this), { + passive: false, + signal: this.#signal + }); + } + get MIN_TOUCH_DISTANCE_TO_PINCH() { + return 35 / OutputScale.pixelRatio; + } + #onTouchStart(evt) { + if (this.#isPinchingDisabled?.()) { + return; + } + if (evt.touches.length === 1) { + if (this.#pointerDownAC) { + return; + } + const pointerDownAC = this.#pointerDownAC = new AbortController(); + const signal = AbortSignal.any([this.#signal, pointerDownAC.signal]); + const container = this.#container; + const opts = { + capture: true, + signal, + passive: false + }; + const cancelPointerDown = e => { + if (e.pointerType === "touch") { + this.#pointerDownAC?.abort(); + this.#pointerDownAC = null; + } + }; + container.addEventListener("pointerdown", e => { + if (e.pointerType === "touch") { + stopEvent(e); + cancelPointerDown(e); + } + }, opts); + container.addEventListener("pointerup", cancelPointerDown, opts); + container.addEventListener("pointercancel", cancelPointerDown, opts); + return; + } + if (!this.#touchMoveAC) { + this.#touchMoveAC = new AbortController(); + const signal = AbortSignal.any([this.#signal, this.#touchMoveAC.signal]); + const container = this.#container; + const opt = { + signal, + capture: false, + passive: false + }; + container.addEventListener("touchmove", this.#onTouchMove.bind(this), opt); + const onTouchEnd = this.#onTouchEnd.bind(this); + container.addEventListener("touchend", onTouchEnd, opt); + container.addEventListener("touchcancel", onTouchEnd, opt); + opt.capture = true; + container.addEventListener("pointerdown", stopEvent, opt); + container.addEventListener("pointermove", stopEvent, opt); + container.addEventListener("pointercancel", stopEvent, opt); + container.addEventListener("pointerup", stopEvent, opt); + this.#onPinchStart?.(); + } + stopEvent(evt); + if (evt.touches.length !== 2 || this.#isPinchingStopped?.()) { + this.#touchInfo = null; + return; + } + let [touch0, touch1] = evt.touches; + if (touch0.identifier > touch1.identifier) { + [touch0, touch1] = [touch1, touch0]; + } + this.#touchInfo = { + touch0X: touch0.screenX, + touch0Y: touch0.screenY, + touch1X: touch1.screenX, + touch1Y: touch1.screenY + }; + } + #onTouchMove(evt) { + if (!this.#touchInfo || evt.touches.length !== 2) { + return; + } + stopEvent(evt); + let [touch0, touch1] = evt.touches; + if (touch0.identifier > touch1.identifier) { + [touch0, touch1] = [touch1, touch0]; + } + const { + screenX: screen0X, + screenY: screen0Y + } = touch0; + const { + screenX: screen1X, + screenY: screen1Y + } = touch1; + const touchInfo = this.#touchInfo; + const { + touch0X: pTouch0X, + touch0Y: pTouch0Y, + touch1X: pTouch1X, + touch1Y: pTouch1Y + } = touchInfo; + const prevGapX = pTouch1X - pTouch0X; + const prevGapY = pTouch1Y - pTouch0Y; + const currGapX = screen1X - screen0X; + const currGapY = screen1Y - screen0Y; + const distance = Math.hypot(currGapX, currGapY) || 1; + const pDistance = Math.hypot(prevGapX, prevGapY) || 1; + if (!this.#isPinching && Math.abs(pDistance - distance) <= TouchManager.MIN_TOUCH_DISTANCE_TO_PINCH) { + return; + } + touchInfo.touch0X = screen0X; + touchInfo.touch0Y = screen0Y; + touchInfo.touch1X = screen1X; + touchInfo.touch1Y = screen1Y; + if (!this.#isPinching) { + this.#isPinching = true; + return; + } + const origin = [(screen0X + screen1X) / 2, (screen0Y + screen1Y) / 2]; + this.#onPinching?.(origin, pDistance, distance); + } + #onTouchEnd(evt) { + if (evt.touches.length >= 2) { + return; + } + if (this.#touchMoveAC) { + this.#touchMoveAC.abort(); + this.#touchMoveAC = null; + this.#onPinchEnd?.(); + } + if (!this.#touchInfo) { + return; + } + stopEvent(evt); + this.#touchInfo = null; + this.#isPinching = false; + } + destroy() { + this.#touchManagerAC?.abort(); + this.#touchManagerAC = null; + this.#pointerDownAC?.abort(); + this.#pointerDownAC = null; + } +} + +;// ./src/display/editor/editor.js + + + + + + + +class AnnotationEditor { + #accessibilityData = null; + #allResizerDivs = null; + #altText = null; + #comment = null; + #commentStandaloneButton = null; + #disabled = false; + #dragPointerId = null; + #dragPointerType = ""; + #resizersDiv = null; + #lastPointerCoords = null; + #savedDimensions = null; + #fakeAnnotation = null; + #focusAC = null; + #focusedResizerName = ""; + #hasBeenClicked = false; + #initialRect = null; + #isEditing = false; + #isInEditMode = false; + #isResizerEnabledForKeyboard = false; + #moveInDOMTimeout = null; + #prevDragX = 0; + #prevDragY = 0; + #telemetryTimeouts = null; + #touchManager = null; + isSelected = false; + _isCopy = false; + _editToolbar = null; + _initialOptions = Object.create(null); + _initialData = null; + _isVisible = true; + _uiManager = null; + _focusEventsAllowed = true; + static _l10n = null; + static _l10nResizer = null; + #isDraggable = false; + #zIndex = AnnotationEditor._zIndex++; + static _borderLineWidth = -1; + static _colorManager = new ColorManager(); + static _zIndex = 1; + static _telemetryTimeout = 1000; + static get _resizerKeyboardManager() { + const resize = AnnotationEditor.prototype._resizeWithKeyboard; + const small = AnnotationEditorUIManager.TRANSLATE_SMALL; + const big = AnnotationEditorUIManager.TRANSLATE_BIG; + return shadow(this, "_resizerKeyboardManager", new KeyboardManager([[["ArrowLeft", "mac+ArrowLeft"], resize, { + args: [-small, 0] + }], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], resize, { + args: [-big, 0] + }], [["ArrowRight", "mac+ArrowRight"], resize, { + args: [small, 0] + }], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], resize, { + args: [big, 0] + }], [["ArrowUp", "mac+ArrowUp"], resize, { + args: [0, -small] + }], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], resize, { + args: [0, -big] + }], [["ArrowDown", "mac+ArrowDown"], resize, { + args: [0, small] + }], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], resize, { + args: [0, big] + }], [["Escape", "mac+Escape"], AnnotationEditor.prototype._stopResizingWithKeyboard]])); + } + constructor(parameters) { + this.parent = parameters.parent; + this.id = parameters.id; + this.width = this.height = null; + this.pageIndex = parameters.parent.pageIndex; + this.name = parameters.name; + this.div = null; + this._uiManager = parameters.uiManager; + this.annotationElementId = null; + this._willKeepAspectRatio = false; + this._initialOptions.isCentered = parameters.isCentered; + this._structTreeParentId = null; + this.annotationElementId = parameters.annotationElementId || null; + this.creationDate = parameters.creationDate || new Date(); + this.modificationDate = parameters.modificationDate || null; + this.canAddComment = true; + const { + rotation, + rawDims: { + pageWidth, + pageHeight, + pageX, + pageY + } + } = this.parent.viewport; + this.rotation = rotation; + this.pageRotation = (360 + rotation - this._uiManager.viewParameters.rotation) % 360; + this.pageDimensions = [pageWidth, pageHeight]; + this.pageTranslation = [pageX, pageY]; + const [width, height] = this.parentDimensions; + this.x = parameters.x / width; + this.y = parameters.y / height; + this.isAttachedToDOM = false; + this.deleted = false; + } + get editorType() { + return Object.getPrototypeOf(this).constructor._type; + } + get mode() { + return Object.getPrototypeOf(this).constructor._editorType; + } + static get isDrawer() { + return false; + } + static get _defaultLineColor() { + return shadow(this, "_defaultLineColor", this._colorManager.getHexCode("CanvasText")); + } + static deleteAnnotationElement(editor) { + const fakeEditor = new FakeEditor({ + id: editor.parent.getNextId(), + parent: editor.parent, + uiManager: editor._uiManager + }); + fakeEditor.annotationElementId = editor.annotationElementId; + fakeEditor.deleted = true; + fakeEditor._uiManager.addToAnnotationStorage(fakeEditor); + } + static initialize(l10n, _uiManager) { + AnnotationEditor._l10n ??= l10n; + AnnotationEditor._l10nResizer ||= Object.freeze({ + topLeft: "pdfjs-editor-resizer-top-left", + topMiddle: "pdfjs-editor-resizer-top-middle", + topRight: "pdfjs-editor-resizer-top-right", + middleRight: "pdfjs-editor-resizer-middle-right", + bottomRight: "pdfjs-editor-resizer-bottom-right", + bottomMiddle: "pdfjs-editor-resizer-bottom-middle", + bottomLeft: "pdfjs-editor-resizer-bottom-left", + middleLeft: "pdfjs-editor-resizer-middle-left" + }); + if (AnnotationEditor._borderLineWidth !== -1) { + return; + } + const style = getComputedStyle(document.documentElement); + AnnotationEditor._borderLineWidth = parseFloat(style.getPropertyValue("--outline-width")) || 0; + } + static updateDefaultParams(_type, _value) {} + static get defaultPropertiesToUpdate() { + return []; + } + static isHandlingMimeForPasting(mime) { + return false; + } + static paste(item, parent) { + unreachable("Not implemented"); + } + get propertiesToUpdate() { + return []; + } + get _isDraggable() { + return this.#isDraggable; + } + set _isDraggable(value) { + this.#isDraggable = value; + this.div?.classList.toggle("draggable", value); + } + get uid() { + return this.annotationElementId || this.id; + } + get isEnterHandled() { + return true; + } + center() { + const [pageWidth, pageHeight] = this.pageDimensions; + switch (this.parentRotation) { + case 90: + this.x -= this.height * pageHeight / (pageWidth * 2); + this.y += this.width * pageWidth / (pageHeight * 2); + break; + case 180: + this.x += this.width / 2; + this.y += this.height / 2; + break; + case 270: + this.x += this.height * pageHeight / (pageWidth * 2); + this.y -= this.width * pageWidth / (pageHeight * 2); + break; + default: + this.x -= this.width / 2; + this.y -= this.height / 2; + break; + } + this.fixAndSetPosition(); + } + addCommands(params) { + this._uiManager.addCommands(params); + } + get currentLayer() { + return this._uiManager.currentLayer; + } + setInBackground() { + this.div.style.zIndex = 0; + } + setInForeground() { + this.div.style.zIndex = this.#zIndex; + } + setParent(parent) { + if (parent !== null) { + this.pageIndex = parent.pageIndex; + this.pageDimensions = parent.pageDimensions; + } else { + this.#stopResizing(); + this.#fakeAnnotation?.remove(); + this.#fakeAnnotation = null; + } + this.parent = parent; + } + focusin(event) { + if (!this._focusEventsAllowed) { + return; + } + if (!this.#hasBeenClicked) { + this.parent.setSelected(this); + } else { + this.#hasBeenClicked = false; + } + } + focusout(event) { + if (!this._focusEventsAllowed) { + return; + } + if (!this.isAttachedToDOM) { + return; + } + const target = event.relatedTarget; + if (target?.closest(`#${this.id}`)) { + return; + } + event.preventDefault(); + if (!this.parent?.isMultipleSelection) { + this.commitOrRemove(); + } + } + commitOrRemove() { + if (this.isEmpty()) { + this.remove(); + } else { + this.commit(); + } + } + commit() { + if (!this.isInEditMode()) { + return; + } + this.addToAnnotationStorage(); + } + addToAnnotationStorage() { + this._uiManager.addToAnnotationStorage(this); + } + setAt(x, y, tx, ty) { + const [width, height] = this.parentDimensions; + [tx, ty] = this.screenToPageTranslation(tx, ty); + this.x = (x + tx) / width; + this.y = (y + ty) / height; + this.fixAndSetPosition(); + } + _moveAfterPaste(baseX, baseY) { + const [parentWidth, parentHeight] = this.parentDimensions; + this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight); + this._onTranslated(); + } + #translate([width, height], x, y) { + [x, y] = this.screenToPageTranslation(x, y); + this.x += x / width; + this.y += y / height; + this._onTranslating(this.x, this.y); + this.fixAndSetPosition(); + } + translate(x, y) { + this.#translate(this.parentDimensions, x, y); + } + translateInPage(x, y) { + this.#initialRect ||= [this.x, this.y, this.width, this.height]; + this.#translate(this.pageDimensions, x, y); + this.div.scrollIntoView({ + block: "nearest" + }); + } + translationDone() { + this._onTranslated(this.x, this.y); + } + drag(tx, ty) { + this.#initialRect ||= [this.x, this.y, this.width, this.height]; + const { + div, + parentDimensions: [parentWidth, parentHeight] + } = this; + this.x += tx / parentWidth; + this.y += ty / parentHeight; + if (this.parent && (this.x < 0 || this.x > 1 || this.y < 0 || this.y > 1)) { + const { + x, + y + } = this.div.getBoundingClientRect(); + if (this.parent.findNewParent(this, x, y)) { + this.x -= Math.floor(this.x); + this.y -= Math.floor(this.y); + } + } + let { + x, + y + } = this; + const [bx, by] = this.getBaseTranslation(); + x += bx; + y += by; + const { + style + } = div; + style.left = `${(100 * x).toFixed(2)}%`; + style.top = `${(100 * y).toFixed(2)}%`; + this._onTranslating(x, y); + div.scrollIntoView({ + block: "nearest" + }); + } + _onTranslating(x, y) {} + _onTranslated(x, y) {} + get _hasBeenMoved() { + return !!this.#initialRect && (this.#initialRect[0] !== this.x || this.#initialRect[1] !== this.y); + } + get _hasBeenResized() { + return !!this.#initialRect && (this.#initialRect[2] !== this.width || this.#initialRect[3] !== this.height); + } + getBaseTranslation() { + const [parentWidth, parentHeight] = this.parentDimensions; + const { + _borderLineWidth + } = AnnotationEditor; + const x = _borderLineWidth / parentWidth; + const y = _borderLineWidth / parentHeight; + switch (this.rotation) { + case 90: + return [-x, y]; + case 180: + return [x, y]; + case 270: + return [x, -y]; + default: + return [-x, -y]; + } + } + get _mustFixPosition() { + return true; + } + fixAndSetPosition(rotation = this.rotation) { + const { + div: { + style + }, + pageDimensions: [pageWidth, pageHeight] + } = this; + let { + x, + y, + width, + height + } = this; + width *= pageWidth; + height *= pageHeight; + x *= pageWidth; + y *= pageHeight; + if (this._mustFixPosition) { + switch (rotation) { + case 0: + x = MathClamp(x, 0, pageWidth - width); + y = MathClamp(y, 0, pageHeight - height); + break; + case 90: + x = MathClamp(x, 0, pageWidth - height); + y = MathClamp(y, width, pageHeight); + break; + case 180: + x = MathClamp(x, width, pageWidth); + y = MathClamp(y, height, pageHeight); + break; + case 270: + x = MathClamp(x, height, pageWidth); + y = MathClamp(y, 0, pageHeight - width); + break; + } + } + this.x = x /= pageWidth; + this.y = y /= pageHeight; + const [bx, by] = this.getBaseTranslation(); + x += bx; + y += by; + style.left = `${(100 * x).toFixed(2)}%`; + style.top = `${(100 * y).toFixed(2)}%`; + this.moveInDOM(); + } + static #rotatePoint(x, y, angle) { + switch (angle) { + case 90: + return [y, -x]; + case 180: + return [-x, -y]; + case 270: + return [-y, x]; + default: + return [x, y]; + } + } + screenToPageTranslation(x, y) { + return AnnotationEditor.#rotatePoint(x, y, this.parentRotation); + } + pageTranslationToScreen(x, y) { + return AnnotationEditor.#rotatePoint(x, y, 360 - this.parentRotation); + } + #getRotationMatrix(rotation) { + switch (rotation) { + case 90: + { + const [pageWidth, pageHeight] = this.pageDimensions; + return [0, -pageWidth / pageHeight, pageHeight / pageWidth, 0]; + } + case 180: + return [-1, 0, 0, -1]; + case 270: + { + const [pageWidth, pageHeight] = this.pageDimensions; + return [0, pageWidth / pageHeight, -pageHeight / pageWidth, 0]; + } + default: + return [1, 0, 0, 1]; + } + } + get parentScale() { + return this._uiManager.viewParameters.realScale; + } + get parentRotation() { + return (this._uiManager.viewParameters.rotation + this.pageRotation) % 360; + } + get parentDimensions() { + const { + parentScale, + pageDimensions: [pageWidth, pageHeight] + } = this; + return [pageWidth * parentScale, pageHeight * parentScale]; + } + setDims() { + const { + div: { + style + }, + width, + height + } = this; + style.width = `${(100 * width).toFixed(2)}%`; + style.height = `${(100 * height).toFixed(2)}%`; + } + getInitialTranslation() { + return [0, 0]; + } + #createResizers() { + if (this.#resizersDiv) { + return; + } + this.#resizersDiv = document.createElement("div"); + this.#resizersDiv.classList.add("resizers"); + const classes = this._willKeepAspectRatio ? ["topLeft", "topRight", "bottomRight", "bottomLeft"] : ["topLeft", "topMiddle", "topRight", "middleRight", "bottomRight", "bottomMiddle", "bottomLeft", "middleLeft"]; + const signal = this._uiManager._signal; + for (const name of classes) { + const div = document.createElement("div"); + this.#resizersDiv.append(div); + div.classList.add("resizer", name); + div.setAttribute("data-resizer-name", name); + div.addEventListener("pointerdown", this.#resizerPointerdown.bind(this, name), { + signal + }); + div.addEventListener("contextmenu", noContextMenu, { + signal + }); + div.tabIndex = -1; + } + this.div.prepend(this.#resizersDiv); + } + #resizerPointerdown(name, event) { + event.preventDefault(); + const { + isMac + } = util_FeatureTest.platform; + if (event.button !== 0 || event.ctrlKey && isMac) { + return; + } + this.#altText?.toggle(false); + const savedDraggable = this._isDraggable; + this._isDraggable = false; + this.#lastPointerCoords = [event.screenX, event.screenY]; + const ac = new AbortController(); + const signal = this._uiManager.combinedSignal(ac); + this.parent.togglePointerEvents(false); + window.addEventListener("pointermove", this.#resizerPointermove.bind(this, name), { + passive: true, + capture: true, + signal + }); + window.addEventListener("touchmove", stopEvent, { + passive: false, + signal + }); + window.addEventListener("contextmenu", noContextMenu, { + signal + }); + this.#savedDimensions = { + savedX: this.x, + savedY: this.y, + savedWidth: this.width, + savedHeight: this.height + }; + const savedParentCursor = this.parent.div.style.cursor; + const savedCursor = this.div.style.cursor; + this.div.style.cursor = this.parent.div.style.cursor = window.getComputedStyle(event.target).cursor; + const pointerUpCallback = () => { + ac.abort(); + this.parent.togglePointerEvents(true); + this.#altText?.toggle(true); + this._isDraggable = savedDraggable; + this.parent.div.style.cursor = savedParentCursor; + this.div.style.cursor = savedCursor; + this.#addResizeToUndoStack(); + }; + window.addEventListener("pointerup", pointerUpCallback, { + signal + }); + window.addEventListener("blur", pointerUpCallback, { + signal + }); + } + #resize(x, y, width, height) { + this.width = width; + this.height = height; + this.x = x; + this.y = y; + this.setDims(); + this.fixAndSetPosition(); + this._onResized(); + } + _onResized() {} + #addResizeToUndoStack() { + if (!this.#savedDimensions) { + return; + } + const { + savedX, + savedY, + savedWidth, + savedHeight + } = this.#savedDimensions; + this.#savedDimensions = null; + const newX = this.x; + const newY = this.y; + const newWidth = this.width; + const newHeight = this.height; + if (newX === savedX && newY === savedY && newWidth === savedWidth && newHeight === savedHeight) { + return; + } + this.addCommands({ + cmd: this.#resize.bind(this, newX, newY, newWidth, newHeight), + undo: this.#resize.bind(this, savedX, savedY, savedWidth, savedHeight), + mustExec: true + }); + } + static _round(x) { + return Math.round(x * 10000) / 10000; + } + #resizerPointermove(name, event) { + const [parentWidth, parentHeight] = this.parentDimensions; + const savedX = this.x; + const savedY = this.y; + const savedWidth = this.width; + const savedHeight = this.height; + const minWidth = AnnotationEditor.MIN_SIZE / parentWidth; + const minHeight = AnnotationEditor.MIN_SIZE / parentHeight; + const rotationMatrix = this.#getRotationMatrix(this.rotation); + const transf = (x, y) => [rotationMatrix[0] * x + rotationMatrix[2] * y, rotationMatrix[1] * x + rotationMatrix[3] * y]; + const invRotationMatrix = this.#getRotationMatrix(360 - this.rotation); + const invTransf = (x, y) => [invRotationMatrix[0] * x + invRotationMatrix[2] * y, invRotationMatrix[1] * x + invRotationMatrix[3] * y]; + let getPoint; + let getOpposite; + let isDiagonal = false; + let isHorizontal = false; + switch (name) { + case "topLeft": + isDiagonal = true; + getPoint = (w, h) => [0, 0]; + getOpposite = (w, h) => [w, h]; + break; + case "topMiddle": + getPoint = (w, h) => [w / 2, 0]; + getOpposite = (w, h) => [w / 2, h]; + break; + case "topRight": + isDiagonal = true; + getPoint = (w, h) => [w, 0]; + getOpposite = (w, h) => [0, h]; + break; + case "middleRight": + isHorizontal = true; + getPoint = (w, h) => [w, h / 2]; + getOpposite = (w, h) => [0, h / 2]; + break; + case "bottomRight": + isDiagonal = true; + getPoint = (w, h) => [w, h]; + getOpposite = (w, h) => [0, 0]; + break; + case "bottomMiddle": + getPoint = (w, h) => [w / 2, h]; + getOpposite = (w, h) => [w / 2, 0]; + break; + case "bottomLeft": + isDiagonal = true; + getPoint = (w, h) => [0, h]; + getOpposite = (w, h) => [w, 0]; + break; + case "middleLeft": + isHorizontal = true; + getPoint = (w, h) => [0, h / 2]; + getOpposite = (w, h) => [w, h / 2]; + break; + } + const point = getPoint(savedWidth, savedHeight); + const oppositePoint = getOpposite(savedWidth, savedHeight); + let transfOppositePoint = transf(...oppositePoint); + const oppositeX = AnnotationEditor._round(savedX + transfOppositePoint[0]); + const oppositeY = AnnotationEditor._round(savedY + transfOppositePoint[1]); + let ratioX = 1; + let ratioY = 1; + let deltaX, deltaY; + if (!event.fromKeyboard) { + const { + screenX, + screenY + } = event; + const [lastScreenX, lastScreenY] = this.#lastPointerCoords; + [deltaX, deltaY] = this.screenToPageTranslation(screenX - lastScreenX, screenY - lastScreenY); + this.#lastPointerCoords[0] = screenX; + this.#lastPointerCoords[1] = screenY; + } else { + ({ + deltaX, + deltaY + } = event); + } + [deltaX, deltaY] = invTransf(deltaX / parentWidth, deltaY / parentHeight); + if (isDiagonal) { + const oldDiag = Math.hypot(savedWidth, savedHeight); + ratioX = ratioY = Math.max(Math.min(Math.hypot(oppositePoint[0] - point[0] - deltaX, oppositePoint[1] - point[1] - deltaY) / oldDiag, 1 / savedWidth, 1 / savedHeight), minWidth / savedWidth, minHeight / savedHeight); + } else if (isHorizontal) { + ratioX = MathClamp(Math.abs(oppositePoint[0] - point[0] - deltaX), minWidth, 1) / savedWidth; + } else { + ratioY = MathClamp(Math.abs(oppositePoint[1] - point[1] - deltaY), minHeight, 1) / savedHeight; + } + const newWidth = AnnotationEditor._round(savedWidth * ratioX); + const newHeight = AnnotationEditor._round(savedHeight * ratioY); + transfOppositePoint = transf(...getOpposite(newWidth, newHeight)); + const newX = oppositeX - transfOppositePoint[0]; + const newY = oppositeY - transfOppositePoint[1]; + this.#initialRect ||= [this.x, this.y, this.width, this.height]; + this.width = newWidth; + this.height = newHeight; + this.x = newX; + this.y = newY; + this.setDims(); + this.fixAndSetPosition(); + this._onResizing(); + } + _onResizing() {} + altTextFinish() { + this.#altText?.finish(); + } + get toolbarButtons() { + return null; + } + async addEditToolbar() { + if (this._editToolbar || this.#isInEditMode) { + return this._editToolbar; + } + this._editToolbar = new EditorToolbar(this); + this.div.append(this._editToolbar.render()); + const { + toolbarButtons + } = this; + if (toolbarButtons) { + for (const [name, tool] of toolbarButtons) { + await this._editToolbar.addButton(name, tool); + } + } + if (!this.hasComment) { + this._editToolbar.addButton("comment", this.addCommentButton()); + } + this._editToolbar.addButton("delete"); + return this._editToolbar; + } + addCommentButtonInToolbar() { + this._editToolbar?.addButtonBefore("comment", this.addCommentButton(), ".deleteButton"); + } + removeCommentButtonFromToolbar() { + this._editToolbar?.removeButton("comment"); + } + removeEditToolbar() { + this._editToolbar?.remove(); + this._editToolbar = null; + this.#altText?.destroy(); + } + addContainer(container) { + const editToolbarDiv = this._editToolbar?.div; + if (editToolbarDiv) { + editToolbarDiv.before(container); + } else { + this.div.append(container); + } + } + getClientDimensions() { + return this.div.getBoundingClientRect(); + } + createAltText() { + if (!this.#altText) { + AltText.initialize(AnnotationEditor._l10n); + this.#altText = new AltText(this); + if (this.#accessibilityData) { + this.#altText.data = this.#accessibilityData; + this.#accessibilityData = null; + } + } + return this.#altText; + } + get altTextData() { + return this.#altText?.data; + } + set altTextData(data) { + if (!this.#altText) { + return; + } + this.#altText.data = data; + } + get guessedAltText() { + return this.#altText?.guessedText; + } + async setGuessedAltText(text) { + await this.#altText?.setGuessedText(text); + } + serializeAltText(isForCopying) { + return this.#altText?.serialize(isForCopying); + } + hasAltText() { + return !!this.#altText && !this.#altText.isEmpty(); + } + hasAltTextData() { + return this.#altText?.hasData() ?? false; + } + focusCommentButton() { + this.#comment?.focusButton(); + } + addCommentButton() { + return this.canAddComment ? this.#comment ||= new Comment(this) : null; + } + addStandaloneCommentButton() { + if (!this._uiManager.hasCommentManager()) { + return; + } + if (this.#commentStandaloneButton) { + if (this._uiManager.isEditingMode()) { + this.#commentStandaloneButton.classList.remove("hidden"); + } + return; + } + if (!this.hasComment) { + return; + } + this.#commentStandaloneButton = this.#comment.renderForStandalone(); + this.div.append(this.#commentStandaloneButton); + } + removeStandaloneCommentButton() { + this.#comment.removeStandaloneCommentButton(); + this.#commentStandaloneButton = null; + } + hideStandaloneCommentButton() { + this.#commentStandaloneButton?.classList.add("hidden"); + } + get comment() { + const { + data: { + richText, + text, + date, + deleted + } + } = this.#comment; + return { + text, + richText, + date, + deleted, + color: this.getNonHCMColor(), + opacity: this.opacity ?? 1 + }; + } + set comment(text) { + this.#comment ||= new Comment(this); + this.#comment.data = text; + if (this.hasComment) { + this.removeCommentButtonFromToolbar(); + this.addStandaloneCommentButton(); + this._uiManager.updateComment(this); + } else { + this.addCommentButtonInToolbar(); + this.removeStandaloneCommentButton(); + this._uiManager.removeComment(this); + } + } + setCommentData({ + comment, + popupRef, + richText + }) { + if (!popupRef) { + return; + } + this.#comment ||= new Comment(this); + this.#comment.setInitialText(comment, richText); + if (!this.annotationElementId) { + return; + } + const storedData = this._uiManager.getAndRemoveDataFromAnnotationStorage(this.annotationElementId); + if (storedData) { + this.updateFromAnnotationLayer(storedData); + } + } + get hasEditedComment() { + return this.#comment?.hasBeenEdited(); + } + get hasDeletedComment() { + return this.#comment?.isDeleted(); + } + get hasComment() { + return !!this.#comment && !this.#comment.isEmpty() && !this.#comment.isDeleted(); + } + async editComment(options) { + this.#comment ||= new Comment(this); + this.#comment.edit(options); + } + toggleComment(isSelected, visibility = undefined) { + if (this.hasComment) { + this._uiManager.toggleComment(this, isSelected, visibility); + } + } + setSelectedCommentButton(selected) { + this.#comment.setSelectedButton(selected); + } + addComment(serialized) { + if (this.hasEditedComment) { + const DEFAULT_POPUP_WIDTH = 180; + const DEFAULT_POPUP_HEIGHT = 100; + const [,,, trY] = serialized.rect; + const [pageWidth] = this.pageDimensions; + const [pageX] = this.pageTranslation; + const blX = pageX + pageWidth + 1; + const blY = trY - DEFAULT_POPUP_HEIGHT; + const trX = blX + DEFAULT_POPUP_WIDTH; + serialized.popup = { + contents: this.comment.text, + deleted: this.comment.deleted, + rect: [blX, blY, trX, trY] + }; + } + } + updateFromAnnotationLayer({ + popup: { + contents, + deleted + } + }) { + this.#comment.data = deleted ? null : contents; + } + get parentBoundingClientRect() { + return this.parent.boundingClientRect; + } + render() { + const div = this.div = document.createElement("div"); + div.setAttribute("data-editor-rotation", (360 - this.rotation) % 360); + div.className = this.name; + div.setAttribute("id", this.id); + div.tabIndex = this.#disabled ? -1 : 0; + div.setAttribute("role", "application"); + if (this.defaultL10nId) { + div.setAttribute("data-l10n-id", this.defaultL10nId); + } + if (!this._isVisible) { + div.classList.add("hidden"); + } + this.setInForeground(); + this.#addFocusListeners(); + const [parentWidth, parentHeight] = this.parentDimensions; + if (this.parentRotation % 180 !== 0) { + div.style.maxWidth = `${(100 * parentHeight / parentWidth).toFixed(2)}%`; + div.style.maxHeight = `${(100 * parentWidth / parentHeight).toFixed(2)}%`; + } + const [tx, ty] = this.getInitialTranslation(); + this.translate(tx, ty); + bindEvents(this, div, ["keydown", "pointerdown", "dblclick"]); + if (this.isResizable && this._uiManager._supportsPinchToZoom) { + this.#touchManager ||= new TouchManager({ + container: div, + isPinchingDisabled: () => !this.isSelected, + onPinchStart: this.#touchPinchStartCallback.bind(this), + onPinching: this.#touchPinchCallback.bind(this), + onPinchEnd: this.#touchPinchEndCallback.bind(this), + signal: this._uiManager._signal + }); + } + this.addStandaloneCommentButton(); + this._uiManager._editorUndoBar?.hide(); + return div; + } + #touchPinchStartCallback() { + this.#savedDimensions = { + savedX: this.x, + savedY: this.y, + savedWidth: this.width, + savedHeight: this.height + }; + this.#altText?.toggle(false); + this.parent.togglePointerEvents(false); + } + #touchPinchCallback(_origin, prevDistance, distance) { + const slowDownFactor = 0.7; + let factor = slowDownFactor * (distance / prevDistance) + 1 - slowDownFactor; + if (factor === 1) { + return; + } + const rotationMatrix = this.#getRotationMatrix(this.rotation); + const transf = (x, y) => [rotationMatrix[0] * x + rotationMatrix[2] * y, rotationMatrix[1] * x + rotationMatrix[3] * y]; + const [parentWidth, parentHeight] = this.parentDimensions; + const savedX = this.x; + const savedY = this.y; + const savedWidth = this.width; + const savedHeight = this.height; + const minWidth = AnnotationEditor.MIN_SIZE / parentWidth; + const minHeight = AnnotationEditor.MIN_SIZE / parentHeight; + factor = Math.max(Math.min(factor, 1 / savedWidth, 1 / savedHeight), minWidth / savedWidth, minHeight / savedHeight); + const newWidth = AnnotationEditor._round(savedWidth * factor); + const newHeight = AnnotationEditor._round(savedHeight * factor); + if (newWidth === savedWidth && newHeight === savedHeight) { + return; + } + this.#initialRect ||= [savedX, savedY, savedWidth, savedHeight]; + const transfCenterPoint = transf(savedWidth / 2, savedHeight / 2); + const centerX = AnnotationEditor._round(savedX + transfCenterPoint[0]); + const centerY = AnnotationEditor._round(savedY + transfCenterPoint[1]); + const newTransfCenterPoint = transf(newWidth / 2, newHeight / 2); + this.x = centerX - newTransfCenterPoint[0]; + this.y = centerY - newTransfCenterPoint[1]; + this.width = newWidth; + this.height = newHeight; + this.setDims(); + this.fixAndSetPosition(); + this._onResizing(); + } + #touchPinchEndCallback() { + this.#altText?.toggle(true); + this.parent.togglePointerEvents(true); + this.#addResizeToUndoStack(); + } + pointerdown(event) { + const { + isMac + } = util_FeatureTest.platform; + if (event.button !== 0 || event.ctrlKey && isMac) { + event.preventDefault(); + return; + } + this.#hasBeenClicked = true; + if (this._isDraggable) { + this.#setUpDragSession(event); + return; + } + this.#selectOnPointerEvent(event); + } + #selectOnPointerEvent(event) { + const { + isMac + } = util_FeatureTest.platform; + if (event.ctrlKey && !isMac || event.shiftKey || event.metaKey && isMac) { + this.parent.toggleSelected(this); + } else { + this.parent.setSelected(this); + } + } + #setUpDragSession(event) { + const { + isSelected + } = this; + this._uiManager.setUpDragSession(); + let hasDraggingStarted = false; + const ac = new AbortController(); + const signal = this._uiManager.combinedSignal(ac); + const opts = { + capture: true, + passive: false, + signal + }; + const cancelDrag = e => { + ac.abort(); + this.#dragPointerId = null; + this.#hasBeenClicked = false; + if (!this._uiManager.endDragSession()) { + this.#selectOnPointerEvent(e); + } + if (hasDraggingStarted) { + this._onStopDragging(); + } + }; + if (isSelected) { + this.#prevDragX = event.clientX; + this.#prevDragY = event.clientY; + this.#dragPointerId = event.pointerId; + this.#dragPointerType = event.pointerType; + window.addEventListener("pointermove", e => { + if (!hasDraggingStarted) { + hasDraggingStarted = true; + this._uiManager.toggleComment(this, true, false); + this._onStartDragging(); + } + const { + clientX: x, + clientY: y, + pointerId + } = e; + if (pointerId !== this.#dragPointerId) { + stopEvent(e); + return; + } + const [tx, ty] = this.screenToPageTranslation(x - this.#prevDragX, y - this.#prevDragY); + this.#prevDragX = x; + this.#prevDragY = y; + this._uiManager.dragSelectedEditors(tx, ty); + }, opts); + window.addEventListener("touchmove", stopEvent, opts); + window.addEventListener("pointerdown", e => { + if (e.pointerType === this.#dragPointerType) { + if (this.#touchManager || e.isPrimary) { + cancelDrag(e); + } + } + stopEvent(e); + }, opts); + } + const pointerUpCallback = e => { + if (!this.#dragPointerId || this.#dragPointerId === e.pointerId) { + cancelDrag(e); + return; + } + stopEvent(e); + }; + window.addEventListener("pointerup", pointerUpCallback, { + signal + }); + window.addEventListener("blur", pointerUpCallback, { + signal + }); + } + _onStartDragging() {} + _onStopDragging() {} + moveInDOM() { + if (this.#moveInDOMTimeout) { + clearTimeout(this.#moveInDOMTimeout); + } + this.#moveInDOMTimeout = setTimeout(() => { + this.#moveInDOMTimeout = null; + this.parent?.moveEditorInDOM(this); + }, 0); + } + _setParentAndPosition(parent, x, y) { + parent.changeParent(this); + this.x = x; + this.y = y; + this.fixAndSetPosition(); + this._onTranslated(); + } + getRect(tx, ty, rotation = this.rotation) { + const scale = this.parentScale; + const [pageWidth, pageHeight] = this.pageDimensions; + const [pageX, pageY] = this.pageTranslation; + const shiftX = tx / scale; + const shiftY = ty / scale; + const x = this.x * pageWidth; + const y = this.y * pageHeight; + const width = this.width * pageWidth; + const height = this.height * pageHeight; + switch (rotation) { + case 0: + return [x + shiftX + pageX, pageHeight - y - shiftY - height + pageY, x + shiftX + width + pageX, pageHeight - y - shiftY + pageY]; + case 90: + return [x + shiftY + pageX, pageHeight - y + shiftX + pageY, x + shiftY + height + pageX, pageHeight - y + shiftX + width + pageY]; + case 180: + return [x - shiftX - width + pageX, pageHeight - y + shiftY + pageY, x - shiftX + pageX, pageHeight - y + shiftY + height + pageY]; + case 270: + return [x - shiftY - height + pageX, pageHeight - y - shiftX - width + pageY, x - shiftY + pageX, pageHeight - y - shiftX + pageY]; + default: + throw new Error("Invalid rotation"); + } + } + getRectInCurrentCoords(rect, pageHeight) { + const [x1, y1, x2, y2] = rect; + const width = x2 - x1; + const height = y2 - y1; + switch (this.rotation) { + case 0: + return [x1, pageHeight - y2, width, height]; + case 90: + return [x1, pageHeight - y1, height, width]; + case 180: + return [x2, pageHeight - y1, width, height]; + case 270: + return [x2, pageHeight - y2, height, width]; + default: + throw new Error("Invalid rotation"); + } + } + getPDFRect() { + return this.getRect(0, 0); + } + getNonHCMColor() { + return this.color && AnnotationEditor._colorManager.convert(this._uiManager.getNonHCMColor(this.color)); + } + onUpdatedColor() { + this.#comment?.onUpdatedColor(); + } + getData() { + const { + comment: { + text: str, + color, + date, + opacity, + deleted, + richText + }, + uid: id, + pageIndex, + creationDate, + modificationDate + } = this; + return { + id, + pageIndex, + rect: this.getPDFRect(), + richText, + contentsObj: { + str + }, + creationDate, + modificationDate: date || modificationDate, + popupRef: !deleted, + color, + opacity + }; + } + onceAdded(focus) {} + isEmpty() { + return false; + } + enableEditMode() { + if (this.isInEditMode()) { + return false; + } + this.parent.setEditingState(false); + this.#isInEditMode = true; + return true; + } + disableEditMode() { + if (!this.isInEditMode()) { + return false; + } + this.parent.setEditingState(true); + this.#isInEditMode = false; + return true; + } + isInEditMode() { + return this.#isInEditMode; + } + shouldGetKeyboardEvents() { + return this.#isResizerEnabledForKeyboard; + } + needsToBeRebuilt() { + return this.div && !this.isAttachedToDOM; + } + get isOnScreen() { + const { + top, + left, + bottom, + right + } = this.getClientDimensions(); + const { + innerHeight, + innerWidth + } = window; + return left < innerWidth && right > 0 && top < innerHeight && bottom > 0; + } + #addFocusListeners() { + if (this.#focusAC || !this.div) { + return; + } + this.#focusAC = new AbortController(); + const signal = this._uiManager.combinedSignal(this.#focusAC); + this.div.addEventListener("focusin", this.focusin.bind(this), { + signal + }); + this.div.addEventListener("focusout", this.focusout.bind(this), { + signal + }); + } + rebuild() { + this.#addFocusListeners(); + } + rotate(_angle) {} + resize() {} + serializeDeleted() { + return { + id: this.annotationElementId, + deleted: true, + pageIndex: this.pageIndex, + popupRef: this._initialData?.popupRef || "" + }; + } + serialize(isForCopying = false, context = null) { + return { + annotationType: this.mode, + pageIndex: this.pageIndex, + rect: this.getPDFRect(), + rotation: this.rotation, + structTreeParentId: this._structTreeParentId, + popupRef: this._initialData?.popupRef || "" + }; + } + static async deserialize(data, parent, uiManager) { + const editor = new this.prototype.constructor({ + parent, + id: parent.getNextId(), + uiManager, + annotationElementId: data.annotationElementId, + creationDate: data.creationDate, + modificationDate: data.modificationDate + }); + editor.rotation = data.rotation; + editor.#accessibilityData = data.accessibilityData; + editor._isCopy = data.isCopy || false; + const [pageWidth, pageHeight] = editor.pageDimensions; + const [x, y, width, height] = editor.getRectInCurrentCoords(data.rect, pageHeight); + editor.x = x / pageWidth; + editor.y = y / pageHeight; + editor.width = width / pageWidth; + editor.height = height / pageHeight; + return editor; + } + get hasBeenModified() { + return !!this.annotationElementId && (this.deleted || this.serialize() !== null); + } + remove() { + this.#focusAC?.abort(); + this.#focusAC = null; + if (!this.isEmpty()) { + this.commit(); + } + if (this.parent) { + this.parent.remove(this); + } else { + this._uiManager.removeEditor(this); + } + this.hideCommentPopup(); + if (this.#moveInDOMTimeout) { + clearTimeout(this.#moveInDOMTimeout); + this.#moveInDOMTimeout = null; + } + this.#stopResizing(); + this.removeEditToolbar(); + if (this.#telemetryTimeouts) { + for (const timeout of this.#telemetryTimeouts.values()) { + clearTimeout(timeout); + } + this.#telemetryTimeouts = null; + } + this.parent = null; + this.#touchManager?.destroy(); + this.#touchManager = null; + this.#fakeAnnotation?.remove(); + this.#fakeAnnotation = null; + } + get isResizable() { + return false; + } + makeResizable() { + if (this.isResizable) { + this.#createResizers(); + this.#resizersDiv.classList.remove("hidden"); + } + } + get toolbarPosition() { + return null; + } + get commentButtonPosition() { + return this._uiManager.direction === "ltr" ? [1, 0] : [0, 0]; + } + get commentButtonPositionInPage() { + const { + commentButtonPosition: [posX, posY] + } = this; + const [blX, blY, trX, trY] = this.getPDFRect(); + return [AnnotationEditor._round(blX + (trX - blX) * posX), AnnotationEditor._round(blY + (trY - blY) * (1 - posY))]; + } + get commentButtonColor() { + return this._uiManager.makeCommentColor(this.getNonHCMColor(), this.opacity); + } + get commentPopupPosition() { + return this.#comment.commentPopupPositionInLayer; + } + set commentPopupPosition(pos) { + this.#comment.commentPopupPositionInLayer = pos; + } + hasDefaultPopupPosition() { + return this.#comment.hasDefaultPopupPosition(); + } + get commentButtonWidth() { + return this.#comment.commentButtonWidth; + } + get elementBeforePopup() { + return this.div; + } + setCommentButtonStates(options) { + this.#comment?.setCommentButtonStates(options); + } + keydown(event) { + if (!this.isResizable || event.target !== this.div || event.key !== "Enter") { + return; + } + this._uiManager.setSelected(this); + this.#savedDimensions = { + savedX: this.x, + savedY: this.y, + savedWidth: this.width, + savedHeight: this.height + }; + const children = this.#resizersDiv.children; + if (!this.#allResizerDivs) { + this.#allResizerDivs = Array.from(children); + const boundResizerKeydown = this.#resizerKeydown.bind(this); + const boundResizerBlur = this.#resizerBlur.bind(this); + const signal = this._uiManager._signal; + for (const div of this.#allResizerDivs) { + const name = div.getAttribute("data-resizer-name"); + div.setAttribute("role", "spinbutton"); + div.addEventListener("keydown", boundResizerKeydown, { + signal + }); + div.addEventListener("blur", boundResizerBlur, { + signal + }); + div.addEventListener("focus", this.#resizerFocus.bind(this, name), { + signal + }); + div.setAttribute("data-l10n-id", AnnotationEditor._l10nResizer[name]); + } + } + const first = this.#allResizerDivs[0]; + let firstPosition = 0; + for (const div of children) { + if (div === first) { + break; + } + firstPosition++; + } + const nextFirstPosition = (360 - this.rotation + this.parentRotation) % 360 / 90 * (this.#allResizerDivs.length / 4); + if (nextFirstPosition !== firstPosition) { + if (nextFirstPosition < firstPosition) { + for (let i = 0; i < firstPosition - nextFirstPosition; i++) { + this.#resizersDiv.append(this.#resizersDiv.firstChild); + } + } else if (nextFirstPosition > firstPosition) { + for (let i = 0; i < nextFirstPosition - firstPosition; i++) { + this.#resizersDiv.firstChild.before(this.#resizersDiv.lastChild); + } + } + let i = 0; + for (const child of children) { + const div = this.#allResizerDivs[i++]; + const name = div.getAttribute("data-resizer-name"); + child.setAttribute("data-l10n-id", AnnotationEditor._l10nResizer[name]); + } + } + this.#setResizerTabIndex(0); + this.#isResizerEnabledForKeyboard = true; + this.#resizersDiv.firstChild.focus({ + focusVisible: true + }); + event.preventDefault(); + event.stopImmediatePropagation(); + } + #resizerKeydown(event) { + AnnotationEditor._resizerKeyboardManager.exec(this, event); + } + #resizerBlur(event) { + if (this.#isResizerEnabledForKeyboard && event.relatedTarget?.parentNode !== this.#resizersDiv) { + this.#stopResizing(); + } + } + #resizerFocus(name) { + this.#focusedResizerName = this.#isResizerEnabledForKeyboard ? name : ""; + } + #setResizerTabIndex(value) { + if (!this.#allResizerDivs) { + return; + } + for (const div of this.#allResizerDivs) { + div.tabIndex = value; + } + } + _resizeWithKeyboard(x, y) { + if (!this.#isResizerEnabledForKeyboard) { + return; + } + this.#resizerPointermove(this.#focusedResizerName, { + deltaX: x, + deltaY: y, + fromKeyboard: true + }); + } + #stopResizing() { + this.#isResizerEnabledForKeyboard = false; + this.#setResizerTabIndex(-1); + this.#addResizeToUndoStack(); + } + _stopResizingWithKeyboard() { + this.#stopResizing(); + this.div.focus(); + } + select() { + if (this.isSelected && this._editToolbar) { + this._editToolbar.show(); + return; + } + this.isSelected = true; + this.makeResizable(); + this.div?.classList.add("selectedEditor"); + if (!this._editToolbar) { + this.addEditToolbar().then(() => { + if (this.div?.classList.contains("selectedEditor")) { + this._editToolbar?.show(); + } + }); + return; + } + this._editToolbar?.show(); + this.#altText?.toggleAltTextBadge(false); + } + focus() { + if (this.div && !this.div.contains(document.activeElement)) { + setTimeout(() => this.div?.focus({ + preventScroll: true + }), 0); + } + } + unselect() { + if (!this.isSelected) { + return; + } + this.isSelected = false; + this.#resizersDiv?.classList.add("hidden"); + this.div?.classList.remove("selectedEditor"); + if (this.div?.contains(document.activeElement)) { + this._uiManager.currentLayer.div.focus({ + preventScroll: true + }); + } + this._editToolbar?.hide(); + this.#altText?.toggleAltTextBadge(true); + this.hideCommentPopup(); + } + hideCommentPopup() { + if (this.hasComment) { + this._uiManager.toggleComment(null); + } + } + updateParams(type, value) {} + disableEditing() {} + enableEditing() {} + get canChangeContent() { + return false; + } + enterInEditMode() { + if (!this.canChangeContent) { + return; + } + this.enableEditMode(); + this.div.focus(); + } + dblclick(event) { + if (event.target.nodeName === "BUTTON") { + return; + } + this.enterInEditMode(); + this.parent.updateToolbar({ + mode: this.constructor._editorType, + editId: this.uid + }); + } + getElementForAltText() { + return this.div; + } + get contentDiv() { + return this.div; + } + get isEditing() { + return this.#isEditing; + } + set isEditing(value) { + this.#isEditing = value; + if (!this.parent) { + return; + } + if (value) { + this.parent.setSelected(this); + this.parent.setActiveEditor(this); + } else { + this.parent.setActiveEditor(null); + } + } + static get MIN_SIZE() { + return 16; + } + static canCreateNewEmptyEditor() { + return true; + } + get telemetryInitialData() { + return { + action: "added" + }; + } + get telemetryFinalData() { + return null; + } + _reportTelemetry(data, mustWait = false) { + if (mustWait) { + this.#telemetryTimeouts ||= new Map(); + const { + action + } = data; + let timeout = this.#telemetryTimeouts.get(action); + if (timeout) { + clearTimeout(timeout); + } + timeout = setTimeout(() => { + this._reportTelemetry(data); + this.#telemetryTimeouts.delete(action); + if (this.#telemetryTimeouts.size === 0) { + this.#telemetryTimeouts = null; + } + }, AnnotationEditor._telemetryTimeout); + this.#telemetryTimeouts.set(action, timeout); + return; + } + data.type ||= this.editorType; + this._uiManager._eventBus.dispatch("reporttelemetry", { + source: this, + details: { + type: "editing", + data + } + }); + } + show(visible = this._isVisible) { + this.div.classList.toggle("hidden", !visible); + this._isVisible = visible; + } + enable() { + if (this.div) { + this.div.tabIndex = 0; + } + this.#disabled = false; + } + disable() { + if (this.div) { + this.div.tabIndex = -1; + } + this.#disabled = true; + } + updateFakeAnnotationElement(annotationLayer) { + if (!this.#fakeAnnotation && !this.deleted) { + this.#fakeAnnotation = annotationLayer.addFakeAnnotation(this); + return; + } + if (this.deleted) { + this.#fakeAnnotation.remove(); + this.#fakeAnnotation = null; + return; + } + if (this.hasEditedComment || this._hasBeenMoved || this._hasBeenResized) { + this.#fakeAnnotation.updateEdited({ + rect: this.getPDFRect(), + popup: this.comment + }); + } + } + renderAnnotationElement(annotation) { + if (this.deleted) { + annotation.hide(); + return null; + } + let content = annotation.container.querySelector(".annotationContent"); + if (!content) { + content = document.createElement("div"); + content.classList.add("annotationContent", this.editorType); + annotation.container.prepend(content); + } else if (content.nodeName === "CANVAS") { + const canvas = content; + content = document.createElement("div"); + content.classList.add("annotationContent", this.editorType); + canvas.before(content); + } + return content; + } + resetAnnotationElement(annotation) { + const { + firstChild + } = annotation.container; + if (firstChild?.nodeName === "DIV" && firstChild.classList.contains("annotationContent")) { + firstChild.remove(); + } + } +} +class FakeEditor extends AnnotationEditor { + constructor(params) { + super(params); + this.annotationElementId = params.annotationElementId; + this.deleted = true; + } + serialize() { + return this.serializeDeleted(); + } +} + +;// ./src/shared/murmurhash3.js +const SEED = 0xc3d2e1f0; +const MASK_HIGH = 0xffff0000; +const MASK_LOW = 0xffff; +class MurmurHash3_64 { + constructor(seed) { + this.h1 = seed ? seed & 0xffffffff : SEED; + this.h2 = seed ? seed & 0xffffffff : SEED; + } + update(input) { + let data, length; + if (typeof input === "string") { + data = new Uint8Array(input.length * 2); + length = 0; + for (let i = 0, ii = input.length; i < ii; i++) { + const code = input.charCodeAt(i); + if (code <= 0xff) { + data[length++] = code; + } else { + data[length++] = code >>> 8; + data[length++] = code & 0xff; + } + } + } else if (ArrayBuffer.isView(input)) { + data = input.slice(); + length = data.byteLength; + } else { + throw new Error("Invalid data format, must be a string or TypedArray."); + } + const blockCounts = length >> 2; + const tailLength = length - blockCounts * 4; + const dataUint32 = new Uint32Array(data.buffer, 0, blockCounts); + let k1 = 0, + k2 = 0; + let h1 = this.h1, + h2 = this.h2; + const C1 = 0xcc9e2d51, + C2 = 0x1b873593; + const C1_LOW = C1 & MASK_LOW, + C2_LOW = C2 & MASK_LOW; + for (let i = 0; i < blockCounts; i++) { + if (i & 1) { + k1 = dataUint32[i]; + k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW; + k1 = k1 << 15 | k1 >>> 17; + k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW; + h1 ^= k1; + h1 = h1 << 13 | h1 >>> 19; + h1 = h1 * 5 + 0xe6546b64; + } else { + k2 = dataUint32[i]; + k2 = k2 * C1 & MASK_HIGH | k2 * C1_LOW & MASK_LOW; + k2 = k2 << 15 | k2 >>> 17; + k2 = k2 * C2 & MASK_HIGH | k2 * C2_LOW & MASK_LOW; + h2 ^= k2; + h2 = h2 << 13 | h2 >>> 19; + h2 = h2 * 5 + 0xe6546b64; + } + } + k1 = 0; + switch (tailLength) { + case 3: + k1 ^= data[blockCounts * 4 + 2] << 16; + case 2: + k1 ^= data[blockCounts * 4 + 1] << 8; + case 1: + k1 ^= data[blockCounts * 4]; + k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW; + k1 = k1 << 15 | k1 >>> 17; + k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW; + if (blockCounts & 1) { + h1 ^= k1; + } else { + h2 ^= k1; + } + } + this.h1 = h1; + this.h2 = h2; + } + hexdigest() { + let h1 = this.h1, + h2 = this.h2; + h1 ^= h2 >>> 1; + h1 = h1 * 0xed558ccd & MASK_HIGH | h1 * 0x8ccd & MASK_LOW; + h2 = h2 * 0xff51afd7 & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xafd7ed55 & MASK_HIGH) >>> 16; + h1 ^= h2 >>> 1; + h1 = h1 * 0x1a85ec53 & MASK_HIGH | h1 * 0xec53 & MASK_LOW; + h2 = h2 * 0xc4ceb9fe & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xb9fe1a85 & MASK_HIGH) >>> 16; + h1 ^= h2 >>> 1; + return (h1 >>> 0).toString(16).padStart(8, "0") + (h2 >>> 0).toString(16).padStart(8, "0"); + } +} + +;// ./src/display/annotation_storage.js + + + +const SerializableEmpty = Object.freeze({ + map: null, + hash: "", + transfer: undefined +}); +class AnnotationStorage { + #modified = false; + #modifiedIds = null; + #editorsMap = null; + #storage = new Map(); + constructor() { + this.onSetModified = null; + this.onResetModified = null; + this.onAnnotationEditor = null; + } + getValue(key, defaultValue) { + const value = this.#storage.get(key); + if (value === undefined) { + return defaultValue; + } + return Object.assign(defaultValue, value); + } + getRawValue(key) { + return this.#storage.get(key); + } + remove(key) { + const storedValue = this.#storage.get(key); + if (storedValue === undefined) { + return; + } + if (storedValue instanceof AnnotationEditor) { + this.#editorsMap.delete(storedValue.annotationElementId); + } + this.#storage.delete(key); + if (this.#storage.size === 0) { + this.resetModified(); + } + if (typeof this.onAnnotationEditor === "function") { + for (const value of this.#storage.values()) { + if (value instanceof AnnotationEditor) { + return; + } + } + this.onAnnotationEditor(null); + } + } + setValue(key, value) { + const obj = this.#storage.get(key); + let modified = false; + if (obj !== undefined) { + for (const [entry, val] of Object.entries(value)) { + if (obj[entry] !== val) { + modified = true; + obj[entry] = val; + } + } + } else { + modified = true; + this.#storage.set(key, value); + } + if (modified) { + this.#setModified(); + } + if (value instanceof AnnotationEditor) { + (this.#editorsMap ||= new Map()).set(value.annotationElementId, value); + if (typeof this.onAnnotationEditor === "function") { + this.onAnnotationEditor(value.constructor._type); + } + } + } + has(key) { + return this.#storage.has(key); + } + get size() { + return this.#storage.size; + } + #setModified() { + if (!this.#modified) { + this.#modified = true; + if (typeof this.onSetModified === "function") { + this.onSetModified(); + } + } + } + resetModified() { + if (this.#modified) { + this.#modified = false; + if (typeof this.onResetModified === "function") { + this.onResetModified(); + } + } + } + get print() { + return new PrintAnnotationStorage(this); + } + get serializable() { + if (this.#storage.size === 0) { + return SerializableEmpty; + } + const map = new Map(), + hash = new MurmurHash3_64(), + transfer = []; + const context = Object.create(null); + let hasBitmap = false; + for (const [key, val] of this.#storage) { + const serialized = val instanceof AnnotationEditor ? val.serialize(false, context) : val; + if (serialized) { + map.set(key, serialized); + hash.update(`${key}:${JSON.stringify(serialized)}`); + hasBitmap ||= !!serialized.bitmap; + } + } + if (hasBitmap) { + for (const value of map.values()) { + if (value.bitmap) { + transfer.push(value.bitmap); + } + } + } + return map.size > 0 ? { + map, + hash: hash.hexdigest(), + transfer + } : SerializableEmpty; + } + get editorStats() { + let stats = null; + const typeToEditor = new Map(); + let numberOfEditedComments = 0; + let numberOfDeletedComments = 0; + for (const value of this.#storage.values()) { + if (!(value instanceof AnnotationEditor)) { + if (value.popup) { + if (value.popup.deleted) { + numberOfDeletedComments += 1; + } else { + numberOfEditedComments += 1; + } + } + continue; + } + if (value.isCommentDeleted) { + numberOfDeletedComments += 1; + } else if (value.hasEditedComment) { + numberOfEditedComments += 1; + } + const editorStats = value.telemetryFinalData; + if (!editorStats) { + continue; + } + const { + type + } = editorStats; + if (!typeToEditor.has(type)) { + typeToEditor.set(type, Object.getPrototypeOf(value).constructor); + } + stats ||= Object.create(null); + const map = stats[type] ||= new Map(); + for (const [key, val] of Object.entries(editorStats)) { + if (key === "type") { + continue; + } + let counters = map.get(key); + if (!counters) { + counters = new Map(); + map.set(key, counters); + } + const count = counters.get(val) ?? 0; + counters.set(val, count + 1); + } + } + if (numberOfDeletedComments > 0 || numberOfEditedComments > 0) { + stats ||= Object.create(null); + stats.comments = { + deleted: numberOfDeletedComments, + edited: numberOfEditedComments + }; + } + if (!stats) { + return null; + } + for (const [type, editor] of typeToEditor) { + stats[type] = editor.computeTelemetryFinalData(stats[type]); + } + return stats; + } + resetModifiedIds() { + this.#modifiedIds = null; + } + updateEditor(annotationId, data) { + const value = this.#editorsMap?.get(annotationId); + if (value) { + value.updateFromAnnotationLayer(data); + return true; + } + return false; + } + getEditor(annotationId) { + return this.#editorsMap?.get(annotationId) || null; + } + get modifiedIds() { + if (this.#modifiedIds) { + return this.#modifiedIds; + } + const ids = []; + if (this.#editorsMap) { + for (const value of this.#editorsMap.values()) { + if (!value.serialize()) { + continue; + } + ids.push(value.annotationElementId); + } + } + return this.#modifiedIds = { + ids: new Set(ids), + hash: ids.join(",") + }; + } + [Symbol.iterator]() { + return this.#storage.entries(); + } +} +class PrintAnnotationStorage extends AnnotationStorage { + #serializable; + constructor(parent) { + super(); + const { + map, + hash, + transfer + } = parent.serializable; + const clone = structuredClone(map, transfer ? { + transfer + } : null); + this.#serializable = { + map: clone, + hash, + transfer + }; + } + get print() { + unreachable("Should not call PrintAnnotationStorage.print"); + } + get serializable() { + return this.#serializable; + } + get modifiedIds() { + return shadow(this, "modifiedIds", { + ids: new Set(), + hash: "" + }); + } +} + +;// ./src/display/font_loader.js + + +class FontLoader { + #systemFonts = new Set(); + constructor({ + ownerDocument = globalThis.document, + styleElement = null + }) { + this._document = ownerDocument; + this.nativeFontFaces = new Set(); + this.styleElement = null; + this.loadingRequests = []; + this.loadTestFontId = 0; + } + addNativeFontFace(nativeFontFace) { + this.nativeFontFaces.add(nativeFontFace); + this._document.fonts.add(nativeFontFace); + } + removeNativeFontFace(nativeFontFace) { + this.nativeFontFaces.delete(nativeFontFace); + this._document.fonts.delete(nativeFontFace); + } + insertRule(rule) { + if (!this.styleElement) { + this.styleElement = this._document.createElement("style"); + this._document.documentElement.getElementsByTagName("head")[0].append(this.styleElement); + } + const styleSheet = this.styleElement.sheet; + styleSheet.insertRule(rule, styleSheet.cssRules.length); + } + clear() { + for (const nativeFontFace of this.nativeFontFaces) { + this._document.fonts.delete(nativeFontFace); + } + this.nativeFontFaces.clear(); + this.#systemFonts.clear(); + if (this.styleElement) { + this.styleElement.remove(); + this.styleElement = null; + } + } + async loadSystemFont({ + systemFontInfo: info, + disableFontFace, + _inspectFont + }) { + if (!info || this.#systemFonts.has(info.loadedName)) { + return; + } + assert(!disableFontFace, "loadSystemFont shouldn't be called when `disableFontFace` is set."); + if (this.isFontLoadingAPISupported) { + const { + loadedName, + src, + style + } = info; + const fontFace = new FontFace(loadedName, src, style); + this.addNativeFontFace(fontFace); + try { + await fontFace.load(); + this.#systemFonts.add(loadedName); + _inspectFont?.(info); + } catch { + warn(`Cannot load system font: ${info.baseFontName}, installing it could help to improve PDF rendering.`); + this.removeNativeFontFace(fontFace); + } + return; + } + unreachable("Not implemented: loadSystemFont without the Font Loading API."); + } + async bind(font) { + if (font.attached || font.missingFile && !font.systemFontInfo) { + return; + } + font.attached = true; + if (font.systemFontInfo) { + await this.loadSystemFont(font); + return; + } + if (this.isFontLoadingAPISupported) { + const nativeFontFace = font.createNativeFontFace(); + if (nativeFontFace) { + this.addNativeFontFace(nativeFontFace); + try { + await nativeFontFace.loaded; + } catch (ex) { + warn(`Failed to load font '${nativeFontFace.family}': '${ex}'.`); + font.disableFontFace = true; + throw ex; + } + } + return; + } + const rule = font.createFontFaceRule(); + if (rule) { + this.insertRule(rule); + if (this.isSyncFontLoadingSupported) { + return; + } + await new Promise(resolve => { + const request = this._queueLoadingCallback(resolve); + this._prepareFontLoadEvent(font, request); + }); + } + } + get isFontLoadingAPISupported() { + const hasFonts = !!this._document?.fonts; + return shadow(this, "isFontLoadingAPISupported", hasFonts); + } + get isSyncFontLoadingSupported() { + return shadow(this, "isSyncFontLoadingSupported", isNodeJS || util_FeatureTest.platform.isFirefox); + } + _queueLoadingCallback(callback) { + function completeRequest() { + assert(!request.done, "completeRequest() cannot be called twice."); + request.done = true; + while (loadingRequests.length > 0 && loadingRequests[0].done) { + const otherRequest = loadingRequests.shift(); + setTimeout(otherRequest.callback, 0); + } + } + const { + loadingRequests + } = this; + const request = { + done: false, + complete: completeRequest, + callback + }; + loadingRequests.push(request); + return request; + } + get _loadTestFont() { + const testFont = atob("T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQA" + "FQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAA" + "ALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgA" + "AAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1" + "AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD" + "6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACM" + "AooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4D" + "IP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAA" + "AAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUA" + "AQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgAB" + "AAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABY" + "AAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAA" + "AC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAA" + "AAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQAC" + "AQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3" + "Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTj" + "FQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA=="); + return shadow(this, "_loadTestFont", testFont); + } + _prepareFontLoadEvent(font, request) { + function int32(data, offset) { + return data.charCodeAt(offset) << 24 | data.charCodeAt(offset + 1) << 16 | data.charCodeAt(offset + 2) << 8 | data.charCodeAt(offset + 3) & 0xff; + } + function spliceString(s, offset, remove, insert) { + const chunk1 = s.substring(0, offset); + const chunk2 = s.substring(offset + remove); + return chunk1 + insert + chunk2; + } + let i, ii; + const canvas = this._document.createElement("canvas"); + canvas.width = 1; + canvas.height = 1; + const ctx = canvas.getContext("2d"); + let called = 0; + function isFontReady(name, callback) { + if (++called > 30) { + warn("Load test font never loaded."); + callback(); + return; + } + ctx.font = "30px " + name; + ctx.fillText(".", 0, 20); + const imageData = ctx.getImageData(0, 0, 1, 1); + if (imageData.data[3] > 0) { + callback(); + return; + } + setTimeout(isFontReady.bind(null, name, callback)); + } + const loadTestFontId = `lt${Date.now()}${this.loadTestFontId++}`; + let data = this._loadTestFont; + const COMMENT_OFFSET = 976; + data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length, loadTestFontId); + const CFF_CHECKSUM_OFFSET = 16; + const XXXX_VALUE = 0x58585858; + let checksum = int32(data, CFF_CHECKSUM_OFFSET); + for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) { + checksum = checksum - XXXX_VALUE + int32(loadTestFontId, i) | 0; + } + if (i < loadTestFontId.length) { + checksum = checksum - XXXX_VALUE + int32(loadTestFontId + "XXX", i) | 0; + } + data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, string32(checksum)); + const url = `url(data:font/opentype;base64,${btoa(data)});`; + const rule = `@font-face {font-family:"${loadTestFontId}";src:${url}}`; + this.insertRule(rule); + const div = this._document.createElement("div"); + div.style.visibility = "hidden"; + div.style.width = div.style.height = "10px"; + div.style.position = "absolute"; + div.style.top = div.style.left = "0px"; + for (const name of [font.loadedName, loadTestFontId]) { + const span = this._document.createElement("span"); + span.textContent = "Hi"; + span.style.fontFamily = name; + div.append(span); + } + this._document.body.append(div); + isFontReady(loadTestFontId, () => { + div.remove(); + request.complete(); + }); + } +} +class FontFaceObject { + #fontData; + constructor(translatedData, inspectFont = null, extra, charProcOperatorList) { + this.compiledGlyphs = Object.create(null); + this.#fontData = translatedData; + this._inspectFont = inspectFont; + if (extra) { + Object.assign(this, extra); + } + if (charProcOperatorList) { + this.charProcOperatorList = charProcOperatorList; + } + } + createNativeFontFace() { + if (!this.data || this.disableFontFace) { + return null; + } + let nativeFontFace; + if (!this.cssFontInfo) { + nativeFontFace = new FontFace(this.loadedName, this.data, {}); + } else { + const css = { + weight: this.cssFontInfo.fontWeight + }; + if (this.cssFontInfo.italicAngle) { + css.style = `oblique ${this.cssFontInfo.italicAngle}deg`; + } + nativeFontFace = new FontFace(this.cssFontInfo.fontFamily, this.data, css); + } + this._inspectFont?.(this); + return nativeFontFace; + } + createFontFaceRule() { + if (!this.data || this.disableFontFace) { + return null; + } + const url = `url(data:${this.mimetype};base64,${toBase64Util(this.data)});`; + let rule; + if (!this.cssFontInfo) { + rule = `@font-face {font-family:"${this.loadedName}";src:${url}}`; + } else { + let css = `font-weight: ${this.cssFontInfo.fontWeight};`; + if (this.cssFontInfo.italicAngle) { + css += `font-style: oblique ${this.cssFontInfo.italicAngle}deg;`; + } + rule = `@font-face {font-family:"${this.cssFontInfo.fontFamily}";${css}src:${url}}`; + } + this._inspectFont?.(this, url); + return rule; + } + getPathGenerator(objs, character) { + if (this.compiledGlyphs[character] !== undefined) { + return this.compiledGlyphs[character]; + } + const objId = this.loadedName + "_path_" + character; + let cmds; + try { + cmds = objs.get(objId); + } catch (ex) { + warn(`getPathGenerator - ignoring character: "${ex}".`); + } + const path = makePathFromDrawOPS(cmds); + if (!this.fontExtraProperties) { + objs.delete(objId); + } + return this.compiledGlyphs[character] = path; + } + get black() { + return this.#fontData.black; + } + get bold() { + return this.#fontData.bold; + } + get disableFontFace() { + return this.#fontData.disableFontFace ?? false; + } + get fontExtraProperties() { + return this.#fontData.fontExtraProperties ?? false; + } + get isInvalidPDFjsFont() { + return this.#fontData.isInvalidPDFjsFont; + } + get isType3Font() { + return this.#fontData.isType3Font; + } + get italic() { + return this.#fontData.italic; + } + get missingFile() { + return this.#fontData.missingFile; + } + get remeasure() { + return this.#fontData.remeasure; + } + get vertical() { + return this.#fontData.vertical; + } + get ascent() { + return this.#fontData.ascent; + } + get defaultWidth() { + return this.#fontData.defaultWidth; + } + get descent() { + return this.#fontData.descent; + } + get bbox() { + return this.#fontData.bbox; + } + get fontMatrix() { + return this.#fontData.fontMatrix; + } + get fallbackName() { + return this.#fontData.fallbackName; + } + get loadedName() { + return this.#fontData.loadedName; + } + get mimetype() { + return this.#fontData.mimetype; + } + get name() { + return this.#fontData.name; + } + get data() { + return this.#fontData.data; + } + clearData() { + this.#fontData.clearData(); + } + get cssFontInfo() { + return this.#fontData.cssFontInfo; + } + get systemFontInfo() { + return this.#fontData.systemFontInfo; + } + get defaultVMetrics() { + return this.#fontData.defaultVMetrics; + } +} + +;// ./src/shared/obj-bin-transform.js + +class CssFontInfo { + #buffer; + #view; + #decoder; + static strings = ["fontFamily", "fontWeight", "italicAngle"]; + static write(info) { + const encoder = new TextEncoder(); + const encodedStrings = {}; + let stringsLength = 0; + for (const prop of CssFontInfo.strings) { + const encoded = encoder.encode(info[prop]); + encodedStrings[prop] = encoded; + stringsLength += 4 + encoded.length; + } + const buffer = new ArrayBuffer(stringsLength); + const data = new Uint8Array(buffer); + const view = new DataView(buffer); + let offset = 0; + for (const prop of CssFontInfo.strings) { + const encoded = encodedStrings[prop]; + const length = encoded.length; + view.setUint32(offset, length); + data.set(encoded, offset + 4); + offset += 4 + length; + } + assert(offset === buffer.byteLength, "CssFontInfo.write: Buffer overflow"); + return buffer; + } + constructor(buffer) { + this.#buffer = buffer; + this.#view = new DataView(this.#buffer); + this.#decoder = new TextDecoder(); + } + #readString(index) { + assert(index < CssFontInfo.strings.length, "Invalid string index"); + let offset = 0; + for (let i = 0; i < index; i++) { + offset += this.#view.getUint32(offset) + 4; + } + const length = this.#view.getUint32(offset); + return this.#decoder.decode(new Uint8Array(this.#buffer, offset + 4, length)); + } + get fontFamily() { + return this.#readString(0); + } + get fontWeight() { + return this.#readString(1); + } + get italicAngle() { + return this.#readString(2); + } +} +class SystemFontInfo { + #buffer; + #view; + #decoder; + static strings = ["css", "loadedName", "baseFontName", "src"]; + static write(info) { + const encoder = new TextEncoder(); + const encodedStrings = {}; + let stringsLength = 0; + for (const prop of SystemFontInfo.strings) { + const encoded = encoder.encode(info[prop]); + encodedStrings[prop] = encoded; + stringsLength += 4 + encoded.length; + } + stringsLength += 4; + let encodedStyleStyle, + encodedStyleWeight, + lengthEstimate = 1 + stringsLength; + if (info.style) { + encodedStyleStyle = encoder.encode(info.style.style); + encodedStyleWeight = encoder.encode(info.style.weight); + lengthEstimate += 4 + encodedStyleStyle.length + 4 + encodedStyleWeight.length; + } + const buffer = new ArrayBuffer(lengthEstimate); + const data = new Uint8Array(buffer); + const view = new DataView(buffer); + let offset = 0; + view.setUint8(offset++, info.guessFallback ? 1 : 0); + view.setUint32(offset, 0); + offset += 4; + stringsLength = 0; + for (const prop of SystemFontInfo.strings) { + const encoded = encodedStrings[prop]; + const length = encoded.length; + stringsLength += 4 + length; + view.setUint32(offset, length); + data.set(encoded, offset + 4); + offset += 4 + length; + } + view.setUint32(offset - stringsLength - 4, stringsLength); + if (info.style) { + view.setUint32(offset, encodedStyleStyle.length); + data.set(encodedStyleStyle, offset + 4); + offset += 4 + encodedStyleStyle.length; + view.setUint32(offset, encodedStyleWeight.length); + data.set(encodedStyleWeight, offset + 4); + offset += 4 + encodedStyleWeight.length; + } + assert(offset <= buffer.byteLength, "SubstitionInfo.write: Buffer overflow"); + return buffer.transferToFixedLength(offset); + } + constructor(buffer) { + this.#buffer = buffer; + this.#view = new DataView(this.#buffer); + this.#decoder = new TextDecoder(); + } + get guessFallback() { + return this.#view.getUint8(0) !== 0; + } + #readString(index) { + assert(index < SystemFontInfo.strings.length, "Invalid string index"); + let offset = 5; + for (let i = 0; i < index; i++) { + offset += this.#view.getUint32(offset) + 4; + } + const length = this.#view.getUint32(offset); + return this.#decoder.decode(new Uint8Array(this.#buffer, offset + 4, length)); + } + get css() { + return this.#readString(0); + } + get loadedName() { + return this.#readString(1); + } + get baseFontName() { + return this.#readString(2); + } + get src() { + return this.#readString(3); + } + get style() { + let offset = 1; + offset += 4 + this.#view.getUint32(offset); + const styleLength = this.#view.getUint32(offset); + const style = this.#decoder.decode(new Uint8Array(this.#buffer, offset + 4, styleLength)); + offset += 4 + styleLength; + const weightLength = this.#view.getUint32(offset); + const weight = this.#decoder.decode(new Uint8Array(this.#buffer, offset + 4, weightLength)); + return { + style, + weight + }; + } +} +class FontInfo { + static bools = ["black", "bold", "disableFontFace", "fontExtraProperties", "isInvalidPDFjsFont", "isType3Font", "italic", "missingFile", "remeasure", "vertical"]; + static numbers = ["ascent", "defaultWidth", "descent"]; + static strings = ["fallbackName", "loadedName", "mimetype", "name"]; + static #OFFSET_NUMBERS = Math.ceil(this.bools.length * 2 / 8); + static #OFFSET_BBOX = this.#OFFSET_NUMBERS + this.numbers.length * 8; + static #OFFSET_FONT_MATRIX = this.#OFFSET_BBOX + 1 + 2 * 4; + static #OFFSET_DEFAULT_VMETRICS = this.#OFFSET_FONT_MATRIX + 1 + 8 * 6; + static #OFFSET_STRINGS = this.#OFFSET_DEFAULT_VMETRICS + 1 + 2 * 3; + #buffer; + #decoder; + #view; + constructor({ + data, + extra + }) { + this.#buffer = data; + this.#decoder = new TextDecoder(); + this.#view = new DataView(this.#buffer); + if (extra) { + Object.assign(this, extra); + } + } + #readBoolean(index) { + assert(index < FontInfo.bools.length, "Invalid boolean index"); + const byteOffset = Math.floor(index / 4); + const bitOffset = index * 2 % 8; + const value = this.#view.getUint8(byteOffset) >> bitOffset & 0x03; + return value === 0x00 ? undefined : value === 0x02; + } + get black() { + return this.#readBoolean(0); + } + get bold() { + return this.#readBoolean(1); + } + get disableFontFace() { + return this.#readBoolean(2); + } + get fontExtraProperties() { + return this.#readBoolean(3); + } + get isInvalidPDFjsFont() { + return this.#readBoolean(4); + } + get isType3Font() { + return this.#readBoolean(5); + } + get italic() { + return this.#readBoolean(6); + } + get missingFile() { + return this.#readBoolean(7); + } + get remeasure() { + return this.#readBoolean(8); + } + get vertical() { + return this.#readBoolean(9); + } + #readNumber(index) { + assert(index < FontInfo.numbers.length, "Invalid number index"); + return this.#view.getFloat64(FontInfo.#OFFSET_NUMBERS + index * 8); + } + get ascent() { + return this.#readNumber(0); + } + get defaultWidth() { + return this.#readNumber(1); + } + get descent() { + return this.#readNumber(2); + } + get bbox() { + let offset = FontInfo.#OFFSET_BBOX; + const numCoords = this.#view.getUint8(offset); + if (numCoords === 0) { + return undefined; + } + offset += 1; + const bbox = []; + for (let i = 0; i < 4; i++) { + bbox.push(this.#view.getInt16(offset, true)); + offset += 2; + } + return bbox; + } + get fontMatrix() { + let offset = FontInfo.#OFFSET_FONT_MATRIX; + const numPoints = this.#view.getUint8(offset); + if (numPoints === 0) { + return undefined; + } + offset += 1; + const fontMatrix = []; + for (let i = 0; i < 6; i++) { + fontMatrix.push(this.#view.getFloat64(offset, true)); + offset += 8; + } + return fontMatrix; + } + get defaultVMetrics() { + let offset = FontInfo.#OFFSET_DEFAULT_VMETRICS; + const numMetrics = this.#view.getUint8(offset); + if (numMetrics === 0) { + return undefined; + } + offset += 1; + const defaultVMetrics = []; + for (let i = 0; i < 3; i++) { + defaultVMetrics.push(this.#view.getInt16(offset, true)); + offset += 2; + } + return defaultVMetrics; + } + #readString(index) { + assert(index < FontInfo.strings.length, "Invalid string index"); + let offset = FontInfo.#OFFSET_STRINGS + 4; + for (let i = 0; i < index; i++) { + offset += this.#view.getUint32(offset) + 4; + } + const length = this.#view.getUint32(offset); + const stringData = new Uint8Array(length); + stringData.set(new Uint8Array(this.#buffer, offset + 4, length)); + return this.#decoder.decode(stringData); + } + get fallbackName() { + return this.#readString(0); + } + get loadedName() { + return this.#readString(1); + } + get mimetype() { + return this.#readString(2); + } + get name() { + return this.#readString(3); + } + get data() { + let offset = FontInfo.#OFFSET_STRINGS; + const stringsLength = this.#view.getUint32(offset); + offset += 4 + stringsLength; + const systemFontInfoLength = this.#view.getUint32(offset); + offset += 4 + systemFontInfoLength; + const cssFontInfoLength = this.#view.getUint32(offset); + offset += 4 + cssFontInfoLength; + const length = this.#view.getUint32(offset); + if (length === 0) { + return undefined; + } + return new Uint8Array(this.#buffer, offset + 4, length); + } + clearData() { + let offset = FontInfo.#OFFSET_STRINGS; + const stringsLength = this.#view.getUint32(offset); + offset += 4 + stringsLength; + const systemFontInfoLength = this.#view.getUint32(offset); + offset += 4 + systemFontInfoLength; + const cssFontInfoLength = this.#view.getUint32(offset); + offset += 4 + cssFontInfoLength; + const length = this.#view.getUint32(offset); + const data = new Uint8Array(this.#buffer, offset + 4, length); + data.fill(0); + this.#view.setUint32(offset, 0); + } + get cssFontInfo() { + let offset = FontInfo.#OFFSET_STRINGS; + const stringsLength = this.#view.getUint32(offset); + offset += 4 + stringsLength; + const systemFontInfoLength = this.#view.getUint32(offset); + offset += 4 + systemFontInfoLength; + const cssFontInfoLength = this.#view.getUint32(offset); + if (cssFontInfoLength === 0) { + return null; + } + const cssFontInfoData = new Uint8Array(cssFontInfoLength); + cssFontInfoData.set(new Uint8Array(this.#buffer, offset + 4, cssFontInfoLength)); + return new CssFontInfo(cssFontInfoData.buffer); + } + get systemFontInfo() { + let offset = FontInfo.#OFFSET_STRINGS; + const stringsLength = this.#view.getUint32(offset); + offset += 4 + stringsLength; + const systemFontInfoLength = this.#view.getUint32(offset); + if (systemFontInfoLength === 0) { + return null; + } + const systemFontInfoData = new Uint8Array(systemFontInfoLength); + systemFontInfoData.set(new Uint8Array(this.#buffer, offset + 4, systemFontInfoLength)); + return new SystemFontInfo(systemFontInfoData.buffer); + } + static write(font) { + const systemFontInfoBuffer = font.systemFontInfo ? SystemFontInfo.write(font.systemFontInfo) : null; + const cssFontInfoBuffer = font.cssFontInfo ? CssFontInfo.write(font.cssFontInfo) : null; + const encoder = new TextEncoder(); + const encodedStrings = {}; + let stringsLength = 0; + for (const prop of FontInfo.strings) { + encodedStrings[prop] = encoder.encode(font[prop]); + stringsLength += 4 + encodedStrings[prop].length; + } + const lengthEstimate = FontInfo.#OFFSET_STRINGS + 4 + stringsLength + 4 + (systemFontInfoBuffer ? systemFontInfoBuffer.byteLength : 0) + 4 + (cssFontInfoBuffer ? cssFontInfoBuffer.byteLength : 0) + 4 + (font.data ? font.data.length : 0); + const buffer = new ArrayBuffer(lengthEstimate); + const data = new Uint8Array(buffer); + const view = new DataView(buffer); + let offset = 0; + const numBools = FontInfo.bools.length; + let boolByte = 0, + boolBit = 0; + for (let i = 0; i < numBools; i++) { + const value = font[FontInfo.bools[i]]; + const bits = value === undefined ? 0x00 : value ? 0x02 : 0x01; + boolByte |= bits << boolBit; + boolBit += 2; + if (boolBit === 8 || i === numBools - 1) { + view.setUint8(offset++, boolByte); + boolByte = 0; + boolBit = 0; + } + } + assert(offset === FontInfo.#OFFSET_NUMBERS, "FontInfo.write: Boolean properties offset mismatch"); + for (const prop of FontInfo.numbers) { + view.setFloat64(offset, font[prop]); + offset += 8; + } + assert(offset === FontInfo.#OFFSET_BBOX, "FontInfo.write: Number properties offset mismatch"); + if (font.bbox) { + view.setUint8(offset++, 4); + for (const coord of font.bbox) { + view.setInt16(offset, coord, true); + offset += 2; + } + } else { + view.setUint8(offset++, 0); + offset += 2 * 4; + } + assert(offset === FontInfo.#OFFSET_FONT_MATRIX, "FontInfo.write: BBox properties offset mismatch"); + if (font.fontMatrix) { + view.setUint8(offset++, 6); + for (const point of font.fontMatrix) { + view.setFloat64(offset, point, true); + offset += 8; + } + } else { + view.setUint8(offset++, 0); + offset += 8 * 6; + } + assert(offset === FontInfo.#OFFSET_DEFAULT_VMETRICS, "FontInfo.write: FontMatrix properties offset mismatch"); + if (font.defaultVMetrics) { + view.setUint8(offset++, 1); + for (const metric of font.defaultVMetrics) { + view.setInt16(offset, metric, true); + offset += 2; + } + } else { + view.setUint8(offset++, 0); + offset += 3 * 2; + } + assert(offset === FontInfo.#OFFSET_STRINGS, "FontInfo.write: DefaultVMetrics properties offset mismatch"); + view.setUint32(FontInfo.#OFFSET_STRINGS, 0); + offset += 4; + for (const prop of FontInfo.strings) { + const encoded = encodedStrings[prop]; + const length = encoded.length; + view.setUint32(offset, length); + data.set(encoded, offset + 4); + offset += 4 + length; + } + view.setUint32(FontInfo.#OFFSET_STRINGS, offset - FontInfo.#OFFSET_STRINGS - 4); + if (!systemFontInfoBuffer) { + view.setUint32(offset, 0); + offset += 4; + } else { + const length = systemFontInfoBuffer.byteLength; + view.setUint32(offset, length); + assert(offset + 4 + length <= buffer.byteLength, "FontInfo.write: Buffer overflow at systemFontInfo"); + data.set(new Uint8Array(systemFontInfoBuffer), offset + 4); + offset += 4 + length; + } + if (!cssFontInfoBuffer) { + view.setUint32(offset, 0); + offset += 4; + } else { + const length = cssFontInfoBuffer.byteLength; + view.setUint32(offset, length); + assert(offset + 4 + length <= buffer.byteLength, "FontInfo.write: Buffer overflow at cssFontInfo"); + data.set(new Uint8Array(cssFontInfoBuffer), offset + 4); + offset += 4 + length; + } + if (font.data === undefined) { + view.setUint32(offset, 0); + offset += 4; + } else { + view.setUint32(offset, font.data.length); + data.set(font.data, offset + 4); + offset += 4 + font.data.length; + } + assert(offset <= buffer.byteLength, "FontInfo.write: Buffer overflow"); + return buffer.transferToFixedLength(offset); + } +} +class PatternInfo { + static #KIND = 0; + static #HAS_BBOX = 1; + static #HAS_BACKGROUND = 2; + static #SHADING_TYPE = 3; + static #N_COORD = 4; + static #N_COLOR = 8; + static #N_STOP = 12; + static #N_FIGURES = 16; + constructor(buffer) { + this.buffer = buffer; + this.view = new DataView(buffer); + this.data = new Uint8Array(buffer); + } + static write(ir) { + let kind, + bbox = null, + coords = [], + colors = [], + colorStops = [], + figures = [], + shadingType = null, + background = null; + switch (ir[0]) { + case "RadialAxial": + kind = ir[1] === "axial" ? 1 : 2; + bbox = ir[2]; + colorStops = ir[3]; + if (kind === 1) { + coords.push(...ir[4], ...ir[5]); + } else { + coords.push(ir[4][0], ir[4][1], ir[6], ir[5][0], ir[5][1], ir[7]); + } + break; + case "Mesh": + kind = 3; + shadingType = ir[1]; + coords = ir[2]; + colors = ir[3]; + figures = ir[4] || []; + bbox = ir[6]; + background = ir[7]; + break; + default: + throw new Error(`Unsupported pattern type: ${ir[0]}`); + } + const nCoord = Math.floor(coords.length / 2); + const nColor = Math.floor(colors.length / 3); + const nStop = colorStops.length; + const nFigures = figures.length; + let figuresSize = 0; + for (const figure of figures) { + figuresSize += 1; + figuresSize = Math.ceil(figuresSize / 4) * 4; + figuresSize += 4 + figure.coords.length * 4; + figuresSize += 4 + figure.colors.length * 4; + if (figure.verticesPerRow !== undefined) { + figuresSize += 4; + } + } + const byteLen = 20 + nCoord * 8 + nColor * 3 + nStop * 8 + (bbox ? 16 : 0) + (background ? 3 : 0) + figuresSize; + const buffer = new ArrayBuffer(byteLen); + const dataView = new DataView(buffer); + const u8data = new Uint8Array(buffer); + dataView.setUint8(PatternInfo.#KIND, kind); + dataView.setUint8(PatternInfo.#HAS_BBOX, bbox ? 1 : 0); + dataView.setUint8(PatternInfo.#HAS_BACKGROUND, background ? 1 : 0); + dataView.setUint8(PatternInfo.#SHADING_TYPE, shadingType); + dataView.setUint32(PatternInfo.#N_COORD, nCoord, true); + dataView.setUint32(PatternInfo.#N_COLOR, nColor, true); + dataView.setUint32(PatternInfo.#N_STOP, nStop, true); + dataView.setUint32(PatternInfo.#N_FIGURES, nFigures, true); + let offset = 20; + const coordsView = new Float32Array(buffer, offset, nCoord * 2); + coordsView.set(coords); + offset += nCoord * 8; + u8data.set(colors, offset); + offset += nColor * 3; + for (const [pos, hex] of colorStops) { + dataView.setFloat32(offset, pos, true); + offset += 4; + dataView.setUint32(offset, parseInt(hex.slice(1), 16), true); + offset += 4; + } + if (bbox) { + for (const v of bbox) { + dataView.setFloat32(offset, v, true); + offset += 4; + } + } + if (background) { + u8data.set(background, offset); + offset += 3; + } + for (let i = 0; i < figures.length; i++) { + const figure = figures[i]; + dataView.setUint8(offset, figure.type); + offset += 1; + offset = Math.ceil(offset / 4) * 4; + dataView.setUint32(offset, figure.coords.length, true); + offset += 4; + const figureCoordsView = new Int32Array(buffer, offset, figure.coords.length); + figureCoordsView.set(figure.coords); + offset += figure.coords.length * 4; + dataView.setUint32(offset, figure.colors.length, true); + offset += 4; + const colorsView = new Int32Array(buffer, offset, figure.colors.length); + colorsView.set(figure.colors); + offset += figure.colors.length * 4; + if (figure.verticesPerRow !== undefined) { + dataView.setUint32(offset, figure.verticesPerRow, true); + offset += 4; + } + } + return buffer; + } + getIR() { + const dataView = this.view; + const kind = this.data[PatternInfo.#KIND]; + const hasBBox = !!this.data[PatternInfo.#HAS_BBOX]; + const hasBackground = !!this.data[PatternInfo.#HAS_BACKGROUND]; + const nCoord = dataView.getUint32(PatternInfo.#N_COORD, true); + const nColor = dataView.getUint32(PatternInfo.#N_COLOR, true); + const nStop = dataView.getUint32(PatternInfo.#N_STOP, true); + const nFigures = dataView.getUint32(PatternInfo.#N_FIGURES, true); + let offset = 20; + const coords = new Float32Array(this.buffer, offset, nCoord * 2); + offset += nCoord * 8; + const colors = new Uint8Array(this.buffer, offset, nColor * 3); + offset += nColor * 3; + const stops = []; + for (let i = 0; i < nStop; ++i) { + const p = dataView.getFloat32(offset, true); + offset += 4; + const rgb = dataView.getUint32(offset, true); + offset += 4; + stops.push([p, `#${rgb.toString(16).padStart(6, "0")}`]); + } + let bbox = null; + if (hasBBox) { + bbox = []; + for (let i = 0; i < 4; ++i) { + bbox.push(dataView.getFloat32(offset, true)); + offset += 4; + } + } + let background = null; + if (hasBackground) { + background = new Uint8Array(this.buffer, offset, 3); + offset += 3; + } + const figures = []; + for (let i = 0; i < nFigures; ++i) { + const type = dataView.getUint8(offset); + offset += 1; + offset = Math.ceil(offset / 4) * 4; + const coordsLength = dataView.getUint32(offset, true); + offset += 4; + const figureCoords = new Int32Array(this.buffer, offset, coordsLength); + offset += coordsLength * 4; + const colorsLength = dataView.getUint32(offset, true); + offset += 4; + const figureColors = new Int32Array(this.buffer, offset, colorsLength); + offset += colorsLength * 4; + const figure = { + type, + coords: figureCoords, + colors: figureColors + }; + if (type === MeshFigureType.LATTICE) { + figure.verticesPerRow = dataView.getUint32(offset, true); + offset += 4; + } + figures.push(figure); + } + if (kind === 1) { + return ["RadialAxial", "axial", bbox, stops, Array.from(coords.slice(0, 2)), Array.from(coords.slice(2, 4)), null, null]; + } + if (kind === 2) { + return ["RadialAxial", "radial", bbox, stops, [coords[0], coords[1]], [coords[3], coords[4]], coords[2], coords[5]]; + } + if (kind === 3) { + const shadingType = this.data[PatternInfo.#SHADING_TYPE]; + let bounds = null; + if (coords.length > 0) { + let minX = coords[0], + maxX = coords[0]; + let minY = coords[1], + maxY = coords[1]; + for (let i = 0; i < coords.length; i += 2) { + const x = coords[i], + y = coords[i + 1]; + minX = minX > x ? x : minX; + minY = minY > y ? y : minY; + maxX = maxX < x ? x : maxX; + maxY = maxY < y ? y : maxY; + } + bounds = [minX, minY, maxX, maxY]; + } + return ["Mesh", shadingType, coords, colors, figures, bounds, bbox, background]; + } + throw new Error(`Unsupported pattern kind: ${kind}`); + } +} + +;// ./src/display/api_utils.js + +function getUrlProp(val) { + if (val instanceof URL) { + return val.href; + } + if (typeof val === "string") { + if (isNodeJS) { + return val; + } + const url = URL.parse(val, window.location); + if (url) { + return url.href; + } + } + throw new Error("Invalid PDF url data: " + "either string or URL-object is expected in the url property."); +} +function getDataProp(val) { + if (isNodeJS && typeof Buffer !== "undefined" && val instanceof Buffer) { + throw new Error("Please provide binary data as `Uint8Array`, rather than `Buffer`."); + } + if (val instanceof Uint8Array && val.byteLength === val.buffer.byteLength) { + return val; + } + if (typeof val === "string") { + return stringToBytes(val); + } + if (val instanceof ArrayBuffer || ArrayBuffer.isView(val) || typeof val === "object" && !isNaN(val?.length)) { + return new Uint8Array(val); + } + throw new Error("Invalid PDF binary data: either TypedArray, " + "string, or array-like object is expected in the data property."); +} +function getFactoryUrlProp(val) { + if (typeof val !== "string") { + return null; + } + if (val.endsWith("/")) { + return val; + } + throw new Error(`Invalid factory url: "${val}" must include trailing slash.`); +} +const isRefProxy = v => typeof v === "object" && Number.isInteger(v?.num) && v.num >= 0 && Number.isInteger(v?.gen) && v.gen >= 0; +const isNameProxy = v => typeof v === "object" && typeof v?.name === "string"; +const isValidExplicitDest = _isValidExplicitDest.bind(null, isRefProxy, isNameProxy); +class LoopbackPort { + #listeners = new Map(); + #deferred = Promise.resolve(); + postMessage(obj, transfer) { + const event = { + data: structuredClone(obj, transfer ? { + transfer + } : null) + }; + this.#deferred.then(() => { + for (const [listener] of this.#listeners) { + listener.call(this, event); + } + }); + } + addEventListener(name, listener, options = null) { + let rmAbort = null; + if (options?.signal instanceof AbortSignal) { + const { + signal + } = options; + if (signal.aborted) { + warn("LoopbackPort - cannot use an `aborted` signal."); + return; + } + const onAbort = () => this.removeEventListener(name, listener); + rmAbort = () => signal.removeEventListener("abort", onAbort); + signal.addEventListener("abort", onAbort); + } + this.#listeners.set(listener, rmAbort); + } + removeEventListener(name, listener) { + const rmAbort = this.#listeners.get(listener); + rmAbort?.(); + this.#listeners.delete(listener); + } + terminate() { + for (const [, rmAbort] of this.#listeners) { + rmAbort?.(); + } + this.#listeners.clear(); + } +} + +;// ./src/shared/message_handler.js + +const CallbackKind = { + DATA: 1, + ERROR: 2 +}; +const StreamKind = { + CANCEL: 1, + CANCEL_COMPLETE: 2, + CLOSE: 3, + ENQUEUE: 4, + ERROR: 5, + PULL: 6, + PULL_COMPLETE: 7, + START_COMPLETE: 8 +}; +function onFn() {} +function wrapReason(ex) { + if (ex instanceof AbortException || ex instanceof InvalidPDFException || ex instanceof PasswordException || ex instanceof ResponseException || ex instanceof UnknownErrorException) { + return ex; + } + if (!(ex instanceof Error || typeof ex === "object" && ex !== null)) { + unreachable('wrapReason: Expected "reason" to be a (possibly cloned) Error.'); + } + switch (ex.name) { + case "AbortException": + return new AbortException(ex.message); + case "InvalidPDFException": + return new InvalidPDFException(ex.message); + case "PasswordException": + return new PasswordException(ex.message, ex.code); + case "ResponseException": + return new ResponseException(ex.message, ex.status, ex.missing); + case "UnknownErrorException": + return new UnknownErrorException(ex.message, ex.details); + } + return new UnknownErrorException(ex.message, ex.toString()); +} +class MessageHandler { + #messageAC = new AbortController(); + constructor(sourceName, targetName, comObj) { + this.sourceName = sourceName; + this.targetName = targetName; + this.comObj = comObj; + this.callbackId = 1; + this.streamId = 1; + this.streamSinks = Object.create(null); + this.streamControllers = Object.create(null); + this.callbackCapabilities = Object.create(null); + this.actionHandler = Object.create(null); + comObj.addEventListener("message", this.#onMessage.bind(this), { + signal: this.#messageAC.signal + }); + } + #onMessage({ + data + }) { + if (data.targetName !== this.sourceName) { + return; + } + if (data.stream) { + this.#processStreamMessage(data); + return; + } + if (data.callback) { + const callbackId = data.callbackId; + const capability = this.callbackCapabilities[callbackId]; + if (!capability) { + throw new Error(`Cannot resolve callback ${callbackId}`); + } + delete this.callbackCapabilities[callbackId]; + if (data.callback === CallbackKind.DATA) { + capability.resolve(data.data); + } else if (data.callback === CallbackKind.ERROR) { + capability.reject(wrapReason(data.reason)); + } else { + throw new Error("Unexpected callback case"); + } + return; + } + const action = this.actionHandler[data.action]; + if (!action) { + throw new Error(`Unknown action from worker: ${data.action}`); + } + if (data.callbackId) { + const sourceName = this.sourceName, + targetName = data.sourceName, + comObj = this.comObj; + Promise.try(action, data.data).then(function (result) { + comObj.postMessage({ + sourceName, + targetName, + callback: CallbackKind.DATA, + callbackId: data.callbackId, + data: result + }); + }, function (reason) { + comObj.postMessage({ + sourceName, + targetName, + callback: CallbackKind.ERROR, + callbackId: data.callbackId, + reason: wrapReason(reason) + }); + }); + return; + } + if (data.streamId) { + this.#createStreamSink(data); + return; + } + action(data.data); + } + on(actionName, handler) { + const ah = this.actionHandler; + if (ah[actionName]) { + throw new Error(`There is already an actionName called "${actionName}"`); + } + ah[actionName] = handler; + } + send(actionName, data, transfers) { + this.comObj.postMessage({ + sourceName: this.sourceName, + targetName: this.targetName, + action: actionName, + data + }, transfers); + } + sendWithPromise(actionName, data, transfers) { + const callbackId = this.callbackId++; + const capability = Promise.withResolvers(); + this.callbackCapabilities[callbackId] = capability; + try { + this.comObj.postMessage({ + sourceName: this.sourceName, + targetName: this.targetName, + action: actionName, + callbackId, + data + }, transfers); + } catch (ex) { + capability.reject(ex); + } + return capability.promise; + } + sendWithStream(actionName, data, queueingStrategy, transfers) { + const streamId = this.streamId++, + sourceName = this.sourceName, + targetName = this.targetName, + comObj = this.comObj; + return new ReadableStream({ + start: controller => { + const startCapability = Promise.withResolvers(); + this.streamControllers[streamId] = { + controller, + startCall: startCapability, + pullCall: null, + cancelCall: null, + isClosed: false + }; + comObj.postMessage({ + sourceName, + targetName, + action: actionName, + streamId, + data, + desiredSize: controller.desiredSize + }, transfers); + return startCapability.promise; + }, + pull: controller => { + const pullCapability = Promise.withResolvers(); + this.streamControllers[streamId].pullCall = pullCapability; + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.PULL, + streamId, + desiredSize: controller.desiredSize + }); + return pullCapability.promise; + }, + cancel: reason => { + assert(reason instanceof Error, "cancel must have a valid reason"); + const cancelCapability = Promise.withResolvers(); + this.streamControllers[streamId].cancelCall = cancelCapability; + this.streamControllers[streamId].isClosed = true; + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.CANCEL, + streamId, + reason: wrapReason(reason) + }); + return cancelCapability.promise; + } + }, queueingStrategy); + } + #createStreamSink(data) { + const streamId = data.streamId, + sourceName = this.sourceName, + targetName = data.sourceName, + comObj = this.comObj; + const self = this, + action = this.actionHandler[data.action]; + const streamSink = { + enqueue(chunk, size = 1, transfers) { + if (this.isCancelled) { + return; + } + const lastDesiredSize = this.desiredSize; + this.desiredSize -= size; + if (lastDesiredSize > 0 && this.desiredSize <= 0) { + this.sinkCapability = Promise.withResolvers(); + this.ready = this.sinkCapability.promise; + } + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.ENQUEUE, + streamId, + chunk + }, transfers); + }, + close() { + if (this.isCancelled) { + return; + } + this.isCancelled = true; + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.CLOSE, + streamId + }); + delete self.streamSinks[streamId]; + }, + error(reason) { + assert(reason instanceof Error, "error must have a valid reason"); + if (this.isCancelled) { + return; + } + this.isCancelled = true; + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.ERROR, + streamId, + reason: wrapReason(reason) + }); + }, + sinkCapability: Promise.withResolvers(), + onPull: null, + onCancel: null, + isCancelled: false, + desiredSize: data.desiredSize, + ready: null + }; + streamSink.sinkCapability.resolve(); + streamSink.ready = streamSink.sinkCapability.promise; + this.streamSinks[streamId] = streamSink; + Promise.try(action, data.data, streamSink).then(function () { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.START_COMPLETE, + streamId, + success: true + }); + }, function (reason) { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.START_COMPLETE, + streamId, + reason: wrapReason(reason) + }); + }); + } + #processStreamMessage(data) { + const streamId = data.streamId, + sourceName = this.sourceName, + targetName = data.sourceName, + comObj = this.comObj; + const streamController = this.streamControllers[streamId], + streamSink = this.streamSinks[streamId]; + switch (data.stream) { + case StreamKind.START_COMPLETE: + if (data.success) { + streamController.startCall.resolve(); + } else { + streamController.startCall.reject(wrapReason(data.reason)); + } + break; + case StreamKind.PULL_COMPLETE: + if (data.success) { + streamController.pullCall.resolve(); + } else { + streamController.pullCall.reject(wrapReason(data.reason)); + } + break; + case StreamKind.PULL: + if (!streamSink) { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.PULL_COMPLETE, + streamId, + success: true + }); + break; + } + if (streamSink.desiredSize <= 0 && data.desiredSize > 0) { + streamSink.sinkCapability.resolve(); + } + streamSink.desiredSize = data.desiredSize; + Promise.try(streamSink.onPull || onFn).then(function () { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.PULL_COMPLETE, + streamId, + success: true + }); + }, function (reason) { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.PULL_COMPLETE, + streamId, + reason: wrapReason(reason) + }); + }); + break; + case StreamKind.ENQUEUE: + assert(streamController, "enqueue should have stream controller"); + if (streamController.isClosed) { + break; + } + streamController.controller.enqueue(data.chunk); + break; + case StreamKind.CLOSE: + assert(streamController, "close should have stream controller"); + if (streamController.isClosed) { + break; + } + streamController.isClosed = true; + streamController.controller.close(); + this.#deleteStreamController(streamController, streamId); + break; + case StreamKind.ERROR: + assert(streamController, "error should have stream controller"); + streamController.controller.error(wrapReason(data.reason)); + this.#deleteStreamController(streamController, streamId); + break; + case StreamKind.CANCEL_COMPLETE: + if (data.success) { + streamController.cancelCall.resolve(); + } else { + streamController.cancelCall.reject(wrapReason(data.reason)); + } + this.#deleteStreamController(streamController, streamId); + break; + case StreamKind.CANCEL: + if (!streamSink) { + break; + } + const dataReason = wrapReason(data.reason); + Promise.try(streamSink.onCancel || onFn, dataReason).then(function () { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.CANCEL_COMPLETE, + streamId, + success: true + }); + }, function (reason) { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.CANCEL_COMPLETE, + streamId, + reason: wrapReason(reason) + }); + }); + streamSink.sinkCapability.reject(dataReason); + streamSink.isCancelled = true; + delete this.streamSinks[streamId]; + break; + default: + throw new Error("Unexpected stream case"); + } + } + async #deleteStreamController(streamController, streamId) { + await Promise.allSettled([streamController.startCall?.promise, streamController.pullCall?.promise, streamController.cancelCall?.promise]); + delete this.streamControllers[streamId]; + } + destroy() { + this.#messageAC?.abort(); + this.#messageAC = null; + } +} + +;// ./src/display/canvas_factory.js + +class BaseCanvasFactory { + #enableHWA = false; + constructor({ + enableHWA = false + }) { + this.#enableHWA = enableHWA; + } + create(width, height) { + if (width <= 0 || height <= 0) { + throw new Error("Invalid canvas size"); + } + const canvas = this._createCanvas(width, height); + return { + canvas, + context: canvas.getContext("2d", { + willReadFrequently: !this.#enableHWA + }) + }; + } + reset(canvasAndContext, width, height) { + if (!canvasAndContext.canvas) { + throw new Error("Canvas is not specified"); + } + if (width <= 0 || height <= 0) { + throw new Error("Invalid canvas size"); + } + canvasAndContext.canvas.width = width; + canvasAndContext.canvas.height = height; + } + destroy(canvasAndContext) { + if (!canvasAndContext.canvas) { + throw new Error("Canvas is not specified"); + } + canvasAndContext.canvas.width = 0; + canvasAndContext.canvas.height = 0; + canvasAndContext.canvas = null; + canvasAndContext.context = null; + } + _createCanvas(width, height) { + unreachable("Abstract method `_createCanvas` called."); + } +} +class DOMCanvasFactory extends BaseCanvasFactory { + constructor({ + ownerDocument = globalThis.document, + enableHWA = false + }) { + super({ + enableHWA + }); + this._document = ownerDocument; + } + _createCanvas(width, height) { + const canvas = this._document.createElement("canvas"); + canvas.width = width; + canvas.height = height; + return canvas; + } +} + +;// ./src/display/cmap_reader_factory.js + + +class BaseCMapReaderFactory { + constructor({ + baseUrl = null, + isCompressed = true + }) { + this.baseUrl = baseUrl; + this.isCompressed = isCompressed; + } + async fetch({ + name + }) { + if (!this.baseUrl) { + throw new Error("Ensure that the `cMapUrl` and `cMapPacked` API parameters are provided."); + } + if (!name) { + throw new Error("CMap name must be specified."); + } + const url = this.baseUrl + name + (this.isCompressed ? ".bcmap" : ""); + return this._fetch(url).then(cMapData => ({ + cMapData, + isCompressed: this.isCompressed + })).catch(reason => { + throw new Error(`Unable to load ${this.isCompressed ? "binary " : ""}CMap at: ${url}`); + }); + } + async _fetch(url) { + unreachable("Abstract method `_fetch` called."); + } +} +class DOMCMapReaderFactory extends BaseCMapReaderFactory { + async _fetch(url) { + const data = await fetchData(url, this.isCompressed ? "arraybuffer" : "text"); + return data instanceof ArrayBuffer ? new Uint8Array(data) : stringToBytes(data); + } +} + +;// ./src/display/filter_factory.js + + +class BaseFilterFactory { + addFilter(maps) { + return "none"; + } + addHCMFilter(fgColor, bgColor) { + return "none"; + } + addAlphaFilter(map) { + return "none"; + } + addLuminosityFilter(map) { + return "none"; + } + addHighlightHCMFilter(filterName, fgColor, bgColor, newFgColor, newBgColor) { + return "none"; + } + destroy(keepHCM = false) {} +} +class DOMFilterFactory extends BaseFilterFactory { + #baseUrl; + #_cache; + #_defs; + #docId; + #document; + #_hcmCache; + #id = 0; + constructor({ + docId, + ownerDocument = globalThis.document + }) { + super(); + this.#docId = docId; + this.#document = ownerDocument; + } + get #cache() { + return this.#_cache ||= new Map(); + } + get #hcmCache() { + return this.#_hcmCache ||= new Map(); + } + get #defs() { + if (!this.#_defs) { + const div = this.#document.createElement("div"); + const { + style + } = div; + style.visibility = "hidden"; + style.contain = "strict"; + style.width = style.height = 0; + style.position = "absolute"; + style.top = style.left = 0; + style.zIndex = -1; + const svg = this.#document.createElementNS(SVG_NS, "svg"); + svg.setAttribute("width", 0); + svg.setAttribute("height", 0); + this.#_defs = this.#document.createElementNS(SVG_NS, "defs"); + div.append(svg); + svg.append(this.#_defs); + this.#document.body.append(div); + } + return this.#_defs; + } + #createTables(maps) { + if (maps.length === 1) { + const mapR = maps[0]; + const buffer = new Array(256); + for (let i = 0; i < 256; i++) { + buffer[i] = mapR[i] / 255; + } + const table = buffer.join(","); + return [table, table, table]; + } + const [mapR, mapG, mapB] = maps; + const bufferR = new Array(256); + const bufferG = new Array(256); + const bufferB = new Array(256); + for (let i = 0; i < 256; i++) { + bufferR[i] = mapR[i] / 255; + bufferG[i] = mapG[i] / 255; + bufferB[i] = mapB[i] / 255; + } + return [bufferR.join(","), bufferG.join(","), bufferB.join(",")]; + } + #createUrl(id) { + if (this.#baseUrl === undefined) { + this.#baseUrl = ""; + const url = this.#document.URL; + if (url !== this.#document.baseURI) { + if (isDataScheme(url)) { + warn('#createUrl: ignore "data:"-URL for performance reasons.'); + } else { + this.#baseUrl = updateUrlHash(url, ""); + } + } + } + return `url(${this.#baseUrl}#${id})`; + } + addFilter(maps) { + if (!maps) { + return "none"; + } + let value = this.#cache.get(maps); + if (value) { + return value; + } + const [tableR, tableG, tableB] = this.#createTables(maps); + const key = maps.length === 1 ? tableR : `${tableR}${tableG}${tableB}`; + value = this.#cache.get(key); + if (value) { + this.#cache.set(maps, value); + return value; + } + const id = `g_${this.#docId}_transfer_map_${this.#id++}`; + const url = this.#createUrl(id); + this.#cache.set(maps, url); + this.#cache.set(key, url); + const filter = this.#createFilter(id); + this.#addTransferMapConversion(tableR, tableG, tableB, filter); + return url; + } + addHCMFilter(fgColor, bgColor) { + const key = `${fgColor}-${bgColor}`; + const filterName = "base"; + let info = this.#hcmCache.get(filterName); + if (info?.key === key) { + return info.url; + } + if (info) { + info.filter?.remove(); + info.key = key; + info.url = "none"; + info.filter = null; + } else { + info = { + key, + url: "none", + filter: null + }; + this.#hcmCache.set(filterName, info); + } + if (!fgColor || !bgColor) { + return info.url; + } + const fgRGB = this.#getRGB(fgColor); + fgColor = Util.makeHexColor(...fgRGB); + const bgRGB = this.#getRGB(bgColor); + bgColor = Util.makeHexColor(...bgRGB); + this.#defs.style.color = ""; + if (fgColor === "#000000" && bgColor === "#ffffff" || fgColor === bgColor) { + return info.url; + } + const map = new Array(256); + for (let i = 0; i <= 255; i++) { + const x = i / 255; + map[i] = x <= 0.03928 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4; + } + const table = map.join(","); + const id = `g_${this.#docId}_hcm_filter`; + const filter = info.filter = this.#createFilter(id); + this.#addTransferMapConversion(table, table, table, filter); + this.#addGrayConversion(filter); + const getSteps = (c, n) => { + const start = fgRGB[c] / 255; + const end = bgRGB[c] / 255; + const arr = new Array(n + 1); + for (let i = 0; i <= n; i++) { + arr[i] = start + i / n * (end - start); + } + return arr.join(","); + }; + this.#addTransferMapConversion(getSteps(0, 5), getSteps(1, 5), getSteps(2, 5), filter); + info.url = this.#createUrl(id); + return info.url; + } + addAlphaFilter(map) { + let value = this.#cache.get(map); + if (value) { + return value; + } + const [tableA] = this.#createTables([map]); + const key = `alpha_${tableA}`; + value = this.#cache.get(key); + if (value) { + this.#cache.set(map, value); + return value; + } + const id = `g_${this.#docId}_alpha_map_${this.#id++}`; + const url = this.#createUrl(id); + this.#cache.set(map, url); + this.#cache.set(key, url); + const filter = this.#createFilter(id); + this.#addTransferMapAlphaConversion(tableA, filter); + return url; + } + addLuminosityFilter(map) { + let value = this.#cache.get(map || "luminosity"); + if (value) { + return value; + } + let tableA, key; + if (map) { + [tableA] = this.#createTables([map]); + key = `luminosity_${tableA}`; + } else { + key = "luminosity"; + } + value = this.#cache.get(key); + if (value) { + this.#cache.set(map, value); + return value; + } + const id = `g_${this.#docId}_luminosity_map_${this.#id++}`; + const url = this.#createUrl(id); + this.#cache.set(map, url); + this.#cache.set(key, url); + const filter = this.#createFilter(id); + this.#addLuminosityConversion(filter); + if (map) { + this.#addTransferMapAlphaConversion(tableA, filter); + } + return url; + } + addHighlightHCMFilter(filterName, fgColor, bgColor, newFgColor, newBgColor) { + const key = `${fgColor}-${bgColor}-${newFgColor}-${newBgColor}`; + let info = this.#hcmCache.get(filterName); + if (info?.key === key) { + return info.url; + } + if (info) { + info.filter?.remove(); + info.key = key; + info.url = "none"; + info.filter = null; + } else { + info = { + key, + url: "none", + filter: null + }; + this.#hcmCache.set(filterName, info); + } + if (!fgColor || !bgColor) { + return info.url; + } + const [fgRGB, bgRGB] = [fgColor, bgColor].map(this.#getRGB.bind(this)); + let fgGray = Math.round(0.2126 * fgRGB[0] + 0.7152 * fgRGB[1] + 0.0722 * fgRGB[2]); + let bgGray = Math.round(0.2126 * bgRGB[0] + 0.7152 * bgRGB[1] + 0.0722 * bgRGB[2]); + let [newFgRGB, newBgRGB] = [newFgColor, newBgColor].map(this.#getRGB.bind(this)); + if (bgGray < fgGray) { + [fgGray, bgGray, newFgRGB, newBgRGB] = [bgGray, fgGray, newBgRGB, newFgRGB]; + } + this.#defs.style.color = ""; + const getSteps = (fg, bg, n) => { + const arr = new Array(256); + const step = (bgGray - fgGray) / n; + const newStart = fg / 255; + const newStep = (bg - fg) / (255 * n); + let prev = 0; + for (let i = 0; i <= n; i++) { + const k = Math.round(fgGray + i * step); + const value = newStart + i * newStep; + for (let j = prev; j <= k; j++) { + arr[j] = value; + } + prev = k + 1; + } + for (let i = prev; i < 256; i++) { + arr[i] = arr[prev - 1]; + } + return arr.join(","); + }; + const id = `g_${this.#docId}_hcm_${filterName}_filter`; + const filter = info.filter = this.#createFilter(id); + this.#addGrayConversion(filter); + this.#addTransferMapConversion(getSteps(newFgRGB[0], newBgRGB[0], 5), getSteps(newFgRGB[1], newBgRGB[1], 5), getSteps(newFgRGB[2], newBgRGB[2], 5), filter); + info.url = this.#createUrl(id); + return info.url; + } + destroy(keepHCM = false) { + if (keepHCM && this.#_hcmCache?.size) { + return; + } + this.#_defs?.parentNode.parentNode.remove(); + this.#_defs = null; + this.#_cache?.clear(); + this.#_cache = null; + this.#_hcmCache?.clear(); + this.#_hcmCache = null; + this.#id = 0; + } + #addLuminosityConversion(filter) { + const feColorMatrix = this.#document.createElementNS(SVG_NS, "feColorMatrix"); + feColorMatrix.setAttribute("type", "matrix"); + feColorMatrix.setAttribute("values", "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.59 0.11 0 0"); + filter.append(feColorMatrix); + } + #addGrayConversion(filter) { + const feColorMatrix = this.#document.createElementNS(SVG_NS, "feColorMatrix"); + feColorMatrix.setAttribute("type", "matrix"); + feColorMatrix.setAttribute("values", "0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0"); + filter.append(feColorMatrix); + } + #createFilter(id) { + const filter = this.#document.createElementNS(SVG_NS, "filter"); + filter.setAttribute("color-interpolation-filters", "sRGB"); + filter.setAttribute("id", id); + this.#defs.append(filter); + return filter; + } + #appendFeFunc(feComponentTransfer, func, table) { + const feFunc = this.#document.createElementNS(SVG_NS, func); + feFunc.setAttribute("type", "discrete"); + feFunc.setAttribute("tableValues", table); + feComponentTransfer.append(feFunc); + } + #addTransferMapConversion(rTable, gTable, bTable, filter) { + const feComponentTransfer = this.#document.createElementNS(SVG_NS, "feComponentTransfer"); + filter.append(feComponentTransfer); + this.#appendFeFunc(feComponentTransfer, "feFuncR", rTable); + this.#appendFeFunc(feComponentTransfer, "feFuncG", gTable); + this.#appendFeFunc(feComponentTransfer, "feFuncB", bTable); + } + #addTransferMapAlphaConversion(aTable, filter) { + const feComponentTransfer = this.#document.createElementNS(SVG_NS, "feComponentTransfer"); + filter.append(feComponentTransfer); + this.#appendFeFunc(feComponentTransfer, "feFuncA", aTable); + } + #getRGB(color) { + this.#defs.style.color = color; + return getRGB(getComputedStyle(this.#defs).getPropertyValue("color")); + } +} + +;// ./src/display/standard_fontdata_factory.js + + +class BaseStandardFontDataFactory { + constructor({ + baseUrl = null + }) { + this.baseUrl = baseUrl; + } + async fetch({ + filename + }) { + if (!this.baseUrl) { + throw new Error("Ensure that the `standardFontDataUrl` API parameter is provided."); + } + if (!filename) { + throw new Error("Font filename must be specified."); + } + const url = `${this.baseUrl}${filename}`; + return this._fetch(url).catch(reason => { + throw new Error(`Unable to load font data at: ${url}`); + }); + } + async _fetch(url) { + unreachable("Abstract method `_fetch` called."); + } +} +class DOMStandardFontDataFactory extends BaseStandardFontDataFactory { + async _fetch(url) { + const data = await fetchData(url, "arraybuffer"); + return new Uint8Array(data); + } +} + +;// ./src/display/wasm_factory.js + + +class BaseWasmFactory { + constructor({ + baseUrl = null + }) { + this.baseUrl = baseUrl; + } + async fetch({ + filename + }) { + if (!this.baseUrl) { + throw new Error("Ensure that the `wasmUrl` API parameter is provided."); + } + if (!filename) { + throw new Error("Wasm filename must be specified."); + } + const url = `${this.baseUrl}${filename}`; + return this._fetch(url).catch(reason => { + throw new Error(`Unable to load wasm data at: ${url}`); + }); + } + async _fetch(url) { + unreachable("Abstract method `_fetch` called."); + } +} +class DOMWasmFactory extends BaseWasmFactory { + async _fetch(url) { + const data = await fetchData(url, "arraybuffer"); + return new Uint8Array(data); + } +} + +;// ./src/display/node_utils.js + + + + + + +if (isNodeJS) { + warn("Please use the `legacy` build in Node.js environments."); +} +async function node_utils_fetchData(url) { + const fs = process.getBuiltinModule("fs"); + const data = await fs.promises.readFile(url); + return new Uint8Array(data); +} +class NodeFilterFactory extends BaseFilterFactory {} +class NodeCanvasFactory extends BaseCanvasFactory { + _createCanvas(width, height) { + const require = process.getBuiltinModule("module").createRequire(import.meta.url); + const canvas = require("@napi-rs/canvas"); + return canvas.createCanvas(width, height); + } +} +class NodeCMapReaderFactory extends BaseCMapReaderFactory { + async _fetch(url) { + return node_utils_fetchData(url); + } +} +class NodeStandardFontDataFactory extends BaseStandardFontDataFactory { + async _fetch(url) { + return node_utils_fetchData(url); + } +} +class NodeWasmFactory extends BaseWasmFactory { + async _fetch(url) { + return node_utils_fetchData(url); + } +} + +;// ./src/display/canvas_dependency_tracker.js + +const FORCED_DEPENDENCY_LABEL = "__forcedDependency"; +const { + floor, + ceil +} = Math; +function expandBBox(array, index, minX, minY, maxX, maxY) { + array[index * 4 + 0] = Math.min(array[index * 4 + 0], minX); + array[index * 4 + 1] = Math.min(array[index * 4 + 1], minY); + array[index * 4 + 2] = Math.max(array[index * 4 + 2], maxX); + array[index * 4 + 3] = Math.max(array[index * 4 + 3], maxY); +} +const EMPTY_BBOX = new Uint32Array(new Uint8Array([255, 255, 0, 0]).buffer)[0]; +class BBoxReader { + #bboxes; + #coords; + constructor(bboxes, coords) { + this.#bboxes = bboxes; + this.#coords = coords; + } + get length() { + return this.#bboxes.length; + } + isEmpty(i) { + return this.#bboxes[i] === EMPTY_BBOX; + } + minX(i) { + return this.#coords[i * 4 + 0] / 256; + } + minY(i) { + return this.#coords[i * 4 + 1] / 256; + } + maxX(i) { + return (this.#coords[i * 4 + 2] + 1) / 256; + } + maxY(i) { + return (this.#coords[i * 4 + 3] + 1) / 256; + } +} +const ensureDebugMetadata = (map, key) => { + if (!map) { + return undefined; + } + let value = map.get(key); + if (!value) { + value = { + dependencies: new Set(), + isRenderingOperation: false + }; + map.set(key, value); + } + return value; +}; +class CanvasDependencyTracker { + #simple = { + __proto__: null + }; + #incremental = { + __proto__: null, + transform: [], + moveText: [], + sameLineText: [], + [FORCED_DEPENDENCY_LABEL]: [] + }; + #namedDependencies = new Map(); + #savesStack = []; + #markedContentStack = []; + #baseTransformStack = [[1, 0, 0, 1, 0, 0]]; + #clipBox = [-Infinity, -Infinity, Infinity, Infinity]; + #pendingBBox = new Float64Array([Infinity, Infinity, -Infinity, -Infinity]); + #pendingBBoxIdx = -1; + #pendingDependencies = new Set(); + #operations = new Map(); + #fontBBoxTrustworthy = new Map(); + #canvasWidth; + #canvasHeight; + #bboxesCoords; + #bboxes; + #debugMetadata; + constructor(canvas, operationsCount, recordDebugMetadata = false) { + this.#canvasWidth = canvas.width; + this.#canvasHeight = canvas.height; + this.#initializeBBoxes(operationsCount); + if (recordDebugMetadata) { + this.#debugMetadata = new Map(); + } + } + growOperationsCount(operationsCount) { + if (operationsCount >= this.#bboxes.length) { + this.#initializeBBoxes(operationsCount, this.#bboxes); + } + } + #initializeBBoxes(operationsCount, oldBBoxes) { + const buffer = new ArrayBuffer(operationsCount * 4); + this.#bboxesCoords = new Uint8ClampedArray(buffer); + this.#bboxes = new Uint32Array(buffer); + if (oldBBoxes && oldBBoxes.length > 0) { + this.#bboxes.set(oldBBoxes); + this.#bboxes.fill(EMPTY_BBOX, oldBBoxes.length); + } else { + this.#bboxes.fill(EMPTY_BBOX); + } + } + save(opIdx) { + this.#simple = { + __proto__: this.#simple + }; + this.#incremental = { + __proto__: this.#incremental, + transform: { + __proto__: this.#incremental.transform + }, + moveText: { + __proto__: this.#incremental.moveText + }, + sameLineText: { + __proto__: this.#incremental.sameLineText + }, + [FORCED_DEPENDENCY_LABEL]: { + __proto__: this.#incremental[FORCED_DEPENDENCY_LABEL] + } + }; + this.#clipBox = { + __proto__: this.#clipBox + }; + this.#savesStack.push(opIdx); + return this; + } + restore(opIdx) { + const previous = Object.getPrototypeOf(this.#simple); + if (previous === null) { + return this; + } + this.#simple = previous; + this.#incremental = Object.getPrototypeOf(this.#incremental); + this.#clipBox = Object.getPrototypeOf(this.#clipBox); + const lastSave = this.#savesStack.pop(); + if (lastSave !== undefined) { + ensureDebugMetadata(this.#debugMetadata, opIdx)?.dependencies.add(lastSave); + this.#bboxes[opIdx] = this.#bboxes[lastSave]; + } + return this; + } + recordOpenMarker(idx) { + this.#savesStack.push(idx); + return this; + } + getOpenMarker() { + if (this.#savesStack.length === 0) { + return null; + } + return this.#savesStack.at(-1); + } + recordCloseMarker(opIdx) { + const lastSave = this.#savesStack.pop(); + if (lastSave !== undefined) { + ensureDebugMetadata(this.#debugMetadata, opIdx)?.dependencies.add(lastSave); + this.#bboxes[opIdx] = this.#bboxes[lastSave]; + } + return this; + } + beginMarkedContent(opIdx) { + this.#markedContentStack.push(opIdx); + return this; + } + endMarkedContent(opIdx) { + const lastSave = this.#markedContentStack.pop(); + if (lastSave !== undefined) { + ensureDebugMetadata(this.#debugMetadata, opIdx)?.dependencies.add(lastSave); + this.#bboxes[opIdx] = this.#bboxes[lastSave]; + } + return this; + } + pushBaseTransform(ctx) { + this.#baseTransformStack.push(Util.multiplyByDOMMatrix(this.#baseTransformStack.at(-1), ctx.getTransform())); + return this; + } + popBaseTransform() { + if (this.#baseTransformStack.length > 1) { + this.#baseTransformStack.pop(); + } + return this; + } + recordSimpleData(name, idx) { + this.#simple[name] = idx; + return this; + } + recordIncrementalData(name, idx) { + this.#incremental[name].push(idx); + return this; + } + resetIncrementalData(name, idx) { + this.#incremental[name].length = 0; + return this; + } + recordNamedData(name, idx) { + this.#namedDependencies.set(name, idx); + return this; + } + recordSimpleDataFromNamed(name, depName, fallbackIdx) { + this.#simple[name] = this.#namedDependencies.get(depName) ?? fallbackIdx; + } + recordFutureForcedDependency(name, idx) { + this.recordIncrementalData(FORCED_DEPENDENCY_LABEL, idx); + return this; + } + inheritSimpleDataAsFutureForcedDependencies(names) { + for (const name of names) { + if (name in this.#simple) { + this.recordFutureForcedDependency(name, this.#simple[name]); + } + } + return this; + } + inheritPendingDependenciesAsFutureForcedDependencies() { + for (const dep of this.#pendingDependencies) { + this.recordFutureForcedDependency(FORCED_DEPENDENCY_LABEL, dep); + } + return this; + } + resetBBox(idx) { + if (this.#pendingBBoxIdx !== idx) { + this.#pendingBBoxIdx = idx; + this.#pendingBBox[0] = Infinity; + this.#pendingBBox[1] = Infinity; + this.#pendingBBox[2] = -Infinity; + this.#pendingBBox[3] = -Infinity; + } + return this; + } + recordClipBox(idx, ctx, minX, maxX, minY, maxY) { + const transform = Util.multiplyByDOMMatrix(this.#baseTransformStack.at(-1), ctx.getTransform()); + const clipBox = [Infinity, Infinity, -Infinity, -Infinity]; + Util.axialAlignedBoundingBox([minX, minY, maxX, maxY], transform, clipBox); + const intersection = Util.intersect(this.#clipBox, clipBox); + if (intersection) { + this.#clipBox[0] = intersection[0]; + this.#clipBox[1] = intersection[1]; + this.#clipBox[2] = intersection[2]; + this.#clipBox[3] = intersection[3]; + } else { + this.#clipBox[0] = this.#clipBox[1] = Infinity; + this.#clipBox[2] = this.#clipBox[3] = -Infinity; + } + return this; + } + recordBBox(idx, ctx, minX, maxX, minY, maxY) { + const clipBox = this.#clipBox; + if (clipBox[0] === Infinity) { + return this; + } + const transform = Util.multiplyByDOMMatrix(this.#baseTransformStack.at(-1), ctx.getTransform()); + if (clipBox[0] === -Infinity) { + Util.axialAlignedBoundingBox([minX, minY, maxX, maxY], transform, this.#pendingBBox); + return this; + } + const bbox = [Infinity, Infinity, -Infinity, -Infinity]; + Util.axialAlignedBoundingBox([minX, minY, maxX, maxY], transform, bbox); + this.#pendingBBox[0] = Math.min(this.#pendingBBox[0], Math.max(bbox[0], clipBox[0])); + this.#pendingBBox[1] = Math.min(this.#pendingBBox[1], Math.max(bbox[1], clipBox[1])); + this.#pendingBBox[2] = Math.max(this.#pendingBBox[2], Math.min(bbox[2], clipBox[2])); + this.#pendingBBox[3] = Math.max(this.#pendingBBox[3], Math.min(bbox[3], clipBox[3])); + return this; + } + recordCharacterBBox(idx, ctx, font, scale = 1, x = 0, y = 0, getMeasure) { + const fontBBox = font.bbox; + let isBBoxTrustworthy; + let computedBBox; + if (fontBBox) { + isBBoxTrustworthy = fontBBox[2] !== fontBBox[0] && fontBBox[3] !== fontBBox[1] && this.#fontBBoxTrustworthy.get(font); + if (isBBoxTrustworthy !== false) { + computedBBox = [0, 0, 0, 0]; + Util.axialAlignedBoundingBox(fontBBox, font.fontMatrix, computedBBox); + if (scale !== 1 || x !== 0 || y !== 0) { + Util.scaleMinMax([scale, 0, 0, -scale, x, y], computedBBox); + } + if (isBBoxTrustworthy) { + return this.recordBBox(idx, ctx, computedBBox[0], computedBBox[2], computedBBox[1], computedBBox[3]); + } + } + } + if (!getMeasure) { + return this.recordFullPageBBox(idx); + } + const measure = getMeasure(); + if (fontBBox && computedBBox && isBBoxTrustworthy === undefined) { + isBBoxTrustworthy = computedBBox[0] <= x - measure.actualBoundingBoxLeft && computedBBox[2] >= x + measure.actualBoundingBoxRight && computedBBox[1] <= y - measure.actualBoundingBoxAscent && computedBBox[3] >= y + measure.actualBoundingBoxDescent; + this.#fontBBoxTrustworthy.set(font, isBBoxTrustworthy); + if (isBBoxTrustworthy) { + return this.recordBBox(idx, ctx, computedBBox[0], computedBBox[2], computedBBox[1], computedBBox[3]); + } + } + return this.recordBBox(idx, ctx, x - measure.actualBoundingBoxLeft, x + measure.actualBoundingBoxRight, y - measure.actualBoundingBoxAscent, y + measure.actualBoundingBoxDescent); + } + recordFullPageBBox(idx) { + this.#pendingBBox[0] = Math.max(0, this.#clipBox[0]); + this.#pendingBBox[1] = Math.max(0, this.#clipBox[1]); + this.#pendingBBox[2] = Math.min(this.#canvasWidth, this.#clipBox[2]); + this.#pendingBBox[3] = Math.min(this.#canvasHeight, this.#clipBox[3]); + return this; + } + getSimpleIndex(dependencyName) { + return this.#simple[dependencyName]; + } + recordDependencies(idx, dependencyNames) { + const pendingDependencies = this.#pendingDependencies; + const simple = this.#simple; + const incremental = this.#incremental; + for (const name of dependencyNames) { + if (name in this.#simple) { + pendingDependencies.add(simple[name]); + } else if (name in incremental) { + incremental[name].forEach(pendingDependencies.add, pendingDependencies); + } + } + return this; + } + recordNamedDependency(idx, name) { + if (this.#namedDependencies.has(name)) { + this.#pendingDependencies.add(this.#namedDependencies.get(name)); + } + return this; + } + recordOperation(idx, preserve = false) { + this.recordDependencies(idx, [FORCED_DEPENDENCY_LABEL]); + if (this.#debugMetadata) { + const metadata = ensureDebugMetadata(this.#debugMetadata, idx); + const { + dependencies + } = metadata; + this.#pendingDependencies.forEach(dependencies.add, dependencies); + this.#savesStack.forEach(dependencies.add, dependencies); + this.#markedContentStack.forEach(dependencies.add, dependencies); + dependencies.delete(idx); + metadata.isRenderingOperation = true; + } + if (this.#pendingBBoxIdx === idx) { + const minX = floor(this.#pendingBBox[0] * 256 / this.#canvasWidth); + const minY = floor(this.#pendingBBox[1] * 256 / this.#canvasHeight); + const maxX = ceil(this.#pendingBBox[2] * 256 / this.#canvasWidth); + const maxY = ceil(this.#pendingBBox[3] * 256 / this.#canvasHeight); + expandBBox(this.#bboxesCoords, idx, minX, minY, maxX, maxY); + for (const depIdx of this.#pendingDependencies) { + if (depIdx !== idx) { + expandBBox(this.#bboxesCoords, depIdx, minX, minY, maxX, maxY); + } + } + for (const saveIdx of this.#savesStack) { + if (saveIdx !== idx) { + expandBBox(this.#bboxesCoords, saveIdx, minX, minY, maxX, maxY); + } + } + for (const saveIdx of this.#markedContentStack) { + if (saveIdx !== idx) { + expandBBox(this.#bboxesCoords, saveIdx, minX, minY, maxX, maxY); + } + } + if (!preserve) { + this.#pendingDependencies.clear(); + this.#pendingBBoxIdx = -1; + } + } + return this; + } + recordShowTextOperation(idx, preserve = false) { + const deps = Array.from(this.#pendingDependencies); + this.recordOperation(idx, preserve); + this.recordIncrementalData("sameLineText", idx); + for (const dep of deps) { + this.recordIncrementalData("sameLineText", dep); + } + return this; + } + bboxToClipBoxDropOperation(idx, preserve = false) { + if (this.#pendingBBoxIdx === idx) { + this.#pendingBBoxIdx = -1; + this.#clipBox[0] = Math.max(this.#clipBox[0], this.#pendingBBox[0]); + this.#clipBox[1] = Math.max(this.#clipBox[1], this.#pendingBBox[1]); + this.#clipBox[2] = Math.min(this.#clipBox[2], this.#pendingBBox[2]); + this.#clipBox[3] = Math.min(this.#clipBox[3], this.#pendingBBox[3]); + if (!preserve) { + this.#pendingDependencies.clear(); + } + } + return this; + } + _takePendingDependencies() { + const pendingDependencies = this.#pendingDependencies; + this.#pendingDependencies = new Set(); + return pendingDependencies; + } + _extractOperation(idx) { + const operation = this.#operations.get(idx); + this.#operations.delete(idx); + return operation; + } + _pushPendingDependencies(dependencies) { + for (const dep of dependencies) { + this.#pendingDependencies.add(dep); + } + } + take() { + this.#fontBBoxTrustworthy.clear(); + return new BBoxReader(this.#bboxes, this.#bboxesCoords); + } + takeDebugMetadata() { + return this.#debugMetadata; + } +} +class CanvasNestedDependencyTracker { + #dependencyTracker; + #opIdx; + #ignoreBBoxes; + #nestingLevel = 0; + #savesLevel = 0; + constructor(dependencyTracker, opIdx, ignoreBBoxes) { + if (dependencyTracker instanceof CanvasNestedDependencyTracker && dependencyTracker.#ignoreBBoxes === !!ignoreBBoxes) { + return dependencyTracker; + } + this.#dependencyTracker = dependencyTracker; + this.#opIdx = opIdx; + this.#ignoreBBoxes = !!ignoreBBoxes; + } + growOperationsCount() { + throw new Error("Unreachable"); + } + save(opIdx) { + this.#savesLevel++; + this.#dependencyTracker.save(this.#opIdx); + return this; + } + restore(opIdx) { + if (this.#savesLevel > 0) { + this.#dependencyTracker.restore(this.#opIdx); + this.#savesLevel--; + } + return this; + } + recordOpenMarker(idx) { + this.#nestingLevel++; + return this; + } + getOpenMarker() { + return this.#nestingLevel > 0 ? this.#opIdx : this.#dependencyTracker.getOpenMarker(); + } + recordCloseMarker(idx) { + this.#nestingLevel--; + return this; + } + beginMarkedContent(opIdx) { + return this; + } + endMarkedContent(opIdx) { + return this; + } + pushBaseTransform(ctx) { + this.#dependencyTracker.pushBaseTransform(ctx); + return this; + } + popBaseTransform() { + this.#dependencyTracker.popBaseTransform(); + return this; + } + recordSimpleData(name, idx) { + this.#dependencyTracker.recordSimpleData(name, this.#opIdx); + return this; + } + recordIncrementalData(name, idx) { + this.#dependencyTracker.recordIncrementalData(name, this.#opIdx); + return this; + } + resetIncrementalData(name, idx) { + this.#dependencyTracker.resetIncrementalData(name, this.#opIdx); + return this; + } + recordNamedData(name, idx) { + return this; + } + recordSimpleDataFromNamed(name, depName, fallbackIdx) { + this.#dependencyTracker.recordSimpleDataFromNamed(name, depName, this.#opIdx); + return this; + } + recordFutureForcedDependency(name, idx) { + this.#dependencyTracker.recordFutureForcedDependency(name, this.#opIdx); + return this; + } + inheritSimpleDataAsFutureForcedDependencies(names) { + this.#dependencyTracker.inheritSimpleDataAsFutureForcedDependencies(names); + return this; + } + inheritPendingDependenciesAsFutureForcedDependencies() { + this.#dependencyTracker.inheritPendingDependenciesAsFutureForcedDependencies(); + return this; + } + resetBBox(idx) { + if (!this.#ignoreBBoxes) { + this.#dependencyTracker.resetBBox(this.#opIdx); + } + return this; + } + recordClipBox(idx, ctx, minX, maxX, minY, maxY) { + if (!this.#ignoreBBoxes) { + this.#dependencyTracker.recordClipBox(this.#opIdx, ctx, minX, maxX, minY, maxY); + } + return this; + } + recordBBox(idx, ctx, minX, maxX, minY, maxY) { + if (!this.#ignoreBBoxes) { + this.#dependencyTracker.recordBBox(this.#opIdx, ctx, minX, maxX, minY, maxY); + } + return this; + } + recordCharacterBBox(idx, ctx, font, scale, x, y, getMeasure) { + if (!this.#ignoreBBoxes) { + this.#dependencyTracker.recordCharacterBBox(this.#opIdx, ctx, font, scale, x, y, getMeasure); + } + return this; + } + recordFullPageBBox(idx) { + if (!this.#ignoreBBoxes) { + this.#dependencyTracker.recordFullPageBBox(this.#opIdx); + } + return this; + } + getSimpleIndex(dependencyName) { + return this.#dependencyTracker.getSimpleIndex(dependencyName); + } + recordDependencies(idx, dependencyNames) { + this.#dependencyTracker.recordDependencies(this.#opIdx, dependencyNames); + return this; + } + recordNamedDependency(idx, name) { + this.#dependencyTracker.recordNamedDependency(this.#opIdx, name); + return this; + } + recordOperation(idx) { + this.#dependencyTracker.recordOperation(this.#opIdx, true); + return this; + } + recordShowTextOperation(idx) { + this.#dependencyTracker.recordShowTextOperation(this.#opIdx, true); + return this; + } + bboxToClipBoxDropOperation(idx) { + if (!this.#ignoreBBoxes) { + this.#dependencyTracker.bboxToClipBoxDropOperation(this.#opIdx, true); + } + return this; + } + take() { + throw new Error("Unreachable"); + } + takeDebugMetadata() { + throw new Error("Unreachable"); + } +} +const Dependencies = { + stroke: ["path", "transform", "filter", "strokeColor", "strokeAlpha", "lineWidth", "lineCap", "lineJoin", "miterLimit", "dash"], + fill: ["path", "transform", "filter", "fillColor", "fillAlpha", "globalCompositeOperation", "SMask"], + imageXObject: ["transform", "SMask", "filter", "fillAlpha", "strokeAlpha", "globalCompositeOperation"], + rawFillPath: ["filter", "fillColor", "fillAlpha"], + showText: ["transform", "leading", "charSpacing", "wordSpacing", "hScale", "textRise", "moveText", "textMatrix", "font", "fontObj", "filter", "fillColor", "textRenderingMode", "SMask", "fillAlpha", "strokeAlpha", "globalCompositeOperation", "sameLineText"], + transform: ["transform"], + transformAndFill: ["transform", "fillColor"] +}; + +;// ./src/display/pattern_helper.js + + +const PathType = { + FILL: "Fill", + STROKE: "Stroke", + SHADING: "Shading" +}; +function applyBoundingBox(ctx, bbox) { + if (!bbox) { + return; + } + const width = bbox[2] - bbox[0]; + const height = bbox[3] - bbox[1]; + const region = new Path2D(); + region.rect(bbox[0], bbox[1], width, height); + ctx.clip(region); +} +class BaseShadingPattern { + isModifyingCurrentTransform() { + return false; + } + getPattern() { + unreachable("Abstract method `getPattern` called."); + } +} +class RadialAxialShadingPattern extends BaseShadingPattern { + constructor(IR) { + super(); + this._type = IR[1]; + this._bbox = IR[2]; + this._colorStops = IR[3]; + this._p0 = IR[4]; + this._p1 = IR[5]; + this._r0 = IR[6]; + this._r1 = IR[7]; + this.matrix = null; + } + _createGradient(ctx) { + let grad; + if (this._type === "axial") { + grad = ctx.createLinearGradient(this._p0[0], this._p0[1], this._p1[0], this._p1[1]); + } else if (this._type === "radial") { + grad = ctx.createRadialGradient(this._p0[0], this._p0[1], this._r0, this._p1[0], this._p1[1], this._r1); + } + for (const colorStop of this._colorStops) { + grad.addColorStop(colorStop[0], colorStop[1]); + } + return grad; + } + getPattern(ctx, owner, inverse, pathType) { + let pattern; + if (pathType === PathType.STROKE || pathType === PathType.FILL) { + const ownerBBox = owner.current.getClippedPathBoundingBox(pathType, getCurrentTransform(ctx)) || [0, 0, 0, 0]; + const width = Math.ceil(ownerBBox[2] - ownerBBox[0]) || 1; + const height = Math.ceil(ownerBBox[3] - ownerBBox[1]) || 1; + const tmpCanvas = owner.cachedCanvases.getCanvas("pattern", width, height); + const tmpCtx = tmpCanvas.context; + tmpCtx.clearRect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height); + tmpCtx.beginPath(); + tmpCtx.rect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height); + tmpCtx.translate(-ownerBBox[0], -ownerBBox[1]); + inverse = Util.transform(inverse, [1, 0, 0, 1, ownerBBox[0], ownerBBox[1]]); + tmpCtx.transform(...owner.baseTransform); + if (this.matrix) { + tmpCtx.transform(...this.matrix); + } + applyBoundingBox(tmpCtx, this._bbox); + tmpCtx.fillStyle = this._createGradient(tmpCtx); + tmpCtx.fill(); + pattern = ctx.createPattern(tmpCanvas.canvas, "no-repeat"); + const domMatrix = new DOMMatrix(inverse); + pattern.setTransform(domMatrix); + } else { + applyBoundingBox(ctx, this._bbox); + pattern = this._createGradient(ctx); + } + return pattern; + } +} +function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) { + const coords = context.coords, + colors = context.colors; + const bytes = data.data, + rowSize = data.width * 4; + let tmp; + if (coords[p1 + 1] > coords[p2 + 1]) { + tmp = p1; + p1 = p2; + p2 = tmp; + tmp = c1; + c1 = c2; + c2 = tmp; + } + if (coords[p2 + 1] > coords[p3 + 1]) { + tmp = p2; + p2 = p3; + p3 = tmp; + tmp = c2; + c2 = c3; + c3 = tmp; + } + if (coords[p1 + 1] > coords[p2 + 1]) { + tmp = p1; + p1 = p2; + p2 = tmp; + tmp = c1; + c1 = c2; + c2 = tmp; + } + const x1 = (coords[p1] + context.offsetX) * context.scaleX; + const y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY; + const x2 = (coords[p2] + context.offsetX) * context.scaleX; + const y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY; + const x3 = (coords[p3] + context.offsetX) * context.scaleX; + const y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY; + if (y1 >= y3) { + return; + } + const c1r = colors[c1], + c1g = colors[c1 + 1], + c1b = colors[c1 + 2]; + const c2r = colors[c2], + c2g = colors[c2 + 1], + c2b = colors[c2 + 2]; + const c3r = colors[c3], + c3g = colors[c3 + 1], + c3b = colors[c3 + 2]; + const minY = Math.round(y1), + maxY = Math.round(y3); + let xa, car, cag, cab; + let xb, cbr, cbg, cbb; + for (let y = minY; y <= maxY; y++) { + if (y < y2) { + const k = y < y1 ? 0 : (y1 - y) / (y1 - y2); + xa = x1 - (x1 - x2) * k; + car = c1r - (c1r - c2r) * k; + cag = c1g - (c1g - c2g) * k; + cab = c1b - (c1b - c2b) * k; + } else { + let k; + if (y > y3) { + k = 1; + } else if (y2 === y3) { + k = 0; + } else { + k = (y2 - y) / (y2 - y3); + } + xa = x2 - (x2 - x3) * k; + car = c2r - (c2r - c3r) * k; + cag = c2g - (c2g - c3g) * k; + cab = c2b - (c2b - c3b) * k; + } + let k; + if (y < y1) { + k = 0; + } else if (y > y3) { + k = 1; + } else { + k = (y1 - y) / (y1 - y3); + } + xb = x1 - (x1 - x3) * k; + cbr = c1r - (c1r - c3r) * k; + cbg = c1g - (c1g - c3g) * k; + cbb = c1b - (c1b - c3b) * k; + const x1_ = Math.round(Math.min(xa, xb)); + const x2_ = Math.round(Math.max(xa, xb)); + let j = rowSize * y + x1_ * 4; + for (let x = x1_; x <= x2_; x++) { + k = (xa - x) / (xa - xb); + if (k < 0) { + k = 0; + } else if (k > 1) { + k = 1; + } + bytes[j++] = car - (car - cbr) * k | 0; + bytes[j++] = cag - (cag - cbg) * k | 0; + bytes[j++] = cab - (cab - cbb) * k | 0; + bytes[j++] = 255; + } + } +} +function drawFigure(data, figure, context) { + const ps = figure.coords; + const cs = figure.colors; + let i, ii; + switch (figure.type) { + case MeshFigureType.LATTICE: + const verticesPerRow = figure.verticesPerRow; + const rows = Math.floor(ps.length / verticesPerRow) - 1; + const cols = verticesPerRow - 1; + for (i = 0; i < rows; i++) { + let q = i * verticesPerRow; + for (let j = 0; j < cols; j++, q++) { + drawTriangle(data, context, ps[q], ps[q + 1], ps[q + verticesPerRow], cs[q], cs[q + 1], cs[q + verticesPerRow]); + drawTriangle(data, context, ps[q + verticesPerRow + 1], ps[q + 1], ps[q + verticesPerRow], cs[q + verticesPerRow + 1], cs[q + 1], cs[q + verticesPerRow]); + } + } + break; + case MeshFigureType.TRIANGLES: + for (i = 0, ii = ps.length; i < ii; i += 3) { + drawTriangle(data, context, ps[i], ps[i + 1], ps[i + 2], cs[i], cs[i + 1], cs[i + 2]); + } + break; + default: + throw new Error("illegal figure"); + } +} +class MeshShadingPattern extends BaseShadingPattern { + constructor(IR) { + super(); + this._coords = IR[2]; + this._colors = IR[3]; + this._figures = IR[4]; + this._bounds = IR[5]; + this._bbox = IR[6]; + this._background = IR[7]; + this.matrix = null; + } + _createMeshCanvas(combinedScale, backgroundColor, cachedCanvases) { + const EXPECTED_SCALE = 1.1; + const MAX_PATTERN_SIZE = 3000; + const BORDER_SIZE = 2; + const offsetX = Math.floor(this._bounds[0]); + const offsetY = Math.floor(this._bounds[1]); + const boundsWidth = Math.ceil(this._bounds[2]) - offsetX; + const boundsHeight = Math.ceil(this._bounds[3]) - offsetY; + const width = Math.min(Math.ceil(Math.abs(boundsWidth * combinedScale[0] * EXPECTED_SCALE)), MAX_PATTERN_SIZE); + const height = Math.min(Math.ceil(Math.abs(boundsHeight * combinedScale[1] * EXPECTED_SCALE)), MAX_PATTERN_SIZE); + const scaleX = boundsWidth / width; + const scaleY = boundsHeight / height; + const context = { + coords: this._coords, + colors: this._colors, + offsetX: -offsetX, + offsetY: -offsetY, + scaleX: 1 / scaleX, + scaleY: 1 / scaleY + }; + const paddedWidth = width + BORDER_SIZE * 2; + const paddedHeight = height + BORDER_SIZE * 2; + const tmpCanvas = cachedCanvases.getCanvas("mesh", paddedWidth, paddedHeight); + const tmpCtx = tmpCanvas.context; + const data = tmpCtx.createImageData(width, height); + if (backgroundColor) { + const bytes = data.data; + for (let i = 0, ii = bytes.length; i < ii; i += 4) { + bytes[i] = backgroundColor[0]; + bytes[i + 1] = backgroundColor[1]; + bytes[i + 2] = backgroundColor[2]; + bytes[i + 3] = 255; + } + } + for (const figure of this._figures) { + drawFigure(data, figure, context); + } + tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE); + const canvas = tmpCanvas.canvas; + return { + canvas, + offsetX: offsetX - BORDER_SIZE * scaleX, + offsetY: offsetY - BORDER_SIZE * scaleY, + scaleX, + scaleY + }; + } + isModifyingCurrentTransform() { + return true; + } + getPattern(ctx, owner, inverse, pathType) { + applyBoundingBox(ctx, this._bbox); + const scale = new Float32Array(2); + if (pathType === PathType.SHADING) { + Util.singularValueDecompose2dScale(getCurrentTransform(ctx), scale); + } else if (this.matrix) { + Util.singularValueDecompose2dScale(this.matrix, scale); + const [matrixScaleX, matrixScaleY] = scale; + Util.singularValueDecompose2dScale(owner.baseTransform, scale); + scale[0] *= matrixScaleX; + scale[1] *= matrixScaleY; + } else { + Util.singularValueDecompose2dScale(owner.baseTransform, scale); + } + const temporaryPatternCanvas = this._createMeshCanvas(scale, pathType === PathType.SHADING ? null : this._background, owner.cachedCanvases); + if (pathType !== PathType.SHADING) { + ctx.setTransform(...owner.baseTransform); + if (this.matrix) { + ctx.transform(...this.matrix); + } + } + ctx.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY); + ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY); + return ctx.createPattern(temporaryPatternCanvas.canvas, "no-repeat"); + } +} +class DummyShadingPattern extends BaseShadingPattern { + getPattern() { + return "hotpink"; + } +} +function getShadingPattern(IR) { + switch (IR[0]) { + case "RadialAxial": + return new RadialAxialShadingPattern(IR); + case "Mesh": + return new MeshShadingPattern(IR); + case "Dummy": + return new DummyShadingPattern(); + } + throw new Error(`Unknown IR type: ${IR[0]}`); +} +const PaintType = { + COLORED: 1, + UNCOLORED: 2 +}; +class TilingPattern { + static MAX_PATTERN_SIZE = 3000; + constructor(IR, ctx, canvasGraphicsFactory, baseTransform) { + this.color = IR[1]; + this.operatorList = IR[2]; + this.matrix = IR[3]; + this.bbox = IR[4]; + this.xstep = IR[5]; + this.ystep = IR[6]; + this.paintType = IR[7]; + this.tilingType = IR[8]; + this.ctx = ctx; + this.canvasGraphicsFactory = canvasGraphicsFactory; + this.baseTransform = baseTransform; + } + createPatternCanvas(owner, opIdx) { + const { + bbox, + operatorList, + paintType, + tilingType, + color, + canvasGraphicsFactory + } = this; + let { + xstep, + ystep + } = this; + xstep = Math.abs(xstep); + ystep = Math.abs(ystep); + info("TilingType: " + tilingType); + const x0 = bbox[0], + y0 = bbox[1], + x1 = bbox[2], + y1 = bbox[3]; + const width = x1 - x0; + const height = y1 - y0; + const scale = new Float32Array(2); + Util.singularValueDecompose2dScale(this.matrix, scale); + const [matrixScaleX, matrixScaleY] = scale; + Util.singularValueDecompose2dScale(this.baseTransform, scale); + const combinedScaleX = matrixScaleX * scale[0]; + const combinedScaleY = matrixScaleY * scale[1]; + let canvasWidth = width, + canvasHeight = height, + redrawHorizontally = false, + redrawVertically = false; + const xScaledStep = Math.ceil(xstep * combinedScaleX); + const yScaledStep = Math.ceil(ystep * combinedScaleY); + const xScaledWidth = Math.ceil(width * combinedScaleX); + const yScaledHeight = Math.ceil(height * combinedScaleY); + if (xScaledStep >= xScaledWidth) { + canvasWidth = xstep; + } else { + redrawHorizontally = true; + } + if (yScaledStep >= yScaledHeight) { + canvasHeight = ystep; + } else { + redrawVertically = true; + } + const dimx = this.getSizeAndScale(canvasWidth, this.ctx.canvas.width, combinedScaleX); + const dimy = this.getSizeAndScale(canvasHeight, this.ctx.canvas.height, combinedScaleY); + const tmpCanvas = owner.cachedCanvases.getCanvas("pattern", dimx.size, dimy.size); + const tmpCtx = tmpCanvas.context; + const graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx, opIdx); + graphics.groupLevel = owner.groupLevel; + this.setFillAndStrokeStyleToContext(graphics, paintType, color); + tmpCtx.translate(-dimx.scale * x0, -dimy.scale * y0); + graphics.transform(0, dimx.scale, 0, 0, dimy.scale, 0, 0); + tmpCtx.save(); + graphics.dependencyTracker?.save(); + this.clipBbox(graphics, x0, y0, x1, y1); + graphics.baseTransform = getCurrentTransform(graphics.ctx); + graphics.executeOperatorList(operatorList); + graphics.endDrawing(); + graphics.dependencyTracker?.restore(); + tmpCtx.restore(); + if (redrawHorizontally || redrawVertically) { + const image = tmpCanvas.canvas; + if (redrawHorizontally) { + canvasWidth = xstep; + } + if (redrawVertically) { + canvasHeight = ystep; + } + const dimx2 = this.getSizeAndScale(canvasWidth, this.ctx.canvas.width, combinedScaleX); + const dimy2 = this.getSizeAndScale(canvasHeight, this.ctx.canvas.height, combinedScaleY); + const xSize = dimx2.size; + const ySize = dimy2.size; + const tmpCanvas2 = owner.cachedCanvases.getCanvas("pattern-workaround", xSize, ySize); + const tmpCtx2 = tmpCanvas2.context; + const ii = redrawHorizontally ? Math.floor(width / xstep) : 0; + const jj = redrawVertically ? Math.floor(height / ystep) : 0; + for (let i = 0; i <= ii; i++) { + for (let j = 0; j <= jj; j++) { + tmpCtx2.drawImage(image, xSize * i, ySize * j, xSize, ySize, 0, 0, xSize, ySize); + } + } + return { + canvas: tmpCanvas2.canvas, + scaleX: dimx2.scale, + scaleY: dimy2.scale, + offsetX: x0, + offsetY: y0 + }; + } + return { + canvas: tmpCanvas.canvas, + scaleX: dimx.scale, + scaleY: dimy.scale, + offsetX: x0, + offsetY: y0 + }; + } + getSizeAndScale(step, realOutputSize, scale) { + const maxSize = Math.max(TilingPattern.MAX_PATTERN_SIZE, realOutputSize); + let size = Math.ceil(step * scale); + if (size >= maxSize) { + size = maxSize; + } else { + scale = size / step; + } + return { + scale, + size + }; + } + clipBbox(graphics, x0, y0, x1, y1) { + const bboxWidth = x1 - x0; + const bboxHeight = y1 - y0; + graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight); + Util.axialAlignedBoundingBox([x0, y0, x1, y1], getCurrentTransform(graphics.ctx), graphics.current.minMax); + graphics.clip(); + graphics.endPath(); + } + setFillAndStrokeStyleToContext(graphics, paintType, color) { + const context = graphics.ctx, + current = graphics.current; + switch (paintType) { + case PaintType.COLORED: + const { + fillStyle, + strokeStyle + } = this.ctx; + context.fillStyle = current.fillColor = fillStyle; + context.strokeStyle = current.strokeColor = strokeStyle; + break; + case PaintType.UNCOLORED: + context.fillStyle = context.strokeStyle = color; + current.fillColor = current.strokeColor = color; + break; + default: + throw new FormatError(`Unsupported paint type: ${paintType}`); + } + } + isModifyingCurrentTransform() { + return false; + } + getPattern(ctx, owner, inverse, pathType, opIdx) { + let matrix = inverse; + if (pathType !== PathType.SHADING) { + matrix = Util.transform(matrix, owner.baseTransform); + if (this.matrix) { + matrix = Util.transform(matrix, this.matrix); + } + } + const temporaryPatternCanvas = this.createPatternCanvas(owner, opIdx); + let domMatrix = new DOMMatrix(matrix); + domMatrix = domMatrix.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY); + domMatrix = domMatrix.scale(1 / temporaryPatternCanvas.scaleX, 1 / temporaryPatternCanvas.scaleY); + const pattern = ctx.createPattern(temporaryPatternCanvas.canvas, "repeat"); + pattern.setTransform(domMatrix); + return pattern; + } +} + +;// ./src/shared/image_utils.js + +function convertToRGBA(params) { + switch (params.kind) { + case ImageKind.GRAYSCALE_1BPP: + return convertBlackAndWhiteToRGBA(params); + case ImageKind.RGB_24BPP: + return convertRGBToRGBA(params); + } + return null; +} +function convertBlackAndWhiteToRGBA({ + src, + srcPos = 0, + dest, + width, + height, + nonBlackColor = 0xffffffff, + inverseDecode = false +}) { + const black = util_FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff; + const [zeroMapping, oneMapping] = inverseDecode ? [nonBlackColor, black] : [black, nonBlackColor]; + const widthInSource = width >> 3; + const widthRemainder = width & 7; + const srcLength = src.length; + dest = new Uint32Array(dest.buffer); + let destPos = 0; + for (let i = 0; i < height; i++) { + for (const max = srcPos + widthInSource; srcPos < max; srcPos++) { + const elem = srcPos < srcLength ? src[srcPos] : 255; + dest[destPos++] = elem & 0b10000000 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b1000000 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b100000 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b10000 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b1000 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b100 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b10 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b1 ? oneMapping : zeroMapping; + } + if (widthRemainder === 0) { + continue; + } + const elem = srcPos < srcLength ? src[srcPos++] : 255; + for (let j = 0; j < widthRemainder; j++) { + dest[destPos++] = elem & 1 << 7 - j ? oneMapping : zeroMapping; + } + } + return { + srcPos, + destPos + }; +} +function convertRGBToRGBA({ + src, + srcPos = 0, + dest, + destPos = 0, + width, + height +}) { + let i = 0; + const len = width * height * 3; + const len32 = len >> 2; + const src32 = new Uint32Array(src.buffer, srcPos, len32); + if (FeatureTest.isLittleEndian) { + for (; i < len32 - 2; i += 3, destPos += 4) { + const s1 = src32[i]; + const s2 = src32[i + 1]; + const s3 = src32[i + 2]; + dest[destPos] = s1 | 0xff000000; + dest[destPos + 1] = s1 >>> 24 | s2 << 8 | 0xff000000; + dest[destPos + 2] = s2 >>> 16 | s3 << 16 | 0xff000000; + dest[destPos + 3] = s3 >>> 8 | 0xff000000; + } + for (let j = i * 4, jj = srcPos + len; j < jj; j += 3) { + dest[destPos++] = src[j] | src[j + 1] << 8 | src[j + 2] << 16 | 0xff000000; + } + } else { + for (; i < len32 - 2; i += 3, destPos += 4) { + const s1 = src32[i]; + const s2 = src32[i + 1]; + const s3 = src32[i + 2]; + dest[destPos] = s1 | 0xff; + dest[destPos + 1] = s1 << 24 | s2 >>> 8 | 0xff; + dest[destPos + 2] = s2 << 16 | s3 >>> 16 | 0xff; + dest[destPos + 3] = s3 << 8 | 0xff; + } + for (let j = i * 4, jj = srcPos + len; j < jj; j += 3) { + dest[destPos++] = src[j] << 24 | src[j + 1] << 16 | src[j + 2] << 8 | 0xff; + } + } + return { + srcPos: srcPos + len, + destPos + }; +} +function grayToRGBA(src, dest) { + if (FeatureTest.isLittleEndian) { + for (let i = 0, ii = src.length; i < ii; i++) { + dest[i] = src[i] * 0x10101 | 0xff000000; + } + } else { + for (let i = 0, ii = src.length; i < ii; i++) { + dest[i] = src[i] * 0x1010100 | 0x000000ff; + } + } +} + +;// ./src/display/canvas.js + + + + + +const MIN_FONT_SIZE = 16; +const MAX_FONT_SIZE = 100; +const EXECUTION_TIME = 15; +const EXECUTION_STEPS = 10; +const FULL_CHUNK_HEIGHT = 16; +const SCALE_MATRIX = new DOMMatrix(); +const XY = new Float32Array(2); +const MIN_MAX_INIT = new Float32Array([Infinity, Infinity, -Infinity, -Infinity]); +function mirrorContextOperations(ctx, destCtx) { + if (ctx._removeMirroring) { + throw new Error("Context is already forwarding operations."); + } + ctx.__originalSave = ctx.save; + ctx.__originalRestore = ctx.restore; + ctx.__originalRotate = ctx.rotate; + ctx.__originalScale = ctx.scale; + ctx.__originalTranslate = ctx.translate; + ctx.__originalTransform = ctx.transform; + ctx.__originalSetTransform = ctx.setTransform; + ctx.__originalResetTransform = ctx.resetTransform; + ctx.__originalClip = ctx.clip; + ctx.__originalMoveTo = ctx.moveTo; + ctx.__originalLineTo = ctx.lineTo; + ctx.__originalBezierCurveTo = ctx.bezierCurveTo; + ctx.__originalRect = ctx.rect; + ctx.__originalClosePath = ctx.closePath; + ctx.__originalBeginPath = ctx.beginPath; + ctx._removeMirroring = () => { + ctx.save = ctx.__originalSave; + ctx.restore = ctx.__originalRestore; + ctx.rotate = ctx.__originalRotate; + ctx.scale = ctx.__originalScale; + ctx.translate = ctx.__originalTranslate; + ctx.transform = ctx.__originalTransform; + ctx.setTransform = ctx.__originalSetTransform; + ctx.resetTransform = ctx.__originalResetTransform; + ctx.clip = ctx.__originalClip; + ctx.moveTo = ctx.__originalMoveTo; + ctx.lineTo = ctx.__originalLineTo; + ctx.bezierCurveTo = ctx.__originalBezierCurveTo; + ctx.rect = ctx.__originalRect; + ctx.closePath = ctx.__originalClosePath; + ctx.beginPath = ctx.__originalBeginPath; + delete ctx._removeMirroring; + }; + ctx.save = function () { + destCtx.save(); + this.__originalSave(); + }; + ctx.restore = function () { + destCtx.restore(); + this.__originalRestore(); + }; + ctx.translate = function (x, y) { + destCtx.translate(x, y); + this.__originalTranslate(x, y); + }; + ctx.scale = function (x, y) { + destCtx.scale(x, y); + this.__originalScale(x, y); + }; + ctx.transform = function (a, b, c, d, e, f) { + destCtx.transform(a, b, c, d, e, f); + this.__originalTransform(a, b, c, d, e, f); + }; + ctx.setTransform = function (a, b, c, d, e, f) { + destCtx.setTransform(a, b, c, d, e, f); + this.__originalSetTransform(a, b, c, d, e, f); + }; + ctx.resetTransform = function () { + destCtx.resetTransform(); + this.__originalResetTransform(); + }; + ctx.rotate = function (angle) { + destCtx.rotate(angle); + this.__originalRotate(angle); + }; + ctx.clip = function (rule) { + destCtx.clip(rule); + this.__originalClip(rule); + }; + ctx.moveTo = function (x, y) { + destCtx.moveTo(x, y); + this.__originalMoveTo(x, y); + }; + ctx.lineTo = function (x, y) { + destCtx.lineTo(x, y); + this.__originalLineTo(x, y); + }; + ctx.bezierCurveTo = function (cp1x, cp1y, cp2x, cp2y, x, y) { + destCtx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); + this.__originalBezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); + }; + ctx.rect = function (x, y, width, height) { + destCtx.rect(x, y, width, height); + this.__originalRect(x, y, width, height); + }; + ctx.closePath = function () { + destCtx.closePath(); + this.__originalClosePath(); + }; + ctx.beginPath = function () { + destCtx.beginPath(); + this.__originalBeginPath(); + }; +} +class CachedCanvases { + constructor(canvasFactory) { + this.canvasFactory = canvasFactory; + this.cache = Object.create(null); + } + getCanvas(id, width, height) { + let canvasEntry; + if (this.cache[id] !== undefined) { + canvasEntry = this.cache[id]; + this.canvasFactory.reset(canvasEntry, width, height); + } else { + canvasEntry = this.canvasFactory.create(width, height); + this.cache[id] = canvasEntry; + } + return canvasEntry; + } + delete(id) { + delete this.cache[id]; + } + clear() { + for (const id in this.cache) { + const canvasEntry = this.cache[id]; + this.canvasFactory.destroy(canvasEntry); + delete this.cache[id]; + } + } +} +function drawImageAtIntegerCoords(ctx, srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH) { + const [a, b, c, d, tx, ty] = getCurrentTransform(ctx); + if (b === 0 && c === 0) { + const tlX = destX * a + tx; + const rTlX = Math.round(tlX); + const tlY = destY * d + ty; + const rTlY = Math.round(tlY); + const brX = (destX + destW) * a + tx; + const rWidth = Math.abs(Math.round(brX) - rTlX) || 1; + const brY = (destY + destH) * d + ty; + const rHeight = Math.abs(Math.round(brY) - rTlY) || 1; + ctx.setTransform(Math.sign(a), 0, 0, Math.sign(d), rTlX, rTlY); + ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rWidth, rHeight); + ctx.setTransform(a, b, c, d, tx, ty); + return [rWidth, rHeight]; + } + if (a === 0 && d === 0) { + const tlX = destY * c + tx; + const rTlX = Math.round(tlX); + const tlY = destX * b + ty; + const rTlY = Math.round(tlY); + const brX = (destY + destH) * c + tx; + const rWidth = Math.abs(Math.round(brX) - rTlX) || 1; + const brY = (destX + destW) * b + ty; + const rHeight = Math.abs(Math.round(brY) - rTlY) || 1; + ctx.setTransform(0, Math.sign(b), Math.sign(c), 0, rTlX, rTlY); + ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rHeight, rWidth); + ctx.setTransform(a, b, c, d, tx, ty); + return [rHeight, rWidth]; + } + ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH); + const scaleX = Math.hypot(a, b); + const scaleY = Math.hypot(c, d); + return [scaleX * destW, scaleY * destH]; +} +class CanvasExtraState { + alphaIsShape = false; + fontSize = 0; + fontSizeScale = 1; + textMatrix = null; + textMatrixScale = 1; + fontMatrix = FONT_IDENTITY_MATRIX; + leading = 0; + x = 0; + y = 0; + lineX = 0; + lineY = 0; + charSpacing = 0; + wordSpacing = 0; + textHScale = 1; + textRenderingMode = TextRenderingMode.FILL; + textRise = 0; + fillColor = "#000000"; + strokeColor = "#000000"; + patternFill = false; + patternStroke = false; + fillAlpha = 1; + strokeAlpha = 1; + lineWidth = 1; + activeSMask = null; + transferMaps = "none"; + constructor(width, height, preInit) { + preInit?.(this); + this.clipBox = new Float32Array([0, 0, width, height]); + this.minMax = MIN_MAX_INIT.slice(); + } + clone() { + const clone = Object.create(this); + clone.clipBox = this.clipBox.slice(); + clone.minMax = this.minMax.slice(); + return clone; + } + getPathBoundingBox(pathType = PathType.FILL, transform = null) { + const box = this.minMax.slice(); + if (pathType === PathType.STROKE) { + if (!transform) { + unreachable("Stroke bounding box must include transform."); + } + Util.singularValueDecompose2dScale(transform, XY); + const xStrokePad = XY[0] * this.lineWidth / 2; + const yStrokePad = XY[1] * this.lineWidth / 2; + box[0] -= xStrokePad; + box[1] -= yStrokePad; + box[2] += xStrokePad; + box[3] += yStrokePad; + } + return box; + } + updateClipFromPath() { + const intersect = Util.intersect(this.clipBox, this.getPathBoundingBox()); + this.startNewPathAndClipBox(intersect || [0, 0, 0, 0]); + } + isEmptyClip() { + return this.minMax[0] === Infinity; + } + startNewPathAndClipBox(box) { + this.clipBox.set(box, 0); + this.minMax.set(MIN_MAX_INIT, 0); + } + getClippedPathBoundingBox(pathType = PathType.FILL, transform = null) { + return Util.intersect(this.clipBox, this.getPathBoundingBox(pathType, transform)); + } +} +function putBinaryImageData(ctx, imgData) { + if (imgData instanceof ImageData) { + ctx.putImageData(imgData, 0, 0); + return; + } + const height = imgData.height, + width = imgData.width; + const partialChunkHeight = height % FULL_CHUNK_HEIGHT; + const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; + const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; + const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); + let srcPos = 0, + destPos; + const src = imgData.data; + const dest = chunkImgData.data; + let i, j, thisChunkHeight, elemsInThisChunk; + if (imgData.kind === util_ImageKind.GRAYSCALE_1BPP) { + const srcLength = src.byteLength; + const dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2); + const dest32DataLength = dest32.length; + const fullSrcDiff = width + 7 >> 3; + const white = 0xffffffff; + const black = util_FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff; + for (i = 0; i < totalChunks; i++) { + thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; + destPos = 0; + for (j = 0; j < thisChunkHeight; j++) { + const srcDiff = srcLength - srcPos; + let k = 0; + const kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7; + const kEndUnrolled = kEnd & ~7; + let mask = 0; + let srcByte = 0; + for (; k < kEndUnrolled; k += 8) { + srcByte = src[srcPos++]; + dest32[destPos++] = srcByte & 128 ? white : black; + dest32[destPos++] = srcByte & 64 ? white : black; + dest32[destPos++] = srcByte & 32 ? white : black; + dest32[destPos++] = srcByte & 16 ? white : black; + dest32[destPos++] = srcByte & 8 ? white : black; + dest32[destPos++] = srcByte & 4 ? white : black; + dest32[destPos++] = srcByte & 2 ? white : black; + dest32[destPos++] = srcByte & 1 ? white : black; + } + for (; k < kEnd; k++) { + if (mask === 0) { + srcByte = src[srcPos++]; + mask = 128; + } + dest32[destPos++] = srcByte & mask ? white : black; + mask >>= 1; + } + } + while (destPos < dest32DataLength) { + dest32[destPos++] = 0; + } + ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); + } + } else if (imgData.kind === util_ImageKind.RGBA_32BPP) { + j = 0; + elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4; + for (i = 0; i < fullChunks; i++) { + dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); + srcPos += elemsInThisChunk; + ctx.putImageData(chunkImgData, 0, j); + j += FULL_CHUNK_HEIGHT; + } + if (i < totalChunks) { + elemsInThisChunk = width * partialChunkHeight * 4; + dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); + ctx.putImageData(chunkImgData, 0, j); + } + } else if (imgData.kind === util_ImageKind.RGB_24BPP) { + thisChunkHeight = FULL_CHUNK_HEIGHT; + elemsInThisChunk = width * thisChunkHeight; + for (i = 0; i < totalChunks; i++) { + if (i >= fullChunks) { + thisChunkHeight = partialChunkHeight; + elemsInThisChunk = width * thisChunkHeight; + } + destPos = 0; + for (j = elemsInThisChunk; j--;) { + dest[destPos++] = src[srcPos++]; + dest[destPos++] = src[srcPos++]; + dest[destPos++] = src[srcPos++]; + dest[destPos++] = 255; + } + ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); + } + } else { + throw new Error(`bad image kind: ${imgData.kind}`); + } +} +function putBinaryImageMask(ctx, imgData) { + if (imgData.bitmap) { + ctx.drawImage(imgData.bitmap, 0, 0); + return; + } + const height = imgData.height, + width = imgData.width; + const partialChunkHeight = height % FULL_CHUNK_HEIGHT; + const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; + const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; + const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); + let srcPos = 0; + const src = imgData.data; + const dest = chunkImgData.data; + for (let i = 0; i < totalChunks; i++) { + const thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; + ({ + srcPos + } = convertBlackAndWhiteToRGBA({ + src, + srcPos, + dest, + width, + height: thisChunkHeight, + nonBlackColor: 0 + })); + ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); + } +} +function copyCtxState(sourceCtx, destCtx) { + const properties = ["strokeStyle", "fillStyle", "fillRule", "globalAlpha", "lineWidth", "lineCap", "lineJoin", "miterLimit", "globalCompositeOperation", "font", "filter"]; + for (const property of properties) { + if (sourceCtx[property] !== undefined) { + destCtx[property] = sourceCtx[property]; + } + } + if (sourceCtx.setLineDash !== undefined) { + destCtx.setLineDash(sourceCtx.getLineDash()); + destCtx.lineDashOffset = sourceCtx.lineDashOffset; + } +} +function resetCtxToDefault(ctx) { + ctx.strokeStyle = ctx.fillStyle = "#000000"; + ctx.fillRule = "nonzero"; + ctx.globalAlpha = 1; + ctx.lineWidth = 1; + ctx.lineCap = "butt"; + ctx.lineJoin = "miter"; + ctx.miterLimit = 10; + ctx.globalCompositeOperation = "source-over"; + ctx.font = "10px sans-serif"; + if (ctx.setLineDash !== undefined) { + ctx.setLineDash([]); + ctx.lineDashOffset = 0; + } + const { + filter + } = ctx; + if (filter !== "none" && filter !== "") { + ctx.filter = "none"; + } +} +function getImageSmoothingEnabled(transform, interpolate) { + if (interpolate) { + return true; + } + Util.singularValueDecompose2dScale(transform, XY); + const actualScale = Math.fround(OutputScale.pixelRatio * PixelsPerInch.PDF_TO_CSS_UNITS); + return XY[0] <= actualScale && XY[1] <= actualScale; +} +const LINE_CAP_STYLES = ["butt", "round", "square"]; +const LINE_JOIN_STYLES = ["miter", "round", "bevel"]; +const NORMAL_CLIP = {}; +const EO_CLIP = {}; +class CanvasGraphics { + constructor(canvasCtx, commonObjs, objs, canvasFactory, filterFactory, { + optionalContentConfig, + markedContentStack = null + }, annotationCanvasMap, pageColors, dependencyTracker) { + this.ctx = canvasCtx; + this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height); + this.stateStack = []; + this.pendingClip = null; + this.pendingEOFill = false; + this.res = null; + this.xobjs = null; + this.commonObjs = commonObjs; + this.objs = objs; + this.canvasFactory = canvasFactory; + this.filterFactory = filterFactory; + this.groupStack = []; + this.baseTransform = null; + this.baseTransformStack = []; + this.groupLevel = 0; + this.smaskStack = []; + this.smaskCounter = 0; + this.tempSMask = null; + this.suspendedCtx = null; + this.contentVisible = true; + this.markedContentStack = markedContentStack || []; + this.optionalContentConfig = optionalContentConfig; + this.cachedCanvases = new CachedCanvases(this.canvasFactory); + this.cachedPatterns = new Map(); + this.annotationCanvasMap = annotationCanvasMap; + this.viewportScale = 1; + this.outputScaleX = 1; + this.outputScaleY = 1; + this.pageColors = pageColors; + this._cachedScaleForStroking = [-1, 0]; + this._cachedGetSinglePixelWidth = null; + this._cachedBitmapsMap = new Map(); + this.dependencyTracker = dependencyTracker ?? null; + } + getObject(opIdx, data, fallback = null) { + if (typeof data === "string") { + this.dependencyTracker?.recordNamedDependency(opIdx, data); + return data.startsWith("g_") ? this.commonObjs.get(data) : this.objs.get(data); + } + return fallback; + } + beginDrawing({ + transform, + viewport, + transparency = false, + background = null + }) { + const width = this.ctx.canvas.width; + const height = this.ctx.canvas.height; + const savedFillStyle = this.ctx.fillStyle; + this.ctx.fillStyle = background || "#ffffff"; + this.ctx.fillRect(0, 0, width, height); + this.ctx.fillStyle = savedFillStyle; + if (transparency) { + const transparentCanvas = this.cachedCanvases.getCanvas("transparent", width, height); + this.compositeCtx = this.ctx; + this.transparentCanvas = transparentCanvas.canvas; + this.ctx = transparentCanvas.context; + this.ctx.save(); + this.ctx.transform(...getCurrentTransform(this.compositeCtx)); + } + this.ctx.save(); + resetCtxToDefault(this.ctx); + if (transform) { + this.ctx.transform(...transform); + this.outputScaleX = transform[0]; + this.outputScaleY = transform[0]; + } + this.ctx.transform(...viewport.transform); + this.viewportScale = viewport.scale; + this.baseTransform = getCurrentTransform(this.ctx); + } + executeOperatorList(operatorList, executionStartIdx, continueCallback, stepper, operationsFilter) { + const argsArray = operatorList.argsArray; + const fnArray = operatorList.fnArray; + let i = executionStartIdx || 0; + const argsArrayLen = argsArray.length; + if (argsArrayLen === i) { + return i; + } + const chunkOperations = argsArrayLen - i > EXECUTION_STEPS && typeof continueCallback === "function"; + const endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0; + let steps = 0; + const commonObjs = this.commonObjs; + const objs = this.objs; + let fnId, fnArgs; + while (true) { + if (stepper !== undefined && i === stepper.nextBreakPoint) { + stepper.breakIt(i, continueCallback); + return i; + } + if (!operationsFilter || operationsFilter(i)) { + fnId = fnArray[i]; + fnArgs = argsArray[i] ?? null; + if (fnId !== OPS.dependency) { + if (fnArgs === null) { + this[fnId](i); + } else { + this[fnId](i, ...fnArgs); + } + } else { + for (const depObjId of fnArgs) { + this.dependencyTracker?.recordNamedData(depObjId, i); + const objsPool = depObjId.startsWith("g_") ? commonObjs : objs; + if (!objsPool.has(depObjId)) { + objsPool.get(depObjId, continueCallback); + return i; + } + } + } + } + i++; + if (i === argsArrayLen) { + return i; + } + if (chunkOperations && ++steps > EXECUTION_STEPS) { + if (Date.now() > endTime) { + continueCallback(); + return i; + } + steps = 0; + } + } + } + #restoreInitialState() { + while (this.stateStack.length || this.inSMaskMode) { + this.restore(); + } + this.current.activeSMask = null; + this.ctx.restore(); + if (this.transparentCanvas) { + this.ctx = this.compositeCtx; + this.ctx.save(); + this.ctx.setTransform(1, 0, 0, 1, 0, 0); + this.ctx.drawImage(this.transparentCanvas, 0, 0); + this.ctx.restore(); + this.transparentCanvas = null; + } + } + endDrawing() { + this.#restoreInitialState(); + this.cachedCanvases.clear(); + this.cachedPatterns.clear(); + for (const cache of this._cachedBitmapsMap.values()) { + for (const canvas of cache.values()) { + if (typeof HTMLCanvasElement !== "undefined" && canvas instanceof HTMLCanvasElement) { + canvas.width = canvas.height = 0; + } + } + cache.clear(); + } + this._cachedBitmapsMap.clear(); + this.#drawFilter(); + } + #drawFilter() { + if (this.pageColors) { + const hcmFilterId = this.filterFactory.addHCMFilter(this.pageColors.foreground, this.pageColors.background); + if (hcmFilterId !== "none") { + const savedFilter = this.ctx.filter; + this.ctx.filter = hcmFilterId; + this.ctx.drawImage(this.ctx.canvas, 0, 0); + this.ctx.filter = savedFilter; + } + } + } + _scaleImage(img, inverseTransform) { + const width = img.width ?? img.displayWidth; + const height = img.height ?? img.displayHeight; + let widthScale = Math.max(Math.hypot(inverseTransform[0], inverseTransform[1]), 1); + let heightScale = Math.max(Math.hypot(inverseTransform[2], inverseTransform[3]), 1); + let paintWidth = width, + paintHeight = height; + let tmpCanvasId = "prescale1"; + let tmpCanvas, tmpCtx; + while (widthScale > 2 && paintWidth > 1 || heightScale > 2 && paintHeight > 1) { + let newWidth = paintWidth, + newHeight = paintHeight; + if (widthScale > 2 && paintWidth > 1) { + newWidth = paintWidth >= 16384 ? Math.floor(paintWidth / 2) - 1 || 1 : Math.ceil(paintWidth / 2); + widthScale /= paintWidth / newWidth; + } + if (heightScale > 2 && paintHeight > 1) { + newHeight = paintHeight >= 16384 ? Math.floor(paintHeight / 2) - 1 || 1 : Math.ceil(paintHeight) / 2; + heightScale /= paintHeight / newHeight; + } + tmpCanvas = this.cachedCanvases.getCanvas(tmpCanvasId, newWidth, newHeight); + tmpCtx = tmpCanvas.context; + tmpCtx.clearRect(0, 0, newWidth, newHeight); + tmpCtx.drawImage(img, 0, 0, paintWidth, paintHeight, 0, 0, newWidth, newHeight); + img = tmpCanvas.canvas; + paintWidth = newWidth; + paintHeight = newHeight; + tmpCanvasId = tmpCanvasId === "prescale1" ? "prescale2" : "prescale1"; + } + return { + img, + paintWidth, + paintHeight + }; + } + _createMaskCanvas(opIdx, img) { + const ctx = this.ctx; + const { + width, + height + } = img; + const fillColor = this.current.fillColor; + const isPatternFill = this.current.patternFill; + const currentTransform = getCurrentTransform(ctx); + let cache, cacheKey, scaled, maskCanvas; + if ((img.bitmap || img.data) && img.count > 1) { + const mainKey = img.bitmap || img.data.buffer; + cacheKey = JSON.stringify(isPatternFill ? currentTransform : [currentTransform.slice(0, 4), fillColor]); + cache = this._cachedBitmapsMap.get(mainKey); + if (!cache) { + cache = new Map(); + this._cachedBitmapsMap.set(mainKey, cache); + } + const cachedImage = cache.get(cacheKey); + if (cachedImage && !isPatternFill) { + const offsetX = Math.round(Math.min(currentTransform[0], currentTransform[2]) + currentTransform[4]); + const offsetY = Math.round(Math.min(currentTransform[1], currentTransform[3]) + currentTransform[5]); + this.dependencyTracker?.recordDependencies(opIdx, Dependencies.transformAndFill); + return { + canvas: cachedImage, + offsetX, + offsetY + }; + } + scaled = cachedImage; + } + if (!scaled) { + maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height); + putBinaryImageMask(maskCanvas.context, img); + } + let maskToCanvas = Util.transform(currentTransform, [1 / width, 0, 0, -1 / height, 0, 0]); + maskToCanvas = Util.transform(maskToCanvas, [1, 0, 0, 1, 0, -height]); + const minMax = MIN_MAX_INIT.slice(); + Util.axialAlignedBoundingBox([0, 0, width, height], maskToCanvas, minMax); + const [minX, minY, maxX, maxY] = minMax; + const drawnWidth = Math.round(maxX - minX) || 1; + const drawnHeight = Math.round(maxY - minY) || 1; + const fillCanvas = this.cachedCanvases.getCanvas("fillCanvas", drawnWidth, drawnHeight); + const fillCtx = fillCanvas.context; + const offsetX = minX; + const offsetY = minY; + fillCtx.translate(-offsetX, -offsetY); + fillCtx.transform(...maskToCanvas); + if (!scaled) { + scaled = this._scaleImage(maskCanvas.canvas, getCurrentTransformInverse(fillCtx)); + scaled = scaled.img; + if (cache && isPatternFill) { + cache.set(cacheKey, scaled); + } + } + fillCtx.imageSmoothingEnabled = getImageSmoothingEnabled(getCurrentTransform(fillCtx), img.interpolate); + drawImageAtIntegerCoords(fillCtx, scaled, 0, 0, scaled.width, scaled.height, 0, 0, width, height); + fillCtx.globalCompositeOperation = "source-in"; + const inverse = Util.transform(getCurrentTransformInverse(fillCtx), [1, 0, 0, 1, -offsetX, -offsetY]); + fillCtx.fillStyle = isPatternFill ? fillColor.getPattern(ctx, this, inverse, PathType.FILL, opIdx) : fillColor; + fillCtx.fillRect(0, 0, width, height); + if (cache && !isPatternFill) { + this.cachedCanvases.delete("fillCanvas"); + cache.set(cacheKey, fillCanvas.canvas); + } + this.dependencyTracker?.recordDependencies(opIdx, Dependencies.transformAndFill); + return { + canvas: fillCanvas.canvas, + offsetX: Math.round(offsetX), + offsetY: Math.round(offsetY) + }; + } + setLineWidth(opIdx, width) { + this.dependencyTracker?.recordSimpleData("lineWidth", opIdx); + if (width !== this.current.lineWidth) { + this._cachedScaleForStroking[0] = -1; + } + this.current.lineWidth = width; + this.ctx.lineWidth = width; + } + setLineCap(opIdx, style) { + this.dependencyTracker?.recordSimpleData("lineCap", opIdx); + this.ctx.lineCap = LINE_CAP_STYLES[style]; + } + setLineJoin(opIdx, style) { + this.dependencyTracker?.recordSimpleData("lineJoin", opIdx); + this.ctx.lineJoin = LINE_JOIN_STYLES[style]; + } + setMiterLimit(opIdx, limit) { + this.dependencyTracker?.recordSimpleData("miterLimit", opIdx); + this.ctx.miterLimit = limit; + } + setDash(opIdx, dashArray, dashPhase) { + this.dependencyTracker?.recordSimpleData("dash", opIdx); + const ctx = this.ctx; + if (ctx.setLineDash !== undefined) { + ctx.setLineDash(dashArray); + ctx.lineDashOffset = dashPhase; + } + } + setRenderingIntent(opIdx, intent) {} + setFlatness(opIdx, flatness) {} + setGState(opIdx, states) { + for (const [key, value] of states) { + switch (key) { + case "LW": + this.setLineWidth(opIdx, value); + break; + case "LC": + this.setLineCap(opIdx, value); + break; + case "LJ": + this.setLineJoin(opIdx, value); + break; + case "ML": + this.setMiterLimit(opIdx, value); + break; + case "D": + this.setDash(opIdx, value[0], value[1]); + break; + case "RI": + this.setRenderingIntent(opIdx, value); + break; + case "FL": + this.setFlatness(opIdx, value); + break; + case "Font": + this.setFont(opIdx, value[0], value[1]); + break; + case "CA": + this.dependencyTracker?.recordSimpleData("strokeAlpha", opIdx); + this.current.strokeAlpha = value; + break; + case "ca": + this.dependencyTracker?.recordSimpleData("fillAlpha", opIdx); + this.ctx.globalAlpha = this.current.fillAlpha = value; + break; + case "BM": + this.dependencyTracker?.recordSimpleData("globalCompositeOperation", opIdx); + this.ctx.globalCompositeOperation = value; + break; + case "SMask": + this.dependencyTracker?.recordSimpleData("SMask", opIdx); + this.current.activeSMask = value ? this.tempSMask : null; + this.tempSMask = null; + this.checkSMaskState(); + break; + case "TR": + this.dependencyTracker?.recordSimpleData("filter", opIdx); + this.ctx.filter = this.current.transferMaps = this.filterFactory.addFilter(value); + break; + } + } + } + get inSMaskMode() { + return !!this.suspendedCtx; + } + checkSMaskState() { + const inSMaskMode = this.inSMaskMode; + if (this.current.activeSMask && !inSMaskMode) { + this.beginSMaskMode(); + } else if (!this.current.activeSMask && inSMaskMode) { + this.endSMaskMode(); + } + } + beginSMaskMode(opIdx) { + if (this.inSMaskMode) { + throw new Error("beginSMaskMode called while already in smask mode"); + } + const drawnWidth = this.ctx.canvas.width; + const drawnHeight = this.ctx.canvas.height; + const cacheId = "smaskGroupAt" + this.groupLevel; + const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight); + this.suspendedCtx = this.ctx; + const ctx = this.ctx = scratchCanvas.context; + ctx.setTransform(this.suspendedCtx.getTransform()); + copyCtxState(this.suspendedCtx, ctx); + mirrorContextOperations(ctx, this.suspendedCtx); + this.setGState(opIdx, [["BM", "source-over"]]); + } + endSMaskMode() { + if (!this.inSMaskMode) { + throw new Error("endSMaskMode called while not in smask mode"); + } + this.ctx._removeMirroring(); + copyCtxState(this.ctx, this.suspendedCtx); + this.ctx = this.suspendedCtx; + this.suspendedCtx = null; + } + compose(dirtyBox) { + if (!this.current.activeSMask) { + return; + } + if (!dirtyBox) { + dirtyBox = [0, 0, this.ctx.canvas.width, this.ctx.canvas.height]; + } else { + dirtyBox[0] = Math.floor(dirtyBox[0]); + dirtyBox[1] = Math.floor(dirtyBox[1]); + dirtyBox[2] = Math.ceil(dirtyBox[2]); + dirtyBox[3] = Math.ceil(dirtyBox[3]); + } + const smask = this.current.activeSMask; + const suspendedCtx = this.suspendedCtx; + this.composeSMask(suspendedCtx, smask, this.ctx, dirtyBox); + this.ctx.save(); + this.ctx.setTransform(1, 0, 0, 1, 0, 0); + this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height); + this.ctx.restore(); + } + composeSMask(ctx, smask, layerCtx, layerBox) { + const layerOffsetX = layerBox[0]; + const layerOffsetY = layerBox[1]; + const layerWidth = layerBox[2] - layerOffsetX; + const layerHeight = layerBox[3] - layerOffsetY; + if (layerWidth === 0 || layerHeight === 0) { + return; + } + this.genericComposeSMask(smask.context, layerCtx, layerWidth, layerHeight, smask.subtype, smask.backdrop, smask.transferMap, layerOffsetX, layerOffsetY, smask.offsetX, smask.offsetY); + ctx.save(); + ctx.globalAlpha = 1; + ctx.globalCompositeOperation = "source-over"; + ctx.setTransform(1, 0, 0, 1, 0, 0); + ctx.drawImage(layerCtx.canvas, 0, 0); + ctx.restore(); + } + genericComposeSMask(maskCtx, layerCtx, width, height, subtype, backdrop, transferMap, layerOffsetX, layerOffsetY, maskOffsetX, maskOffsetY) { + let maskCanvas = maskCtx.canvas; + let maskX = layerOffsetX - maskOffsetX; + let maskY = layerOffsetY - maskOffsetY; + if (backdrop) { + if (maskX < 0 || maskY < 0 || maskX + width > maskCanvas.width || maskY + height > maskCanvas.height) { + const canvas = this.cachedCanvases.getCanvas("maskExtension", width, height); + const ctx = canvas.context; + ctx.drawImage(maskCanvas, -maskX, -maskY); + ctx.globalCompositeOperation = "destination-atop"; + ctx.fillStyle = backdrop; + ctx.fillRect(0, 0, width, height); + ctx.globalCompositeOperation = "source-over"; + maskCanvas = canvas.canvas; + maskX = maskY = 0; + } else { + maskCtx.save(); + maskCtx.globalAlpha = 1; + maskCtx.setTransform(1, 0, 0, 1, 0, 0); + const clip = new Path2D(); + clip.rect(maskX, maskY, width, height); + maskCtx.clip(clip); + maskCtx.globalCompositeOperation = "destination-atop"; + maskCtx.fillStyle = backdrop; + maskCtx.fillRect(maskX, maskY, width, height); + maskCtx.restore(); + } + } + layerCtx.save(); + layerCtx.globalAlpha = 1; + layerCtx.setTransform(1, 0, 0, 1, 0, 0); + if (subtype === "Alpha" && transferMap) { + layerCtx.filter = this.filterFactory.addAlphaFilter(transferMap); + } else if (subtype === "Luminosity") { + layerCtx.filter = this.filterFactory.addLuminosityFilter(transferMap); + } + const clip = new Path2D(); + clip.rect(layerOffsetX, layerOffsetY, width, height); + layerCtx.clip(clip); + layerCtx.globalCompositeOperation = "destination-in"; + layerCtx.drawImage(maskCanvas, maskX, maskY, width, height, layerOffsetX, layerOffsetY, width, height); + layerCtx.restore(); + } + save(opIdx) { + if (this.inSMaskMode) { + copyCtxState(this.ctx, this.suspendedCtx); + } + this.ctx.save(); + const old = this.current; + this.stateStack.push(old); + this.current = old.clone(); + this.dependencyTracker?.save(opIdx); + } + restore(opIdx) { + this.dependencyTracker?.restore(opIdx); + if (this.stateStack.length === 0) { + if (this.inSMaskMode) { + this.endSMaskMode(); + } + return; + } + this.current = this.stateStack.pop(); + this.ctx.restore(); + if (this.inSMaskMode) { + copyCtxState(this.suspendedCtx, this.ctx); + } + this.checkSMaskState(); + this.pendingClip = null; + this._cachedScaleForStroking[0] = -1; + this._cachedGetSinglePixelWidth = null; + } + transform(opIdx, a, b, c, d, e, f) { + this.dependencyTracker?.recordIncrementalData("transform", opIdx); + this.ctx.transform(a, b, c, d, e, f); + this._cachedScaleForStroking[0] = -1; + this._cachedGetSinglePixelWidth = null; + } + constructPath(opIdx, op, data, minMax) { + let [path] = data; + if (!minMax) { + path ||= data[0] = new Path2D(); + this[op](opIdx, path); + return; + } + if (this.dependencyTracker !== null) { + const outerExtraSize = op === OPS.stroke ? this.current.lineWidth / 2 : 0; + this.dependencyTracker.resetBBox(opIdx).recordBBox(opIdx, this.ctx, minMax[0] - outerExtraSize, minMax[2] + outerExtraSize, minMax[1] - outerExtraSize, minMax[3] + outerExtraSize).recordDependencies(opIdx, ["transform"]); + } + if (!(path instanceof Path2D)) { + path = data[0] = makePathFromDrawOPS(path); + } + Util.axialAlignedBoundingBox(minMax, getCurrentTransform(this.ctx), this.current.minMax); + this[op](opIdx, path); + this._pathStartIdx = opIdx; + } + closePath(opIdx) { + this.ctx.closePath(); + } + stroke(opIdx, path, consumePath = true) { + const ctx = this.ctx; + const strokeColor = this.current.strokeColor; + ctx.globalAlpha = this.current.strokeAlpha; + if (this.contentVisible) { + if (typeof strokeColor === "object" && strokeColor?.getPattern) { + const baseTransform = strokeColor.isModifyingCurrentTransform() ? ctx.getTransform() : null; + ctx.save(); + ctx.strokeStyle = strokeColor.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.STROKE, opIdx); + if (baseTransform) { + const newPath = new Path2D(); + newPath.addPath(path, ctx.getTransform().invertSelf().multiplySelf(baseTransform)); + path = newPath; + } + this.rescaleAndStroke(path, false); + ctx.restore(); + } else { + this.rescaleAndStroke(path, true); + } + } + this.dependencyTracker?.recordDependencies(opIdx, Dependencies.stroke); + if (consumePath) { + this.consumePath(opIdx, path, this.current.getClippedPathBoundingBox(PathType.STROKE, getCurrentTransform(this.ctx))); + } + ctx.globalAlpha = this.current.fillAlpha; + } + closeStroke(opIdx, path) { + this.stroke(opIdx, path); + } + fill(opIdx, path, consumePath = true) { + const ctx = this.ctx; + const fillColor = this.current.fillColor; + const isPatternFill = this.current.patternFill; + let needRestore = false; + if (isPatternFill) { + const baseTransform = fillColor.isModifyingCurrentTransform() ? ctx.getTransform() : null; + this.dependencyTracker?.save(opIdx); + ctx.save(); + ctx.fillStyle = fillColor.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.FILL, opIdx); + if (baseTransform) { + const newPath = new Path2D(); + newPath.addPath(path, ctx.getTransform().invertSelf().multiplySelf(baseTransform)); + path = newPath; + } + needRestore = true; + } + const intersect = this.current.getClippedPathBoundingBox(); + if (this.contentVisible && intersect !== null) { + if (this.pendingEOFill) { + ctx.fill(path, "evenodd"); + this.pendingEOFill = false; + } else { + ctx.fill(path); + } + } + this.dependencyTracker?.recordDependencies(opIdx, Dependencies.fill); + if (needRestore) { + ctx.restore(); + this.dependencyTracker?.restore(opIdx); + } + if (consumePath) { + this.consumePath(opIdx, path, intersect); + } + } + eoFill(opIdx, path) { + this.pendingEOFill = true; + this.fill(opIdx, path); + } + fillStroke(opIdx, path) { + this.fill(opIdx, path, false); + this.stroke(opIdx, path, false); + this.consumePath(opIdx, path); + } + eoFillStroke(opIdx, path) { + this.pendingEOFill = true; + this.fillStroke(opIdx, path); + } + closeFillStroke(opIdx, path) { + this.fillStroke(opIdx, path); + } + closeEOFillStroke(opIdx, path) { + this.pendingEOFill = true; + this.fillStroke(opIdx, path); + } + endPath(opIdx, path) { + this.consumePath(opIdx, path); + } + rawFillPath(opIdx, path) { + this.ctx.fill(path); + this.dependencyTracker?.recordDependencies(opIdx, Dependencies.rawFillPath).recordOperation(opIdx); + } + clip(opIdx) { + this.dependencyTracker?.recordFutureForcedDependency("clipMode", opIdx); + this.pendingClip = NORMAL_CLIP; + } + eoClip(opIdx) { + this.dependencyTracker?.recordFutureForcedDependency("clipMode", opIdx); + this.pendingClip = EO_CLIP; + } + beginText(opIdx) { + this.current.textMatrix = null; + this.current.textMatrixScale = 1; + this.current.x = this.current.lineX = 0; + this.current.y = this.current.lineY = 0; + this.dependencyTracker?.recordOpenMarker(opIdx).resetIncrementalData("sameLineText").resetIncrementalData("moveText", opIdx); + } + endText(opIdx) { + const paths = this.pendingTextPaths; + const ctx = this.ctx; + if (this.dependencyTracker) { + const { + dependencyTracker + } = this; + if (paths !== undefined) { + dependencyTracker.recordFutureForcedDependency("textClip", dependencyTracker.getOpenMarker()).recordFutureForcedDependency("textClip", opIdx); + } + dependencyTracker.recordCloseMarker(opIdx); + } + if (paths !== undefined) { + const newPath = new Path2D(); + const invTransf = ctx.getTransform().invertSelf(); + for (const { + transform, + x, + y, + fontSize, + path + } of paths) { + if (!path) { + continue; + } + newPath.addPath(path, new DOMMatrix(transform).preMultiplySelf(invTransf).translate(x, y).scale(fontSize, -fontSize)); + } + ctx.clip(newPath); + } + delete this.pendingTextPaths; + } + setCharSpacing(opIdx, spacing) { + this.dependencyTracker?.recordSimpleData("charSpacing", opIdx); + this.current.charSpacing = spacing; + } + setWordSpacing(opIdx, spacing) { + this.dependencyTracker?.recordSimpleData("wordSpacing", opIdx); + this.current.wordSpacing = spacing; + } + setHScale(opIdx, scale) { + this.dependencyTracker?.recordSimpleData("hScale", opIdx); + this.current.textHScale = scale / 100; + } + setLeading(opIdx, leading) { + this.dependencyTracker?.recordSimpleData("leading", opIdx); + this.current.leading = -leading; + } + setFont(opIdx, fontRefName, size) { + this.dependencyTracker?.recordSimpleData("font", opIdx).recordSimpleDataFromNamed("fontObj", fontRefName, opIdx); + const fontObj = this.commonObjs.get(fontRefName); + const current = this.current; + if (!fontObj) { + throw new Error(`Can't find font for ${fontRefName}`); + } + current.fontMatrix = fontObj.fontMatrix || FONT_IDENTITY_MATRIX; + if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) { + warn("Invalid font matrix for font " + fontRefName); + } + if (size < 0) { + size = -size; + current.fontDirection = -1; + } else { + current.fontDirection = 1; + } + this.current.font = fontObj; + this.current.fontSize = size; + if (fontObj.isType3Font) { + return; + } + const name = fontObj.loadedName || "sans-serif"; + const typeface = fontObj.systemFontInfo?.css || `"${name}", ${fontObj.fallbackName}`; + let bold = "normal"; + if (fontObj.black) { + bold = "900"; + } else if (fontObj.bold) { + bold = "bold"; + } + const italic = fontObj.italic ? "italic" : "normal"; + let browserFontSize = size; + if (size < MIN_FONT_SIZE) { + browserFontSize = MIN_FONT_SIZE; + } else if (size > MAX_FONT_SIZE) { + browserFontSize = MAX_FONT_SIZE; + } + this.current.fontSizeScale = size / browserFontSize; + this.ctx.font = `${italic} ${bold} ${browserFontSize}px ${typeface}`; + } + setTextRenderingMode(opIdx, mode) { + this.dependencyTracker?.recordSimpleData("textRenderingMode", opIdx); + this.current.textRenderingMode = mode; + } + setTextRise(opIdx, rise) { + this.dependencyTracker?.recordSimpleData("textRise", opIdx); + this.current.textRise = rise; + } + moveText(opIdx, x, y) { + this.dependencyTracker?.resetIncrementalData("sameLineText").recordIncrementalData("moveText", opIdx); + this.current.x = this.current.lineX += x; + this.current.y = this.current.lineY += y; + } + setLeadingMoveText(opIdx, x, y) { + this.setLeading(opIdx, -y); + this.moveText(opIdx, x, y); + } + setTextMatrix(opIdx, matrix) { + this.dependencyTracker?.resetIncrementalData("sameLineText").recordSimpleData("textMatrix", opIdx); + const { + current + } = this; + current.textMatrix = matrix; + current.textMatrixScale = Math.hypot(matrix[0], matrix[1]); + current.x = current.lineX = 0; + current.y = current.lineY = 0; + } + nextLine(opIdx) { + this.moveText(opIdx, 0, this.current.leading); + this.dependencyTracker?.recordIncrementalData("moveText", this.dependencyTracker.getSimpleIndex("leading") ?? opIdx); + } + #getScaledPath(path, currentTransform, transform) { + const newPath = new Path2D(); + newPath.addPath(path, new DOMMatrix(transform).invertSelf().multiplySelf(currentTransform)); + return newPath; + } + paintChar(opIdx, character, x, y, patternFillTransform, patternStrokeTransform) { + const ctx = this.ctx; + const current = this.current; + const font = current.font; + const textRenderingMode = current.textRenderingMode; + const fontSize = current.fontSize / current.fontSizeScale; + const fillStrokeMode = textRenderingMode & TextRenderingMode.FILL_STROKE_MASK; + const isAddToPathSet = !!(textRenderingMode & TextRenderingMode.ADD_TO_PATH_FLAG); + const patternFill = current.patternFill && !font.missingFile; + const patternStroke = current.patternStroke && !font.missingFile; + let path; + if ((font.disableFontFace || isAddToPathSet || patternFill || patternStroke) && !font.missingFile) { + path = font.getPathGenerator(this.commonObjs, character); + } + if (path && (font.disableFontFace || patternFill || patternStroke)) { + ctx.save(); + ctx.translate(x, y); + ctx.scale(fontSize, -fontSize); + this.dependencyTracker?.recordCharacterBBox(opIdx, ctx, font); + let currentTransform; + if (fillStrokeMode === TextRenderingMode.FILL || fillStrokeMode === TextRenderingMode.FILL_STROKE) { + if (patternFillTransform) { + currentTransform = ctx.getTransform(); + ctx.setTransform(...patternFillTransform); + const scaledPath = this.#getScaledPath(path, currentTransform, patternFillTransform); + ctx.fill(scaledPath); + } else { + ctx.fill(path); + } + } + if (fillStrokeMode === TextRenderingMode.STROKE || fillStrokeMode === TextRenderingMode.FILL_STROKE) { + if (patternStrokeTransform) { + currentTransform ||= ctx.getTransform(); + ctx.setTransform(...patternStrokeTransform); + const { + a, + b, + c, + d + } = currentTransform; + const invPatternTransform = Util.inverseTransform(patternStrokeTransform); + const transf = Util.transform([a, b, c, d, 0, 0], invPatternTransform); + Util.singularValueDecompose2dScale(transf, XY); + ctx.lineWidth *= Math.max(XY[0], XY[1]) / fontSize; + ctx.stroke(this.#getScaledPath(path, currentTransform, patternStrokeTransform)); + } else { + ctx.lineWidth /= fontSize; + ctx.stroke(path); + } + } + ctx.restore(); + } else { + if (fillStrokeMode === TextRenderingMode.FILL || fillStrokeMode === TextRenderingMode.FILL_STROKE) { + ctx.fillText(character, x, y); + this.dependencyTracker?.recordCharacterBBox(opIdx, ctx, font, fontSize, x, y, () => ctx.measureText(character)); + } + if (fillStrokeMode === TextRenderingMode.STROKE || fillStrokeMode === TextRenderingMode.FILL_STROKE) { + if (this.dependencyTracker) { + this.dependencyTracker?.recordCharacterBBox(opIdx, ctx, font, fontSize, x, y, () => ctx.measureText(character)).recordDependencies(opIdx, Dependencies.stroke); + } + ctx.strokeText(character, x, y); + } + } + if (isAddToPathSet) { + const paths = this.pendingTextPaths ||= []; + paths.push({ + transform: getCurrentTransform(ctx), + x, + y, + fontSize, + path + }); + this.dependencyTracker?.recordCharacterBBox(opIdx, ctx, font, fontSize, x, y); + } + } + get isFontSubpixelAAEnabled() { + const { + context: ctx + } = this.cachedCanvases.getCanvas("isFontSubpixelAAEnabled", 10, 10); + ctx.scale(1.5, 1); + ctx.fillText("I", 0, 10); + const data = ctx.getImageData(0, 0, 10, 10).data; + let enabled = false; + for (let i = 3; i < data.length; i += 4) { + if (data[i] > 0 && data[i] < 255) { + enabled = true; + break; + } + } + return shadow(this, "isFontSubpixelAAEnabled", enabled); + } + showText(opIdx, glyphs) { + if (this.dependencyTracker) { + this.dependencyTracker.recordDependencies(opIdx, Dependencies.showText).resetBBox(opIdx); + if (this.current.textRenderingMode & TextRenderingMode.ADD_TO_PATH_FLAG) { + this.dependencyTracker.recordFutureForcedDependency("textClip", opIdx).inheritPendingDependenciesAsFutureForcedDependencies(); + } + } + const current = this.current; + const font = current.font; + if (font.isType3Font) { + this.showType3Text(opIdx, glyphs); + this.dependencyTracker?.recordShowTextOperation(opIdx); + return undefined; + } + const fontSize = current.fontSize; + if (fontSize === 0) { + this.dependencyTracker?.recordOperation(opIdx); + return undefined; + } + const ctx = this.ctx; + const fontSizeScale = current.fontSizeScale; + const charSpacing = current.charSpacing; + const wordSpacing = current.wordSpacing; + const fontDirection = current.fontDirection; + const textHScale = current.textHScale * fontDirection; + const glyphsLength = glyphs.length; + const vertical = font.vertical; + const spacingDir = vertical ? 1 : -1; + const defaultVMetrics = font.defaultVMetrics; + const widthAdvanceScale = fontSize * current.fontMatrix[0]; + const simpleFillText = current.textRenderingMode === TextRenderingMode.FILL && !font.disableFontFace && !current.patternFill; + ctx.save(); + if (current.textMatrix) { + ctx.transform(...current.textMatrix); + } + ctx.translate(current.x, current.y + current.textRise); + if (fontDirection > 0) { + ctx.scale(textHScale, -1); + } else { + ctx.scale(textHScale, 1); + } + let patternFillTransform, patternStrokeTransform; + if (current.patternFill) { + ctx.save(); + const pattern = current.fillColor.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.FILL, opIdx); + patternFillTransform = getCurrentTransform(ctx); + ctx.restore(); + ctx.fillStyle = pattern; + } + if (current.patternStroke) { + ctx.save(); + const pattern = current.strokeColor.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.STROKE, opIdx); + patternStrokeTransform = getCurrentTransform(ctx); + ctx.restore(); + ctx.strokeStyle = pattern; + } + let lineWidth = current.lineWidth; + const scale = current.textMatrixScale; + if (scale === 0 || lineWidth === 0) { + const fillStrokeMode = current.textRenderingMode & TextRenderingMode.FILL_STROKE_MASK; + if (fillStrokeMode === TextRenderingMode.STROKE || fillStrokeMode === TextRenderingMode.FILL_STROKE) { + lineWidth = this.getSinglePixelWidth(); + } + } else { + lineWidth /= scale; + } + if (fontSizeScale !== 1.0) { + ctx.scale(fontSizeScale, fontSizeScale); + lineWidth /= fontSizeScale; + } + ctx.lineWidth = lineWidth; + if (font.isInvalidPDFjsFont) { + const chars = []; + let width = 0; + for (const glyph of glyphs) { + chars.push(glyph.unicode); + width += glyph.width; + } + const joinedChars = chars.join(""); + ctx.fillText(joinedChars, 0, 0); + if (this.dependencyTracker !== null) { + const measure = ctx.measureText(joinedChars); + this.dependencyTracker.recordBBox(opIdx, this.ctx, -measure.actualBoundingBoxLeft, measure.actualBoundingBoxRight, -measure.actualBoundingBoxAscent, measure.actualBoundingBoxDescent).recordShowTextOperation(opIdx); + } + current.x += width * widthAdvanceScale * textHScale; + ctx.restore(); + this.compose(); + return undefined; + } + let x = 0, + i; + for (i = 0; i < glyphsLength; ++i) { + const glyph = glyphs[i]; + if (typeof glyph === "number") { + x += spacingDir * glyph * fontSize / 1000; + continue; + } + let restoreNeeded = false; + const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; + const character = glyph.fontChar; + const accent = glyph.accent; + let scaledX, scaledY; + let width = glyph.width; + if (vertical) { + const vmetric = glyph.vmetric || defaultVMetrics; + const vx = -(glyph.vmetric ? vmetric[1] : width * 0.5) * widthAdvanceScale; + const vy = vmetric[2] * widthAdvanceScale; + width = vmetric ? -vmetric[0] : width; + scaledX = vx / fontSizeScale; + scaledY = (x + vy) / fontSizeScale; + } else { + scaledX = x / fontSizeScale; + scaledY = 0; + } + let measure; + if (font.remeasure && width > 0) { + measure = ctx.measureText(character); + const measuredWidth = measure.width * 1000 / fontSize * fontSizeScale; + if (width < measuredWidth && this.isFontSubpixelAAEnabled) { + const characterScaleX = width / measuredWidth; + restoreNeeded = true; + ctx.save(); + ctx.scale(characterScaleX, 1); + scaledX /= characterScaleX; + } else if (width !== measuredWidth) { + scaledX += (width - measuredWidth) / 2000 * fontSize / fontSizeScale; + } + } + if (this.contentVisible && (glyph.isInFont || font.missingFile)) { + if (simpleFillText && !accent) { + ctx.fillText(character, scaledX, scaledY); + this.dependencyTracker?.recordCharacterBBox(opIdx, ctx, measure ? { + bbox: null + } : font, fontSize / fontSizeScale, scaledX, scaledY, () => measure ?? ctx.measureText(character)); + } else { + this.paintChar(opIdx, character, scaledX, scaledY, patternFillTransform, patternStrokeTransform); + if (accent) { + const scaledAccentX = scaledX + fontSize * accent.offset.x / fontSizeScale; + const scaledAccentY = scaledY - fontSize * accent.offset.y / fontSizeScale; + this.paintChar(opIdx, accent.fontChar, scaledAccentX, scaledAccentY, patternFillTransform, patternStrokeTransform); + } + } + } + const charWidth = vertical ? width * widthAdvanceScale - spacing * fontDirection : width * widthAdvanceScale + spacing * fontDirection; + x += charWidth; + if (restoreNeeded) { + ctx.restore(); + } + } + if (vertical) { + current.y -= x; + } else { + current.x += x * textHScale; + } + ctx.restore(); + this.compose(); + this.dependencyTracker?.recordShowTextOperation(opIdx); + return undefined; + } + showType3Text(opIdx, glyphs) { + const ctx = this.ctx; + const current = this.current; + const font = current.font; + const fontSize = current.fontSize; + const fontDirection = current.fontDirection; + const spacingDir = font.vertical ? 1 : -1; + const charSpacing = current.charSpacing; + const wordSpacing = current.wordSpacing; + const textHScale = current.textHScale * fontDirection; + const fontMatrix = current.fontMatrix || FONT_IDENTITY_MATRIX; + const glyphsLength = glyphs.length; + const isTextInvisible = current.textRenderingMode === TextRenderingMode.INVISIBLE; + let i, glyph, width, spacingLength; + if (isTextInvisible || fontSize === 0) { + return; + } + this._cachedScaleForStroking[0] = -1; + this._cachedGetSinglePixelWidth = null; + ctx.save(); + if (current.textMatrix) { + ctx.transform(...current.textMatrix); + } + ctx.translate(current.x, current.y + current.textRise); + ctx.scale(textHScale, fontDirection); + const dependencyTracker = this.dependencyTracker; + this.dependencyTracker = dependencyTracker ? new CanvasNestedDependencyTracker(dependencyTracker, opIdx) : null; + for (i = 0; i < glyphsLength; ++i) { + glyph = glyphs[i]; + if (typeof glyph === "number") { + spacingLength = spacingDir * glyph * fontSize / 1000; + this.ctx.translate(spacingLength, 0); + current.x += spacingLength * textHScale; + continue; + } + const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; + const operatorList = font.charProcOperatorList[glyph.operatorListId]; + if (!operatorList) { + warn(`Type3 character "${glyph.operatorListId}" is not available.`); + } else if (this.contentVisible) { + this.save(); + ctx.scale(fontSize, fontSize); + ctx.transform(...fontMatrix); + this.executeOperatorList(operatorList); + this.restore(); + } + const p = [glyph.width, 0]; + Util.applyTransform(p, fontMatrix); + width = p[0] * fontSize + spacing; + ctx.translate(width, 0); + current.x += width * textHScale; + } + ctx.restore(); + if (dependencyTracker) { + this.dependencyTracker = dependencyTracker; + } + } + setCharWidth(opIdx, xWidth, yWidth) {} + setCharWidthAndBounds(opIdx, xWidth, yWidth, llx, lly, urx, ury) { + const clip = new Path2D(); + clip.rect(llx, lly, urx - llx, ury - lly); + this.ctx.clip(clip); + this.dependencyTracker?.recordBBox(opIdx, this.ctx, llx, urx, lly, ury).recordClipBox(opIdx, this.ctx, llx, urx, lly, ury); + this.endPath(opIdx); + } + getColorN_Pattern(opIdx, IR) { + let pattern; + if (IR[0] === "TilingPattern") { + const baseTransform = this.baseTransform || getCurrentTransform(this.ctx); + const canvasGraphicsFactory = { + createCanvasGraphics: (ctx, renderingOpIdx) => new CanvasGraphics(ctx, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, { + optionalContentConfig: this.optionalContentConfig, + markedContentStack: this.markedContentStack + }, undefined, undefined, this.dependencyTracker ? new CanvasNestedDependencyTracker(this.dependencyTracker, renderingOpIdx, true) : null) + }; + pattern = new TilingPattern(IR, this.ctx, canvasGraphicsFactory, baseTransform); + } else { + pattern = this._getPattern(opIdx, IR[1], IR[2]); + } + return pattern; + } + setStrokeColorN(opIdx, ...args) { + this.dependencyTracker?.recordSimpleData("strokeColor", opIdx); + this.current.strokeColor = this.getColorN_Pattern(opIdx, args); + this.current.patternStroke = true; + } + setFillColorN(opIdx, ...args) { + this.dependencyTracker?.recordSimpleData("fillColor", opIdx); + this.current.fillColor = this.getColorN_Pattern(opIdx, args); + this.current.patternFill = true; + } + setStrokeRGBColor(opIdx, color) { + this.dependencyTracker?.recordSimpleData("strokeColor", opIdx); + this.ctx.strokeStyle = this.current.strokeColor = color; + this.current.patternStroke = false; + } + setStrokeTransparent(opIdx) { + this.dependencyTracker?.recordSimpleData("strokeColor", opIdx); + this.ctx.strokeStyle = this.current.strokeColor = "transparent"; + this.current.patternStroke = false; + } + setFillRGBColor(opIdx, color) { + this.dependencyTracker?.recordSimpleData("fillColor", opIdx); + this.ctx.fillStyle = this.current.fillColor = color; + this.current.patternFill = false; + } + setFillTransparent(opIdx) { + this.dependencyTracker?.recordSimpleData("fillColor", opIdx); + this.ctx.fillStyle = this.current.fillColor = "transparent"; + this.current.patternFill = false; + } + _getPattern(opIdx, objId, matrix = null) { + let pattern; + if (this.cachedPatterns.has(objId)) { + pattern = this.cachedPatterns.get(objId); + } else { + pattern = getShadingPattern(this.getObject(opIdx, objId)); + this.cachedPatterns.set(objId, pattern); + } + if (matrix) { + pattern.matrix = matrix; + } + return pattern; + } + shadingFill(opIdx, objId) { + if (!this.contentVisible) { + return; + } + const ctx = this.ctx; + this.save(opIdx); + const pattern = this._getPattern(opIdx, objId); + ctx.fillStyle = pattern.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.SHADING, opIdx); + const inv = getCurrentTransformInverse(ctx); + if (inv) { + const { + width, + height + } = ctx.canvas; + const minMax = MIN_MAX_INIT.slice(); + Util.axialAlignedBoundingBox([0, 0, width, height], inv, minMax); + const [x0, y0, x1, y1] = minMax; + this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0); + } else { + this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10); + } + this.dependencyTracker?.resetBBox(opIdx).recordFullPageBBox(opIdx).recordDependencies(opIdx, Dependencies.transform).recordDependencies(opIdx, Dependencies.fill).recordOperation(opIdx); + this.compose(this.current.getClippedPathBoundingBox()); + this.restore(opIdx); + } + beginInlineImage() { + unreachable("Should not call beginInlineImage"); + } + beginImageData() { + unreachable("Should not call beginImageData"); + } + paintFormXObjectBegin(opIdx, matrix, bbox) { + if (!this.contentVisible) { + return; + } + this.save(opIdx); + this.baseTransformStack.push(this.baseTransform); + if (matrix) { + this.transform(opIdx, ...matrix); + } + this.baseTransform = getCurrentTransform(this.ctx); + if (bbox) { + Util.axialAlignedBoundingBox(bbox, this.baseTransform, this.current.minMax); + const [x0, y0, x1, y1] = bbox; + const clip = new Path2D(); + clip.rect(x0, y0, x1 - x0, y1 - y0); + this.ctx.clip(clip); + this.dependencyTracker?.recordClipBox(opIdx, this.ctx, x0, x1, y0, y1); + this.endPath(opIdx); + } + } + paintFormXObjectEnd(opIdx) { + if (!this.contentVisible) { + return; + } + this.restore(opIdx); + this.baseTransform = this.baseTransformStack.pop(); + } + beginGroup(opIdx, group) { + if (!this.contentVisible) { + return; + } + this.save(opIdx); + if (this.inSMaskMode) { + this.endSMaskMode(); + this.current.activeSMask = null; + } + const currentCtx = this.ctx; + if (!group.isolated) { + info("TODO: Support non-isolated groups."); + } + if (group.knockout) { + warn("Knockout groups not supported."); + } + const currentTransform = getCurrentTransform(currentCtx); + if (group.matrix) { + currentCtx.transform(...group.matrix); + } + if (!group.bbox) { + throw new Error("Bounding box is required."); + } + let bounds = MIN_MAX_INIT.slice(); + Util.axialAlignedBoundingBox(group.bbox, getCurrentTransform(currentCtx), bounds); + const canvasBounds = [0, 0, currentCtx.canvas.width, currentCtx.canvas.height]; + bounds = Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0]; + const offsetX = Math.floor(bounds[0]); + const offsetY = Math.floor(bounds[1]); + const drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1); + const drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1); + this.current.startNewPathAndClipBox([0, 0, drawnWidth, drawnHeight]); + let cacheId = "groupAt" + this.groupLevel; + if (group.smask) { + cacheId += "_smask_" + this.smaskCounter++ % 2; + } + const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight); + const groupCtx = scratchCanvas.context; + groupCtx.translate(-offsetX, -offsetY); + groupCtx.transform(...currentTransform); + let clip = new Path2D(); + const [x0, y0, x1, y1] = group.bbox; + clip.rect(x0, y0, x1 - x0, y1 - y0); + if (group.matrix) { + const path = new Path2D(); + path.addPath(clip, new DOMMatrix(group.matrix)); + clip = path; + } + groupCtx.clip(clip); + if (group.smask) { + this.smaskStack.push({ + canvas: scratchCanvas.canvas, + context: groupCtx, + offsetX, + offsetY, + subtype: group.smask.subtype, + backdrop: group.smask.backdrop, + transferMap: group.smask.transferMap || null, + startTransformInverse: null + }); + } + if (!group.smask || this.dependencyTracker) { + currentCtx.setTransform(1, 0, 0, 1, 0, 0); + currentCtx.translate(offsetX, offsetY); + currentCtx.save(); + } + copyCtxState(currentCtx, groupCtx); + this.ctx = groupCtx; + this.dependencyTracker?.inheritSimpleDataAsFutureForcedDependencies(["fillAlpha", "strokeAlpha", "globalCompositeOperation"]).pushBaseTransform(currentCtx); + this.setGState(opIdx, [["BM", "source-over"], ["ca", 1], ["CA", 1]]); + this.groupStack.push(currentCtx); + this.groupLevel++; + } + endGroup(opIdx, group) { + if (!this.contentVisible) { + return; + } + this.groupLevel--; + const groupCtx = this.ctx; + const ctx = this.groupStack.pop(); + this.ctx = ctx; + this.ctx.imageSmoothingEnabled = false; + this.dependencyTracker?.popBaseTransform(); + if (group.smask) { + this.tempSMask = this.smaskStack.pop(); + this.restore(opIdx); + if (this.dependencyTracker) { + this.ctx.restore(); + } + } else { + this.ctx.restore(); + const currentMtx = getCurrentTransform(this.ctx); + this.restore(opIdx); + this.ctx.save(); + this.ctx.setTransform(...currentMtx); + const dirtyBox = MIN_MAX_INIT.slice(); + Util.axialAlignedBoundingBox([0, 0, groupCtx.canvas.width, groupCtx.canvas.height], currentMtx, dirtyBox); + this.ctx.drawImage(groupCtx.canvas, 0, 0); + this.ctx.restore(); + this.compose(dirtyBox); + } + } + beginAnnotation(opIdx, id, rect, transform, matrix, hasOwnCanvas) { + this.#restoreInitialState(); + resetCtxToDefault(this.ctx); + this.ctx.save(); + this.save(opIdx); + if (this.baseTransform) { + this.ctx.setTransform(...this.baseTransform); + } + if (rect) { + const width = rect[2] - rect[0]; + const height = rect[3] - rect[1]; + if (hasOwnCanvas && this.annotationCanvasMap) { + transform = transform.slice(); + transform[4] -= rect[0]; + transform[5] -= rect[1]; + rect = rect.slice(); + rect[0] = rect[1] = 0; + rect[2] = width; + rect[3] = height; + Util.singularValueDecompose2dScale(getCurrentTransform(this.ctx), XY); + const { + viewportScale + } = this; + const canvasWidth = Math.ceil(width * this.outputScaleX * viewportScale); + const canvasHeight = Math.ceil(height * this.outputScaleY * viewportScale); + this.annotationCanvas = this.canvasFactory.create(canvasWidth, canvasHeight); + const { + canvas, + context + } = this.annotationCanvas; + this.annotationCanvasMap.set(id, canvas); + this.annotationCanvas.savedCtx = this.ctx; + this.ctx = context; + this.ctx.save(); + this.ctx.setTransform(XY[0], 0, 0, -XY[1], 0, height * XY[1]); + resetCtxToDefault(this.ctx); + } else { + resetCtxToDefault(this.ctx); + this.endPath(opIdx); + const clip = new Path2D(); + clip.rect(rect[0], rect[1], width, height); + this.ctx.clip(clip); + } + } + this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height); + this.transform(opIdx, ...transform); + this.transform(opIdx, ...matrix); + } + endAnnotation(opIdx) { + if (this.annotationCanvas) { + this.ctx.restore(); + this.#drawFilter(); + this.ctx = this.annotationCanvas.savedCtx; + delete this.annotationCanvas.savedCtx; + delete this.annotationCanvas; + } + } + paintImageMaskXObject(opIdx, img) { + if (!this.contentVisible) { + return; + } + const count = img.count; + img = this.getObject(opIdx, img.data, img); + img.count = count; + const ctx = this.ctx; + const mask = this._createMaskCanvas(opIdx, img); + const maskCanvas = mask.canvas; + ctx.save(); + ctx.setTransform(1, 0, 0, 1, 0, 0); + ctx.drawImage(maskCanvas, mask.offsetX, mask.offsetY); + this.dependencyTracker?.resetBBox(opIdx).recordBBox(opIdx, this.ctx, mask.offsetX, mask.offsetX + maskCanvas.width, mask.offsetY, mask.offsetY + maskCanvas.height).recordOperation(opIdx); + ctx.restore(); + this.compose(); + } + paintImageMaskXObjectRepeat(opIdx, img, scaleX, skewX = 0, skewY = 0, scaleY, positions) { + if (!this.contentVisible) { + return; + } + img = this.getObject(opIdx, img.data, img); + const ctx = this.ctx; + ctx.save(); + const currentTransform = getCurrentTransform(ctx); + ctx.transform(scaleX, skewX, skewY, scaleY, 0, 0); + const mask = this._createMaskCanvas(opIdx, img); + ctx.setTransform(1, 0, 0, 1, mask.offsetX - currentTransform[4], mask.offsetY - currentTransform[5]); + this.dependencyTracker?.resetBBox(opIdx); + for (let i = 0, ii = positions.length; i < ii; i += 2) { + const trans = Util.transform(currentTransform, [scaleX, skewX, skewY, scaleY, positions[i], positions[i + 1]]); + ctx.drawImage(mask.canvas, trans[4], trans[5]); + this.dependencyTracker?.recordBBox(opIdx, this.ctx, trans[4], trans[4] + mask.canvas.width, trans[5], trans[5] + mask.canvas.height); + } + ctx.restore(); + this.compose(); + this.dependencyTracker?.recordOperation(opIdx); + } + paintImageMaskXObjectGroup(opIdx, images) { + if (!this.contentVisible) { + return; + } + const ctx = this.ctx; + const fillColor = this.current.fillColor; + const isPatternFill = this.current.patternFill; + this.dependencyTracker?.resetBBox(opIdx).recordDependencies(opIdx, Dependencies.transformAndFill); + for (const image of images) { + const { + data, + width, + height, + transform + } = image; + const maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height); + const maskCtx = maskCanvas.context; + maskCtx.save(); + const img = this.getObject(opIdx, data, image); + putBinaryImageMask(maskCtx, img); + maskCtx.globalCompositeOperation = "source-in"; + maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this, getCurrentTransformInverse(ctx), PathType.FILL, opIdx) : fillColor; + maskCtx.fillRect(0, 0, width, height); + maskCtx.restore(); + ctx.save(); + ctx.transform(...transform); + ctx.scale(1, -1); + drawImageAtIntegerCoords(ctx, maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1); + this.dependencyTracker?.recordBBox(opIdx, ctx, 0, width, 0, height); + ctx.restore(); + } + this.compose(); + this.dependencyTracker?.recordOperation(opIdx); + } + paintImageXObject(opIdx, objId) { + if (!this.contentVisible) { + return; + } + const imgData = this.getObject(opIdx, objId); + if (!imgData) { + warn("Dependent image isn't ready yet"); + return; + } + this.paintInlineImageXObject(opIdx, imgData); + } + paintImageXObjectRepeat(opIdx, objId, scaleX, scaleY, positions) { + if (!this.contentVisible) { + return; + } + const imgData = this.getObject(opIdx, objId); + if (!imgData) { + warn("Dependent image isn't ready yet"); + return; + } + const width = imgData.width; + const height = imgData.height; + const map = []; + for (let i = 0, ii = positions.length; i < ii; i += 2) { + map.push({ + transform: [scaleX, 0, 0, scaleY, positions[i], positions[i + 1]], + x: 0, + y: 0, + w: width, + h: height + }); + } + this.paintInlineImageXObjectGroup(opIdx, imgData, map); + } + applyTransferMapsToCanvas(ctx) { + if (this.current.transferMaps !== "none") { + ctx.filter = this.current.transferMaps; + ctx.drawImage(ctx.canvas, 0, 0); + ctx.filter = "none"; + } + return ctx.canvas; + } + applyTransferMapsToBitmap(imgData) { + if (this.current.transferMaps === "none") { + return imgData.bitmap; + } + const { + bitmap, + width, + height + } = imgData; + const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height); + const tmpCtx = tmpCanvas.context; + tmpCtx.filter = this.current.transferMaps; + tmpCtx.drawImage(bitmap, 0, 0); + tmpCtx.filter = "none"; + return tmpCanvas.canvas; + } + paintInlineImageXObject(opIdx, imgData) { + if (!this.contentVisible) { + return; + } + const width = imgData.width; + const height = imgData.height; + const ctx = this.ctx; + this.save(opIdx); + const { + filter + } = ctx; + if (filter !== "none" && filter !== "") { + ctx.filter = "none"; + } + ctx.scale(1 / width, -1 / height); + let imgToPaint; + if (imgData.bitmap) { + imgToPaint = this.applyTransferMapsToBitmap(imgData); + } else if (typeof HTMLElement === "function" && imgData instanceof HTMLElement || !imgData.data) { + imgToPaint = imgData; + } else { + const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height); + const tmpCtx = tmpCanvas.context; + putBinaryImageData(tmpCtx, imgData); + imgToPaint = this.applyTransferMapsToCanvas(tmpCtx); + } + const scaled = this._scaleImage(imgToPaint, getCurrentTransformInverse(ctx)); + ctx.imageSmoothingEnabled = getImageSmoothingEnabled(getCurrentTransform(ctx), imgData.interpolate); + this.dependencyTracker?.resetBBox(opIdx).recordBBox(opIdx, ctx, 0, width, -height, 0).recordDependencies(opIdx, Dependencies.imageXObject).recordOperation(opIdx); + drawImageAtIntegerCoords(ctx, scaled.img, 0, 0, scaled.paintWidth, scaled.paintHeight, 0, -height, width, height); + this.compose(); + this.restore(opIdx); + } + paintInlineImageXObjectGroup(opIdx, imgData, map) { + if (!this.contentVisible) { + return; + } + const ctx = this.ctx; + let imgToPaint; + if (imgData.bitmap) { + imgToPaint = imgData.bitmap; + } else { + const w = imgData.width; + const h = imgData.height; + const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", w, h); + const tmpCtx = tmpCanvas.context; + putBinaryImageData(tmpCtx, imgData); + imgToPaint = this.applyTransferMapsToCanvas(tmpCtx); + } + this.dependencyTracker?.resetBBox(opIdx); + for (const entry of map) { + ctx.save(); + ctx.transform(...entry.transform); + ctx.scale(1, -1); + drawImageAtIntegerCoords(ctx, imgToPaint, entry.x, entry.y, entry.w, entry.h, 0, -1, 1, 1); + this.dependencyTracker?.recordBBox(opIdx, ctx, 0, 1, -1, 0); + ctx.restore(); + } + this.dependencyTracker?.recordOperation(opIdx); + this.compose(); + } + paintSolidColorImageMask(opIdx) { + if (!this.contentVisible) { + return; + } + this.dependencyTracker?.resetBBox(opIdx).recordBBox(opIdx, this.ctx, 0, 1, 0, 1).recordDependencies(opIdx, Dependencies.fill).recordOperation(opIdx); + this.ctx.fillRect(0, 0, 1, 1); + this.compose(); + } + markPoint(opIdx, tag) {} + markPointProps(opIdx, tag, properties) {} + beginMarkedContent(opIdx, tag) { + this.dependencyTracker?.beginMarkedContent(opIdx); + this.markedContentStack.push({ + visible: true + }); + } + beginMarkedContentProps(opIdx, tag, properties) { + this.dependencyTracker?.beginMarkedContent(opIdx); + if (tag === "OC") { + this.markedContentStack.push({ + visible: this.optionalContentConfig.isVisible(properties) + }); + } else { + this.markedContentStack.push({ + visible: true + }); + } + this.contentVisible = this.isContentVisible(); + } + endMarkedContent(opIdx) { + this.dependencyTracker?.endMarkedContent(opIdx); + this.markedContentStack.pop(); + this.contentVisible = this.isContentVisible(); + } + beginCompat(opIdx) {} + endCompat(opIdx) {} + consumePath(opIdx, path, clipBox) { + const isEmpty = this.current.isEmptyClip(); + if (this.pendingClip) { + this.current.updateClipFromPath(); + } + if (!this.pendingClip) { + this.compose(clipBox); + } + const ctx = this.ctx; + if (this.pendingClip) { + if (!isEmpty) { + if (this.pendingClip === EO_CLIP) { + ctx.clip(path, "evenodd"); + } else { + ctx.clip(path); + } + } + this.pendingClip = null; + this.dependencyTracker?.bboxToClipBoxDropOperation(opIdx).recordFutureForcedDependency("clipPath", opIdx); + } else { + this.dependencyTracker?.recordOperation(opIdx); + } + this.current.startNewPathAndClipBox(this.current.clipBox); + } + getSinglePixelWidth() { + if (!this._cachedGetSinglePixelWidth) { + const m = getCurrentTransform(this.ctx); + if (m[1] === 0 && m[2] === 0) { + this._cachedGetSinglePixelWidth = 1 / Math.min(Math.abs(m[0]), Math.abs(m[3])); + } else { + const absDet = Math.abs(m[0] * m[3] - m[2] * m[1]); + const normX = Math.hypot(m[0], m[2]); + const normY = Math.hypot(m[1], m[3]); + this._cachedGetSinglePixelWidth = Math.max(normX, normY) / absDet; + } + } + return this._cachedGetSinglePixelWidth; + } + getScaleForStroking() { + if (this._cachedScaleForStroking[0] === -1) { + const { + lineWidth + } = this.current; + const { + a, + b, + c, + d + } = this.ctx.getTransform(); + let scaleX, scaleY; + if (b === 0 && c === 0) { + const normX = Math.abs(a); + const normY = Math.abs(d); + if (normX === normY) { + if (lineWidth === 0) { + scaleX = scaleY = 1 / normX; + } else { + const scaledLineWidth = normX * lineWidth; + scaleX = scaleY = scaledLineWidth < 1 ? 1 / scaledLineWidth : 1; + } + } else if (lineWidth === 0) { + scaleX = 1 / normX; + scaleY = 1 / normY; + } else { + const scaledXLineWidth = normX * lineWidth; + const scaledYLineWidth = normY * lineWidth; + scaleX = scaledXLineWidth < 1 ? 1 / scaledXLineWidth : 1; + scaleY = scaledYLineWidth < 1 ? 1 / scaledYLineWidth : 1; + } + } else { + const absDet = Math.abs(a * d - b * c); + const normX = Math.hypot(a, b); + const normY = Math.hypot(c, d); + if (lineWidth === 0) { + scaleX = normY / absDet; + scaleY = normX / absDet; + } else { + const baseArea = lineWidth * absDet; + scaleX = normY > baseArea ? normY / baseArea : 1; + scaleY = normX > baseArea ? normX / baseArea : 1; + } + } + this._cachedScaleForStroking[0] = scaleX; + this._cachedScaleForStroking[1] = scaleY; + } + return this._cachedScaleForStroking; + } + rescaleAndStroke(path, saveRestore) { + const { + ctx, + current: { + lineWidth + } + } = this; + const [scaleX, scaleY] = this.getScaleForStroking(); + if (scaleX === scaleY) { + ctx.lineWidth = (lineWidth || 1) * scaleX; + ctx.stroke(path); + return; + } + const dashes = ctx.getLineDash(); + if (saveRestore) { + ctx.save(); + } + ctx.scale(scaleX, scaleY); + SCALE_MATRIX.a = 1 / scaleX; + SCALE_MATRIX.d = 1 / scaleY; + const newPath = new Path2D(); + newPath.addPath(path, SCALE_MATRIX); + if (dashes.length > 0) { + const scale = Math.max(scaleX, scaleY); + ctx.setLineDash(dashes.map(x => x / scale)); + ctx.lineDashOffset /= scale; + } + ctx.lineWidth = lineWidth || 1; + ctx.stroke(newPath); + if (saveRestore) { + ctx.restore(); + } + } + isContentVisible() { + for (let i = this.markedContentStack.length - 1; i >= 0; i--) { + if (!this.markedContentStack[i].visible) { + return false; + } + } + return true; + } +} +for (const op in OPS) { + if (CanvasGraphics.prototype[op] !== undefined) { + CanvasGraphics.prototype[OPS[op]] = CanvasGraphics.prototype[op]; + } +} + +;// ./src/display/worker_options.js +class GlobalWorkerOptions { + static #port = null; + static #src = ""; + static get workerPort() { + return this.#port; + } + static set workerPort(val) { + if (!(typeof Worker !== "undefined" && val instanceof Worker) && val !== null) { + throw new Error("Invalid `workerPort` type."); + } + this.#port = val; + } + static get workerSrc() { + return this.#src; + } + static set workerSrc(val) { + if (typeof val !== "string") { + throw new Error("Invalid `workerSrc` type."); + } + this.#src = val; + } +} + +;// ./src/display/metadata.js +class Metadata { + #map; + #data; + constructor({ + parsedData, + rawData + }) { + this.#map = parsedData; + this.#data = rawData; + } + getRaw() { + return this.#data; + } + get(name) { + return this.#map.get(name) ?? null; + } + [Symbol.iterator]() { + return this.#map.entries(); + } +} + +;// ./src/display/optional_content_config.js + + +const INTERNAL = Symbol("INTERNAL"); +class OptionalContentGroup { + #isDisplay = false; + #isPrint = false; + #userSet = false; + #visible = true; + constructor(renderingIntent, { + name, + intent, + usage, + rbGroups + }) { + this.#isDisplay = !!(renderingIntent & RenderingIntentFlag.DISPLAY); + this.#isPrint = !!(renderingIntent & RenderingIntentFlag.PRINT); + this.name = name; + this.intent = intent; + this.usage = usage; + this.rbGroups = rbGroups; + } + get visible() { + if (this.#userSet) { + return this.#visible; + } + if (!this.#visible) { + return false; + } + const { + print, + view + } = this.usage; + if (this.#isDisplay) { + return view?.viewState !== "OFF"; + } else if (this.#isPrint) { + return print?.printState !== "OFF"; + } + return true; + } + _setVisible(internal, visible, userSet = false) { + if (internal !== INTERNAL) { + unreachable("Internal method `_setVisible` called."); + } + this.#userSet = userSet; + this.#visible = visible; + } +} +class OptionalContentConfig { + #cachedGetHash = null; + #groups = new Map(); + #initialHash = null; + #order = null; + constructor(data, renderingIntent = RenderingIntentFlag.DISPLAY) { + this.renderingIntent = renderingIntent; + this.name = null; + this.creator = null; + if (data === null) { + return; + } + this.name = data.name; + this.creator = data.creator; + this.#order = data.order; + for (const group of data.groups) { + this.#groups.set(group.id, new OptionalContentGroup(renderingIntent, group)); + } + if (data.baseState === "OFF") { + for (const group of this.#groups.values()) { + group._setVisible(INTERNAL, false); + } + } + for (const on of data.on) { + this.#groups.get(on)._setVisible(INTERNAL, true); + } + for (const off of data.off) { + this.#groups.get(off)._setVisible(INTERNAL, false); + } + this.#initialHash = this.getHash(); + } + #evaluateVisibilityExpression(array) { + const length = array.length; + if (length < 2) { + return true; + } + const operator = array[0]; + for (let i = 1; i < length; i++) { + const element = array[i]; + let state; + if (Array.isArray(element)) { + state = this.#evaluateVisibilityExpression(element); + } else if (this.#groups.has(element)) { + state = this.#groups.get(element).visible; + } else { + warn(`Optional content group not found: ${element}`); + return true; + } + switch (operator) { + case "And": + if (!state) { + return false; + } + break; + case "Or": + if (state) { + return true; + } + break; + case "Not": + return !state; + default: + return true; + } + } + return operator === "And"; + } + isVisible(group) { + if (this.#groups.size === 0) { + return true; + } + if (!group) { + info("Optional content group not defined."); + return true; + } + if (group.type === "OCG") { + if (!this.#groups.has(group.id)) { + warn(`Optional content group not found: ${group.id}`); + return true; + } + return this.#groups.get(group.id).visible; + } else if (group.type === "OCMD") { + if (group.expression) { + return this.#evaluateVisibilityExpression(group.expression); + } + if (!group.policy || group.policy === "AnyOn") { + for (const id of group.ids) { + if (!this.#groups.has(id)) { + warn(`Optional content group not found: ${id}`); + return true; + } + if (this.#groups.get(id).visible) { + return true; + } + } + return false; + } else if (group.policy === "AllOn") { + for (const id of group.ids) { + if (!this.#groups.has(id)) { + warn(`Optional content group not found: ${id}`); + return true; + } + if (!this.#groups.get(id).visible) { + return false; + } + } + return true; + } else if (group.policy === "AnyOff") { + for (const id of group.ids) { + if (!this.#groups.has(id)) { + warn(`Optional content group not found: ${id}`); + return true; + } + if (!this.#groups.get(id).visible) { + return true; + } + } + return false; + } else if (group.policy === "AllOff") { + for (const id of group.ids) { + if (!this.#groups.has(id)) { + warn(`Optional content group not found: ${id}`); + return true; + } + if (this.#groups.get(id).visible) { + return false; + } + } + return true; + } + warn(`Unknown optional content policy ${group.policy}.`); + return true; + } + warn(`Unknown group type ${group.type}.`); + return true; + } + setVisibility(id, visible = true, preserveRB = true) { + const group = this.#groups.get(id); + if (!group) { + warn(`Optional content group not found: ${id}`); + return; + } + if (preserveRB && visible && group.rbGroups.length) { + for (const rbGroup of group.rbGroups) { + for (const otherId of rbGroup) { + if (otherId !== id) { + this.#groups.get(otherId)?._setVisible(INTERNAL, false, true); + } + } + } + } + group._setVisible(INTERNAL, !!visible, true); + this.#cachedGetHash = null; + } + setOCGState({ + state, + preserveRB + }) { + let operator; + for (const elem of state) { + switch (elem) { + case "ON": + case "OFF": + case "Toggle": + operator = elem; + continue; + } + const group = this.#groups.get(elem); + if (!group) { + continue; + } + switch (operator) { + case "ON": + this.setVisibility(elem, true, preserveRB); + break; + case "OFF": + this.setVisibility(elem, false, preserveRB); + break; + case "Toggle": + this.setVisibility(elem, !group.visible, preserveRB); + break; + } + } + this.#cachedGetHash = null; + } + get hasInitialVisibility() { + return this.#initialHash === null || this.getHash() === this.#initialHash; + } + getOrder() { + if (!this.#groups.size) { + return null; + } + if (this.#order) { + return this.#order.slice(); + } + return [...this.#groups.keys()]; + } + getGroup(id) { + return this.#groups.get(id) || null; + } + getHash() { + if (this.#cachedGetHash !== null) { + return this.#cachedGetHash; + } + const hash = new MurmurHash3_64(); + for (const [id, group] of this.#groups) { + hash.update(`${id}:${group.visible}`); + } + return this.#cachedGetHash = hash.hexdigest(); + } + [Symbol.iterator]() { + return this.#groups.entries(); + } +} + +;// ./src/display/transport_stream.js + + +class PDFDataTransportStream { + constructor(pdfDataRangeTransport, { + disableRange = false, + disableStream = false + }) { + assert(pdfDataRangeTransport, 'PDFDataTransportStream - missing required "pdfDataRangeTransport" argument.'); + const { + length, + initialData, + progressiveDone, + contentDispositionFilename + } = pdfDataRangeTransport; + this._queuedChunks = []; + this._progressiveDone = progressiveDone; + this._contentDispositionFilename = contentDispositionFilename; + if (initialData?.length > 0) { + const buffer = initialData instanceof Uint8Array && initialData.byteLength === initialData.buffer.byteLength ? initialData.buffer : new Uint8Array(initialData).buffer; + this._queuedChunks.push(buffer); + } + this._pdfDataRangeTransport = pdfDataRangeTransport; + this._isStreamingSupported = !disableStream; + this._isRangeSupported = !disableRange; + this._contentLength = length; + this._fullRequestReader = null; + this._rangeReaders = []; + pdfDataRangeTransport.addRangeListener((begin, chunk) => { + this._onReceiveData({ + begin, + chunk + }); + }); + pdfDataRangeTransport.addProgressListener((loaded, total) => { + this._onProgress({ + loaded, + total + }); + }); + pdfDataRangeTransport.addProgressiveReadListener(chunk => { + this._onReceiveData({ + chunk + }); + }); + pdfDataRangeTransport.addProgressiveDoneListener(() => { + this._onProgressiveDone(); + }); + pdfDataRangeTransport.transportReady(); + } + _onReceiveData({ + begin, + chunk + }) { + const buffer = chunk instanceof Uint8Array && chunk.byteLength === chunk.buffer.byteLength ? chunk.buffer : new Uint8Array(chunk).buffer; + if (begin === undefined) { + if (this._fullRequestReader) { + this._fullRequestReader._enqueue(buffer); + } else { + this._queuedChunks.push(buffer); + } + } else { + const found = this._rangeReaders.some(function (rangeReader) { + if (rangeReader._begin !== begin) { + return false; + } + rangeReader._enqueue(buffer); + return true; + }); + assert(found, "_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found."); + } + } + get _progressiveDataLength() { + return this._fullRequestReader?._loaded ?? 0; + } + _onProgress(evt) { + if (evt.total === undefined) { + this._rangeReaders[0]?.onProgress?.({ + loaded: evt.loaded + }); + } else { + this._fullRequestReader?.onProgress?.({ + loaded: evt.loaded, + total: evt.total + }); + } + } + _onProgressiveDone() { + this._fullRequestReader?.progressiveDone(); + this._progressiveDone = true; + } + _removeRangeReader(reader) { + const i = this._rangeReaders.indexOf(reader); + if (i >= 0) { + this._rangeReaders.splice(i, 1); + } + } + getFullReader() { + assert(!this._fullRequestReader, "PDFDataTransportStream.getFullReader can only be called once."); + const queuedChunks = this._queuedChunks; + this._queuedChunks = null; + return new PDFDataTransportStreamReader(this, queuedChunks, this._progressiveDone, this._contentDispositionFilename); + } + getRangeReader(begin, end) { + if (end <= this._progressiveDataLength) { + return null; + } + const reader = new PDFDataTransportStreamRangeReader(this, begin, end); + this._pdfDataRangeTransport.requestDataRange(begin, end); + this._rangeReaders.push(reader); + return reader; + } + cancelAllRequests(reason) { + this._fullRequestReader?.cancel(reason); + for (const reader of this._rangeReaders.slice(0)) { + reader.cancel(reason); + } + this._pdfDataRangeTransport.abort(); + } +} +class PDFDataTransportStreamReader { + constructor(stream, queuedChunks, progressiveDone = false, contentDispositionFilename = null) { + this._stream = stream; + this._done = progressiveDone || false; + this._filename = isPdfFile(contentDispositionFilename) ? contentDispositionFilename : null; + this._queuedChunks = queuedChunks || []; + this._loaded = 0; + for (const chunk of this._queuedChunks) { + this._loaded += chunk.byteLength; + } + this._requests = []; + this._headersReady = Promise.resolve(); + stream._fullRequestReader = this; + this.onProgress = null; + } + _enqueue(chunk) { + if (this._done) { + return; + } + if (this._requests.length > 0) { + const requestCapability = this._requests.shift(); + requestCapability.resolve({ + value: chunk, + done: false + }); + } else { + this._queuedChunks.push(chunk); + } + this._loaded += chunk.byteLength; + } + get headersReady() { + return this._headersReady; + } + get filename() { + return this._filename; + } + get isRangeSupported() { + return this._stream._isRangeSupported; + } + get isStreamingSupported() { + return this._stream._isStreamingSupported; + } + get contentLength() { + return this._stream._contentLength; + } + async read() { + if (this._queuedChunks.length > 0) { + const chunk = this._queuedChunks.shift(); + return { + value: chunk, + done: false + }; + } + if (this._done) { + return { + value: undefined, + done: true + }; + } + const requestCapability = Promise.withResolvers(); + this._requests.push(requestCapability); + return requestCapability.promise; + } + cancel(reason) { + this._done = true; + for (const requestCapability of this._requests) { + requestCapability.resolve({ + value: undefined, + done: true + }); + } + this._requests.length = 0; + } + progressiveDone() { + if (this._done) { + return; + } + this._done = true; + } +} +class PDFDataTransportStreamRangeReader { + constructor(stream, begin, end) { + this._stream = stream; + this._begin = begin; + this._end = end; + this._queuedChunk = null; + this._requests = []; + this._done = false; + this.onProgress = null; + } + _enqueue(chunk) { + if (this._done) { + return; + } + if (this._requests.length === 0) { + this._queuedChunk = chunk; + } else { + const requestsCapability = this._requests.shift(); + requestsCapability.resolve({ + value: chunk, + done: false + }); + for (const requestCapability of this._requests) { + requestCapability.resolve({ + value: undefined, + done: true + }); + } + this._requests.length = 0; + } + this._done = true; + this._stream._removeRangeReader(this); + } + get isStreamingSupported() { + return false; + } + async read() { + if (this._queuedChunk) { + const chunk = this._queuedChunk; + this._queuedChunk = null; + return { + value: chunk, + done: false + }; + } + if (this._done) { + return { + value: undefined, + done: true + }; + } + const requestCapability = Promise.withResolvers(); + this._requests.push(requestCapability); + return requestCapability.promise; + } + cancel(reason) { + this._done = true; + for (const requestCapability of this._requests) { + requestCapability.resolve({ + value: undefined, + done: true + }); + } + this._requests.length = 0; + this._stream._removeRangeReader(this); + } +} + +;// ./src/display/content_disposition.js + +function getFilenameFromContentDispositionHeader(contentDisposition) { + let needsEncodingFixup = true; + let tmp = toParamRegExp("filename\\*", "i").exec(contentDisposition); + if (tmp) { + tmp = tmp[1]; + let filename = rfc2616unquote(tmp); + filename = unescape(filename); + filename = rfc5987decode(filename); + filename = rfc2047decode(filename); + return fixupEncoding(filename); + } + tmp = rfc2231getparam(contentDisposition); + if (tmp) { + const filename = rfc2047decode(tmp); + return fixupEncoding(filename); + } + tmp = toParamRegExp("filename", "i").exec(contentDisposition); + if (tmp) { + tmp = tmp[1]; + let filename = rfc2616unquote(tmp); + filename = rfc2047decode(filename); + return fixupEncoding(filename); + } + function toParamRegExp(attributePattern, flags) { + return new RegExp("(?:^|;)\\s*" + attributePattern + "\\s*=\\s*" + "(" + '[^";\\s][^;\\s]*' + "|" + '"(?:[^"\\\\]|\\\\"?)+"?' + ")", flags); + } + function textdecode(encoding, value) { + if (encoding) { + if (!/^[\x00-\xFF]+$/.test(value)) { + return value; + } + try { + const decoder = new TextDecoder(encoding, { + fatal: true + }); + const buffer = stringToBytes(value); + value = decoder.decode(buffer); + needsEncodingFixup = false; + } catch {} + } + return value; + } + function fixupEncoding(value) { + if (needsEncodingFixup && /[\x80-\xff]/.test(value)) { + value = textdecode("utf-8", value); + if (needsEncodingFixup) { + value = textdecode("iso-8859-1", value); + } + } + return value; + } + function rfc2231getparam(contentDispositionStr) { + const matches = []; + let match; + const iter = toParamRegExp("filename\\*((?!0\\d)\\d+)(\\*?)", "ig"); + while ((match = iter.exec(contentDispositionStr)) !== null) { + let [, n, quot, part] = match; + n = parseInt(n, 10); + if (n in matches) { + if (n === 0) { + break; + } + continue; + } + matches[n] = [quot, part]; + } + const parts = []; + for (let n = 0; n < matches.length; ++n) { + if (!(n in matches)) { + break; + } + let [quot, part] = matches[n]; + part = rfc2616unquote(part); + if (quot) { + part = unescape(part); + if (n === 0) { + part = rfc5987decode(part); + } + } + parts.push(part); + } + return parts.join(""); + } + function rfc2616unquote(value) { + if (value.startsWith('"')) { + const parts = value.slice(1).split('\\"'); + for (let i = 0; i < parts.length; ++i) { + const quotindex = parts[i].indexOf('"'); + if (quotindex !== -1) { + parts[i] = parts[i].slice(0, quotindex); + parts.length = i + 1; + } + parts[i] = parts[i].replaceAll(/\\(.)/g, "$1"); + } + value = parts.join('"'); + } + return value; + } + function rfc5987decode(extvalue) { + const encodingend = extvalue.indexOf("'"); + if (encodingend === -1) { + return extvalue; + } + const encoding = extvalue.slice(0, encodingend); + const langvalue = extvalue.slice(encodingend + 1); + const value = langvalue.replace(/^[^']*'/, ""); + return textdecode(encoding, value); + } + function rfc2047decode(value) { + if (!value.startsWith("=?") || /[\x00-\x19\x80-\xff]/.test(value)) { + return value; + } + return value.replaceAll(/=\?([\w-]*)\?([QqBb])\?((?:[^?]|\?(?!=))*)\?=/g, function (matches, charset, encoding, text) { + if (encoding === "q" || encoding === "Q") { + text = text.replaceAll("_", " "); + text = text.replaceAll(/=([0-9a-fA-F]{2})/g, function (match, hex) { + return String.fromCharCode(parseInt(hex, 16)); + }); + return textdecode(charset, text); + } + try { + text = atob(text); + } catch {} + return textdecode(charset, text); + }); + } + return ""; +} + +;// ./src/display/network_utils.js + + + +function createHeaders(isHttp, httpHeaders) { + const headers = new Headers(); + if (!isHttp || !httpHeaders || typeof httpHeaders !== "object") { + return headers; + } + for (const key in httpHeaders) { + const val = httpHeaders[key]; + if (val !== undefined) { + headers.append(key, val); + } + } + return headers; +} +function getResponseOrigin(url) { + return URL.parse(url)?.origin ?? null; +} +function validateRangeRequestCapabilities({ + responseHeaders, + isHttp, + rangeChunkSize, + disableRange +}) { + const returnValues = { + allowRangeRequests: false, + suggestedLength: undefined + }; + const length = parseInt(responseHeaders.get("Content-Length"), 10); + if (!Number.isInteger(length)) { + return returnValues; + } + returnValues.suggestedLength = length; + if (length <= 2 * rangeChunkSize) { + return returnValues; + } + if (disableRange || !isHttp) { + return returnValues; + } + if (responseHeaders.get("Accept-Ranges") !== "bytes") { + return returnValues; + } + const contentEncoding = responseHeaders.get("Content-Encoding") || "identity"; + if (contentEncoding !== "identity") { + return returnValues; + } + returnValues.allowRangeRequests = true; + return returnValues; +} +function extractFilenameFromHeader(responseHeaders) { + const contentDisposition = responseHeaders.get("Content-Disposition"); + if (contentDisposition) { + let filename = getFilenameFromContentDispositionHeader(contentDisposition); + if (filename.includes("%")) { + try { + filename = decodeURIComponent(filename); + } catch {} + } + if (isPdfFile(filename)) { + return filename; + } + } + return null; +} +function createResponseError(status, url) { + return new ResponseException(`Unexpected server response (${status}) while retrieving PDF "${url}".`, status, status === 404 || status === 0 && url.startsWith("file:")); +} +function validateResponseStatus(status) { + return status === 200 || status === 206; +} + +;// ./src/display/fetch_stream.js + + +function createFetchOptions(headers, withCredentials, abortController) { + return { + method: "GET", + headers, + signal: abortController.signal, + mode: "cors", + credentials: withCredentials ? "include" : "same-origin", + redirect: "follow" + }; +} +function getArrayBuffer(val) { + if (val instanceof Uint8Array) { + return val.buffer; + } + if (val instanceof ArrayBuffer) { + return val; + } + warn(`getArrayBuffer - unexpected data format: ${val}`); + return new Uint8Array(val).buffer; +} +class PDFFetchStream { + _responseOrigin = null; + constructor(source) { + this.source = source; + this.isHttp = /^https?:/i.test(source.url); + this.headers = createHeaders(this.isHttp, source.httpHeaders); + this._fullRequestReader = null; + this._rangeRequestReaders = []; + } + get _progressiveDataLength() { + return this._fullRequestReader?._loaded ?? 0; + } + getFullReader() { + assert(!this._fullRequestReader, "PDFFetchStream.getFullReader can only be called once."); + this._fullRequestReader = new PDFFetchStreamReader(this); + return this._fullRequestReader; + } + getRangeReader(begin, end) { + if (end <= this._progressiveDataLength) { + return null; + } + const reader = new PDFFetchStreamRangeReader(this, begin, end); + this._rangeRequestReaders.push(reader); + return reader; + } + cancelAllRequests(reason) { + this._fullRequestReader?.cancel(reason); + for (const reader of this._rangeRequestReaders.slice(0)) { + reader.cancel(reason); + } + } +} +class PDFFetchStreamReader { + constructor(stream) { + this._stream = stream; + this._reader = null; + this._loaded = 0; + this._filename = null; + const source = stream.source; + this._withCredentials = source.withCredentials || false; + this._contentLength = source.length; + this._headersCapability = Promise.withResolvers(); + this._disableRange = source.disableRange || false; + this._rangeChunkSize = source.rangeChunkSize; + if (!this._rangeChunkSize && !this._disableRange) { + this._disableRange = true; + } + this._abortController = new AbortController(); + this._isStreamingSupported = !source.disableStream; + this._isRangeSupported = !source.disableRange; + const headers = new Headers(stream.headers); + const url = source.url; + fetch(url, createFetchOptions(headers, this._withCredentials, this._abortController)).then(response => { + stream._responseOrigin = getResponseOrigin(response.url); + if (!validateResponseStatus(response.status)) { + throw createResponseError(response.status, url); + } + this._reader = response.body.getReader(); + this._headersCapability.resolve(); + const responseHeaders = response.headers; + const { + allowRangeRequests, + suggestedLength + } = validateRangeRequestCapabilities({ + responseHeaders, + isHttp: stream.isHttp, + rangeChunkSize: this._rangeChunkSize, + disableRange: this._disableRange + }); + this._isRangeSupported = allowRangeRequests; + this._contentLength = suggestedLength || this._contentLength; + this._filename = extractFilenameFromHeader(responseHeaders); + if (!this._isStreamingSupported && this._isRangeSupported) { + this.cancel(new AbortException("Streaming is disabled.")); + } + }).catch(this._headersCapability.reject); + this.onProgress = null; + } + get headersReady() { + return this._headersCapability.promise; + } + get filename() { + return this._filename; + } + get contentLength() { + return this._contentLength; + } + get isRangeSupported() { + return this._isRangeSupported; + } + get isStreamingSupported() { + return this._isStreamingSupported; + } + async read() { + await this._headersCapability.promise; + const { + value, + done + } = await this._reader.read(); + if (done) { + return { + value, + done + }; + } + this._loaded += value.byteLength; + this.onProgress?.({ + loaded: this._loaded, + total: this._contentLength + }); + return { + value: getArrayBuffer(value), + done: false + }; + } + cancel(reason) { + this._reader?.cancel(reason); + this._abortController.abort(); + } +} +class PDFFetchStreamRangeReader { + constructor(stream, begin, end) { + this._stream = stream; + this._reader = null; + this._loaded = 0; + const source = stream.source; + this._withCredentials = source.withCredentials || false; + this._readCapability = Promise.withResolvers(); + this._isStreamingSupported = !source.disableStream; + this._abortController = new AbortController(); + const headers = new Headers(stream.headers); + headers.append("Range", `bytes=${begin}-${end - 1}`); + const url = source.url; + fetch(url, createFetchOptions(headers, this._withCredentials, this._abortController)).then(response => { + const responseOrigin = getResponseOrigin(response.url); + if (responseOrigin !== stream._responseOrigin) { + throw new Error(`Expected range response-origin "${responseOrigin}" to match "${stream._responseOrigin}".`); + } + if (!validateResponseStatus(response.status)) { + throw createResponseError(response.status, url); + } + this._readCapability.resolve(); + this._reader = response.body.getReader(); + }).catch(this._readCapability.reject); + this.onProgress = null; + } + get isStreamingSupported() { + return this._isStreamingSupported; + } + async read() { + await this._readCapability.promise; + const { + value, + done + } = await this._reader.read(); + if (done) { + return { + value, + done + }; + } + this._loaded += value.byteLength; + this.onProgress?.({ + loaded: this._loaded + }); + return { + value: getArrayBuffer(value), + done: false + }; + } + cancel(reason) { + this._reader?.cancel(reason); + this._abortController.abort(); + } +} + +;// ./src/display/network.js + + +const OK_RESPONSE = 200; +const PARTIAL_CONTENT_RESPONSE = 206; +function network_getArrayBuffer(xhr) { + const data = xhr.response; + if (typeof data !== "string") { + return data; + } + return stringToBytes(data).buffer; +} +class NetworkManager { + _responseOrigin = null; + constructor({ + url, + httpHeaders, + withCredentials + }) { + this.url = url; + this.isHttp = /^https?:/i.test(url); + this.headers = createHeaders(this.isHttp, httpHeaders); + this.withCredentials = withCredentials || false; + this.currXhrId = 0; + this.pendingRequests = Object.create(null); + } + request(args) { + const xhr = new XMLHttpRequest(); + const xhrId = this.currXhrId++; + const pendingRequest = this.pendingRequests[xhrId] = { + xhr + }; + xhr.open("GET", this.url); + xhr.withCredentials = this.withCredentials; + for (const [key, val] of this.headers) { + xhr.setRequestHeader(key, val); + } + if (this.isHttp && "begin" in args && "end" in args) { + xhr.setRequestHeader("Range", `bytes=${args.begin}-${args.end - 1}`); + pendingRequest.expectedStatus = PARTIAL_CONTENT_RESPONSE; + } else { + pendingRequest.expectedStatus = OK_RESPONSE; + } + xhr.responseType = "arraybuffer"; + assert(args.onError, "Expected `onError` callback to be provided."); + xhr.onerror = () => { + args.onError(xhr.status); + }; + xhr.onreadystatechange = this.onStateChange.bind(this, xhrId); + xhr.onprogress = this.onProgress.bind(this, xhrId); + pendingRequest.onHeadersReceived = args.onHeadersReceived; + pendingRequest.onDone = args.onDone; + pendingRequest.onError = args.onError; + pendingRequest.onProgress = args.onProgress; + xhr.send(null); + return xhrId; + } + onProgress(xhrId, evt) { + const pendingRequest = this.pendingRequests[xhrId]; + if (!pendingRequest) { + return; + } + pendingRequest.onProgress?.(evt); + } + onStateChange(xhrId, evt) { + const pendingRequest = this.pendingRequests[xhrId]; + if (!pendingRequest) { + return; + } + const xhr = pendingRequest.xhr; + if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) { + pendingRequest.onHeadersReceived(); + delete pendingRequest.onHeadersReceived; + } + if (xhr.readyState !== 4) { + return; + } + if (!(xhrId in this.pendingRequests)) { + return; + } + delete this.pendingRequests[xhrId]; + if (xhr.status === 0 && this.isHttp) { + pendingRequest.onError(xhr.status); + return; + } + const xhrStatus = xhr.status || OK_RESPONSE; + const ok_response_on_range_request = xhrStatus === OK_RESPONSE && pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE; + if (!ok_response_on_range_request && xhrStatus !== pendingRequest.expectedStatus) { + pendingRequest.onError(xhr.status); + return; + } + const chunk = network_getArrayBuffer(xhr); + if (xhrStatus === PARTIAL_CONTENT_RESPONSE) { + const rangeHeader = xhr.getResponseHeader("Content-Range"); + const matches = /bytes (\d+)-(\d+)\/(\d+)/.exec(rangeHeader); + if (matches) { + pendingRequest.onDone({ + begin: parseInt(matches[1], 10), + chunk + }); + } else { + warn(`Missing or invalid "Content-Range" header.`); + pendingRequest.onError(0); + } + } else if (chunk) { + pendingRequest.onDone({ + begin: 0, + chunk + }); + } else { + pendingRequest.onError(xhr.status); + } + } + getRequestXhr(xhrId) { + return this.pendingRequests[xhrId].xhr; + } + isPendingRequest(xhrId) { + return xhrId in this.pendingRequests; + } + abortRequest(xhrId) { + const xhr = this.pendingRequests[xhrId].xhr; + delete this.pendingRequests[xhrId]; + xhr.abort(); + } +} +class PDFNetworkStream { + constructor(source) { + this._source = source; + this._manager = new NetworkManager(source); + this._rangeChunkSize = source.rangeChunkSize; + this._fullRequestReader = null; + this._rangeRequestReaders = []; + } + _onRangeRequestReaderClosed(reader) { + const i = this._rangeRequestReaders.indexOf(reader); + if (i >= 0) { + this._rangeRequestReaders.splice(i, 1); + } + } + getFullReader() { + assert(!this._fullRequestReader, "PDFNetworkStream.getFullReader can only be called once."); + this._fullRequestReader = new PDFNetworkStreamFullRequestReader(this._manager, this._source); + return this._fullRequestReader; + } + getRangeReader(begin, end) { + const reader = new PDFNetworkStreamRangeRequestReader(this._manager, begin, end); + reader.onClosed = this._onRangeRequestReaderClosed.bind(this); + this._rangeRequestReaders.push(reader); + return reader; + } + cancelAllRequests(reason) { + this._fullRequestReader?.cancel(reason); + for (const reader of this._rangeRequestReaders.slice(0)) { + reader.cancel(reason); + } + } +} +class PDFNetworkStreamFullRequestReader { + constructor(manager, source) { + this._manager = manager; + this._url = source.url; + this._fullRequestId = manager.request({ + onHeadersReceived: this._onHeadersReceived.bind(this), + onDone: this._onDone.bind(this), + onError: this._onError.bind(this), + onProgress: this._onProgress.bind(this) + }); + this._headersCapability = Promise.withResolvers(); + this._disableRange = source.disableRange || false; + this._contentLength = source.length; + this._rangeChunkSize = source.rangeChunkSize; + if (!this._rangeChunkSize && !this._disableRange) { + this._disableRange = true; + } + this._isStreamingSupported = false; + this._isRangeSupported = false; + this._cachedChunks = []; + this._requests = []; + this._done = false; + this._storedError = undefined; + this._filename = null; + this.onProgress = null; + } + _onHeadersReceived() { + const fullRequestXhrId = this._fullRequestId; + const fullRequestXhr = this._manager.getRequestXhr(fullRequestXhrId); + this._manager._responseOrigin = getResponseOrigin(fullRequestXhr.responseURL); + const rawResponseHeaders = fullRequestXhr.getAllResponseHeaders(); + const responseHeaders = new Headers(rawResponseHeaders ? rawResponseHeaders.trimStart().replace(/[^\S ]+$/, "").split(/[\r\n]+/).map(x => { + const [key, ...val] = x.split(": "); + return [key, val.join(": ")]; + }) : []); + const { + allowRangeRequests, + suggestedLength + } = validateRangeRequestCapabilities({ + responseHeaders, + isHttp: this._manager.isHttp, + rangeChunkSize: this._rangeChunkSize, + disableRange: this._disableRange + }); + if (allowRangeRequests) { + this._isRangeSupported = true; + } + this._contentLength = suggestedLength || this._contentLength; + this._filename = extractFilenameFromHeader(responseHeaders); + if (this._isRangeSupported) { + this._manager.abortRequest(fullRequestXhrId); + } + this._headersCapability.resolve(); + } + _onDone(data) { + if (data) { + if (this._requests.length > 0) { + const requestCapability = this._requests.shift(); + requestCapability.resolve({ + value: data.chunk, + done: false + }); + } else { + this._cachedChunks.push(data.chunk); + } + } + this._done = true; + if (this._cachedChunks.length > 0) { + return; + } + for (const requestCapability of this._requests) { + requestCapability.resolve({ + value: undefined, + done: true + }); + } + this._requests.length = 0; + } + _onError(status) { + this._storedError = createResponseError(status, this._url); + this._headersCapability.reject(this._storedError); + for (const requestCapability of this._requests) { + requestCapability.reject(this._storedError); + } + this._requests.length = 0; + this._cachedChunks.length = 0; + } + _onProgress(evt) { + this.onProgress?.({ + loaded: evt.loaded, + total: evt.lengthComputable ? evt.total : this._contentLength + }); + } + get filename() { + return this._filename; + } + get isRangeSupported() { + return this._isRangeSupported; + } + get isStreamingSupported() { + return this._isStreamingSupported; + } + get contentLength() { + return this._contentLength; + } + get headersReady() { + return this._headersCapability.promise; + } + async read() { + await this._headersCapability.promise; + if (this._storedError) { + throw this._storedError; + } + if (this._cachedChunks.length > 0) { + const chunk = this._cachedChunks.shift(); + return { + value: chunk, + done: false + }; + } + if (this._done) { + return { + value: undefined, + done: true + }; + } + const requestCapability = Promise.withResolvers(); + this._requests.push(requestCapability); + return requestCapability.promise; + } + cancel(reason) { + this._done = true; + this._headersCapability.reject(reason); + for (const requestCapability of this._requests) { + requestCapability.resolve({ + value: undefined, + done: true + }); + } + this._requests.length = 0; + if (this._manager.isPendingRequest(this._fullRequestId)) { + this._manager.abortRequest(this._fullRequestId); + } + this._fullRequestReader = null; + } +} +class PDFNetworkStreamRangeRequestReader { + constructor(manager, begin, end) { + this._manager = manager; + this._url = manager.url; + this._requestId = manager.request({ + begin, + end, + onHeadersReceived: this._onHeadersReceived.bind(this), + onDone: this._onDone.bind(this), + onError: this._onError.bind(this), + onProgress: this._onProgress.bind(this) + }); + this._requests = []; + this._queuedChunk = null; + this._done = false; + this._storedError = undefined; + this.onProgress = null; + this.onClosed = null; + } + _onHeadersReceived() { + const responseOrigin = getResponseOrigin(this._manager.getRequestXhr(this._requestId)?.responseURL); + if (responseOrigin !== this._manager._responseOrigin) { + this._storedError = new Error(`Expected range response-origin "${responseOrigin}" to match "${this._manager._responseOrigin}".`); + this._onError(0); + } + } + _close() { + this.onClosed?.(this); + } + _onDone(data) { + const chunk = data.chunk; + if (this._requests.length > 0) { + const requestCapability = this._requests.shift(); + requestCapability.resolve({ + value: chunk, + done: false + }); + } else { + this._queuedChunk = chunk; + } + this._done = true; + for (const requestCapability of this._requests) { + requestCapability.resolve({ + value: undefined, + done: true + }); + } + this._requests.length = 0; + this._close(); + } + _onError(status) { + this._storedError ??= createResponseError(status, this._url); + for (const requestCapability of this._requests) { + requestCapability.reject(this._storedError); + } + this._requests.length = 0; + this._queuedChunk = null; + } + _onProgress(evt) { + if (!this.isStreamingSupported) { + this.onProgress?.({ + loaded: evt.loaded + }); + } + } + get isStreamingSupported() { + return false; + } + async read() { + if (this._storedError) { + throw this._storedError; + } + if (this._queuedChunk !== null) { + const chunk = this._queuedChunk; + this._queuedChunk = null; + return { + value: chunk, + done: false + }; + } + if (this._done) { + return { + value: undefined, + done: true + }; + } + const requestCapability = Promise.withResolvers(); + this._requests.push(requestCapability); + return requestCapability.promise; + } + cancel(reason) { + this._done = true; + for (const requestCapability of this._requests) { + requestCapability.resolve({ + value: undefined, + done: true + }); + } + this._requests.length = 0; + if (this._manager.isPendingRequest(this._requestId)) { + this._manager.abortRequest(this._requestId); + } + this._close(); + } +} + +;// ./src/display/node_stream.js + + +const urlRegex = /^[a-z][a-z0-9\-+.]+:/i; +function parseUrlOrPath(sourceUrl) { + if (urlRegex.test(sourceUrl)) { + return new URL(sourceUrl); + } + const url = process.getBuiltinModule("url"); + return new URL(url.pathToFileURL(sourceUrl)); +} +class PDFNodeStream { + constructor(source) { + this.source = source; + this.url = parseUrlOrPath(source.url); + assert(this.url.protocol === "file:", "PDFNodeStream only supports file:// URLs."); + this._fullRequestReader = null; + this._rangeRequestReaders = []; + } + get _progressiveDataLength() { + return this._fullRequestReader?._loaded ?? 0; + } + getFullReader() { + assert(!this._fullRequestReader, "PDFNodeStream.getFullReader can only be called once."); + this._fullRequestReader = new PDFNodeStreamFsFullReader(this); + return this._fullRequestReader; + } + getRangeReader(start, end) { + if (end <= this._progressiveDataLength) { + return null; + } + const rangeReader = new PDFNodeStreamFsRangeReader(this, start, end); + this._rangeRequestReaders.push(rangeReader); + return rangeReader; + } + cancelAllRequests(reason) { + this._fullRequestReader?.cancel(reason); + for (const reader of this._rangeRequestReaders.slice(0)) { + reader.cancel(reason); + } + } +} +class PDFNodeStreamFsFullReader { + constructor(stream) { + this._url = stream.url; + this._done = false; + this._storedError = null; + this.onProgress = null; + const source = stream.source; + this._contentLength = source.length; + this._loaded = 0; + this._filename = null; + this._disableRange = source.disableRange || false; + this._rangeChunkSize = source.rangeChunkSize; + if (!this._rangeChunkSize && !this._disableRange) { + this._disableRange = true; + } + this._isStreamingSupported = !source.disableStream; + this._isRangeSupported = !source.disableRange; + this._readableStream = null; + this._readCapability = Promise.withResolvers(); + this._headersCapability = Promise.withResolvers(); + const fs = process.getBuiltinModule("fs"); + fs.promises.lstat(this._url).then(stat => { + this._contentLength = stat.size; + this._setReadableStream(fs.createReadStream(this._url)); + this._headersCapability.resolve(); + }, error => { + if (error.code === "ENOENT") { + error = createResponseError(0, this._url.href); + } + this._storedError = error; + this._headersCapability.reject(error); + }); + } + get headersReady() { + return this._headersCapability.promise; + } + get filename() { + return this._filename; + } + get contentLength() { + return this._contentLength; + } + get isRangeSupported() { + return this._isRangeSupported; + } + get isStreamingSupported() { + return this._isStreamingSupported; + } + async read() { + await this._readCapability.promise; + if (this._done) { + return { + value: undefined, + done: true + }; + } + if (this._storedError) { + throw this._storedError; + } + const chunk = this._readableStream.read(); + if (chunk === null) { + this._readCapability = Promise.withResolvers(); + return this.read(); + } + this._loaded += chunk.length; + this.onProgress?.({ + loaded: this._loaded, + total: this._contentLength + }); + const buffer = new Uint8Array(chunk).buffer; + return { + value: buffer, + done: false + }; + } + cancel(reason) { + if (!this._readableStream) { + this._error(reason); + return; + } + this._readableStream.destroy(reason); + } + _error(reason) { + this._storedError = reason; + this._readCapability.resolve(); + } + _setReadableStream(readableStream) { + this._readableStream = readableStream; + readableStream.on("readable", () => { + this._readCapability.resolve(); + }); + readableStream.on("end", () => { + readableStream.destroy(); + this._done = true; + this._readCapability.resolve(); + }); + readableStream.on("error", reason => { + this._error(reason); + }); + if (!this._isStreamingSupported && this._isRangeSupported) { + this._error(new AbortException("streaming is disabled")); + } + if (this._storedError) { + this._readableStream.destroy(this._storedError); + } + } +} +class PDFNodeStreamFsRangeReader { + constructor(stream, start, end) { + this._url = stream.url; + this._done = false; + this._storedError = null; + this.onProgress = null; + this._loaded = 0; + this._readableStream = null; + this._readCapability = Promise.withResolvers(); + const source = stream.source; + this._isStreamingSupported = !source.disableStream; + const fs = process.getBuiltinModule("fs"); + this._setReadableStream(fs.createReadStream(this._url, { + start, + end: end - 1 + })); + } + get isStreamingSupported() { + return this._isStreamingSupported; + } + async read() { + await this._readCapability.promise; + if (this._done) { + return { + value: undefined, + done: true + }; + } + if (this._storedError) { + throw this._storedError; + } + const chunk = this._readableStream.read(); + if (chunk === null) { + this._readCapability = Promise.withResolvers(); + return this.read(); + } + this._loaded += chunk.length; + this.onProgress?.({ + loaded: this._loaded + }); + const buffer = new Uint8Array(chunk).buffer; + return { + value: buffer, + done: false + }; + } + cancel(reason) { + if (!this._readableStream) { + this._error(reason); + return; + } + this._readableStream.destroy(reason); + } + _error(reason) { + this._storedError = reason; + this._readCapability.resolve(); + } + _setReadableStream(readableStream) { + this._readableStream = readableStream; + readableStream.on("readable", () => { + this._readCapability.resolve(); + }); + readableStream.on("end", () => { + readableStream.destroy(); + this._done = true; + this._readCapability.resolve(); + }); + readableStream.on("error", reason => { + this._error(reason); + }); + if (this._storedError) { + this._readableStream.destroy(this._storedError); + } + } +} + +;// ./src/display/pdf_objects.js +const INITIAL_DATA = Symbol("INITIAL_DATA"); +class PDFObjects { + #objs = Object.create(null); + #ensureObj(objId) { + return this.#objs[objId] ||= { + ...Promise.withResolvers(), + data: INITIAL_DATA + }; + } + get(objId, callback = null) { + if (callback) { + const obj = this.#ensureObj(objId); + obj.promise.then(() => callback(obj.data)); + return null; + } + const obj = this.#objs[objId]; + if (!obj || obj.data === INITIAL_DATA) { + throw new Error(`Requesting object that isn't resolved yet ${objId}.`); + } + return obj.data; + } + has(objId) { + const obj = this.#objs[objId]; + return !!obj && obj.data !== INITIAL_DATA; + } + delete(objId) { + const obj = this.#objs[objId]; + if (!obj || obj.data === INITIAL_DATA) { + return false; + } + delete this.#objs[objId]; + return true; + } + resolve(objId, data = null) { + const obj = this.#ensureObj(objId); + obj.data = data; + obj.resolve(); + } + clear() { + for (const objId in this.#objs) { + const { + data + } = this.#objs[objId]; + data?.bitmap?.close(); + } + this.#objs = Object.create(null); + } + *[Symbol.iterator]() { + for (const objId in this.#objs) { + const { + data + } = this.#objs[objId]; + if (data === INITIAL_DATA) { + continue; + } + yield [objId, data]; + } + } +} + +;// ./src/display/text_layer.js + + +const MAX_TEXT_DIVS_TO_RENDER = 100000; +const DEFAULT_FONT_SIZE = 30; +class TextLayer { + #capability = Promise.withResolvers(); + #container = null; + #disableProcessItems = false; + #fontInspectorEnabled = !!globalThis.FontInspector?.enabled; + #lang = null; + #layoutTextParams = null; + #pageHeight = 0; + #pageWidth = 0; + #reader = null; + #rootContainer = null; + #rotation = 0; + #scale = 0; + #styleCache = Object.create(null); + #textContentItemsStr = []; + #textContentSource = null; + #textDivs = []; + #textDivProperties = new WeakMap(); + #transform = null; + static #ascentCache = new Map(); + static #canvasContexts = new Map(); + static #canvasCtxFonts = new WeakMap(); + static #minFontSize = null; + static #pendingTextLayers = new Set(); + constructor({ + textContentSource, + container, + viewport + }) { + if (textContentSource instanceof ReadableStream) { + this.#textContentSource = textContentSource; + } else if (typeof textContentSource === "object") { + this.#textContentSource = new ReadableStream({ + start(controller) { + controller.enqueue(textContentSource); + controller.close(); + } + }); + } else { + throw new Error('No "textContentSource" parameter specified.'); + } + this.#container = this.#rootContainer = container; + this.#scale = viewport.scale * OutputScale.pixelRatio; + this.#rotation = viewport.rotation; + this.#layoutTextParams = { + div: null, + properties: null, + ctx: null + }; + const { + pageWidth, + pageHeight, + pageX, + pageY + } = viewport.rawDims; + this.#transform = [1, 0, 0, -1, -pageX, pageY + pageHeight]; + this.#pageWidth = pageWidth; + this.#pageHeight = pageHeight; + TextLayer.#ensureMinFontSizeComputed(); + setLayerDimensions(container, viewport); + this.#capability.promise.finally(() => { + TextLayer.#pendingTextLayers.delete(this); + this.#layoutTextParams = null; + this.#styleCache = null; + }).catch(() => {}); + } + static get fontFamilyMap() { + const { + isWindows, + isFirefox + } = util_FeatureTest.platform; + return shadow(this, "fontFamilyMap", new Map([["sans-serif", `${isWindows && isFirefox ? "Calibri, " : ""}sans-serif`], ["monospace", `${isWindows && isFirefox ? "Lucida Console, " : ""}monospace`]])); + } + render() { + const pump = () => { + this.#reader.read().then(({ + value, + done + }) => { + if (done) { + this.#capability.resolve(); + return; + } + this.#lang ??= value.lang; + Object.assign(this.#styleCache, value.styles); + this.#processItems(value.items); + pump(); + }, this.#capability.reject); + }; + this.#reader = this.#textContentSource.getReader(); + TextLayer.#pendingTextLayers.add(this); + pump(); + return this.#capability.promise; + } + update({ + viewport, + onBefore = null + }) { + const scale = viewport.scale * OutputScale.pixelRatio; + const rotation = viewport.rotation; + if (rotation !== this.#rotation) { + onBefore?.(); + this.#rotation = rotation; + setLayerDimensions(this.#rootContainer, { + rotation + }); + } + if (scale !== this.#scale) { + onBefore?.(); + this.#scale = scale; + const params = { + div: null, + properties: null, + ctx: TextLayer.#getCtx(this.#lang) + }; + for (const div of this.#textDivs) { + params.properties = this.#textDivProperties.get(div); + params.div = div; + this.#layout(params); + } + } + } + cancel() { + const abortEx = new AbortException("TextLayer task cancelled."); + this.#reader?.cancel(abortEx).catch(() => {}); + this.#reader = null; + this.#capability.reject(abortEx); + } + get textDivs() { + return this.#textDivs; + } + get textContentItemsStr() { + return this.#textContentItemsStr; + } + #processItems(items) { + if (this.#disableProcessItems) { + return; + } + this.#layoutTextParams.ctx ??= TextLayer.#getCtx(this.#lang); + const textDivs = this.#textDivs, + textContentItemsStr = this.#textContentItemsStr; + for (const item of items) { + if (textDivs.length > MAX_TEXT_DIVS_TO_RENDER) { + warn("Ignoring additional textDivs for performance reasons."); + this.#disableProcessItems = true; + return; + } + if (item.str === undefined) { + if (item.type === "beginMarkedContentProps" || item.type === "beginMarkedContent") { + const parent = this.#container; + this.#container = document.createElement("span"); + this.#container.classList.add("markedContent"); + if (item.id) { + this.#container.setAttribute("id", `${item.id}`); + } + parent.append(this.#container); + } else if (item.type === "endMarkedContent") { + this.#container = this.#container.parentNode; + } + continue; + } + textContentItemsStr.push(item.str); + this.#appendText(item); + } + } + #appendText(geom) { + const textDiv = document.createElement("span"); + const textDivProperties = { + angle: 0, + canvasWidth: 0, + hasText: geom.str !== "", + hasEOL: geom.hasEOL, + fontSize: 0 + }; + this.#textDivs.push(textDiv); + const tx = Util.transform(this.#transform, geom.transform); + let angle = Math.atan2(tx[1], tx[0]); + const style = this.#styleCache[geom.fontName]; + if (style.vertical) { + angle += Math.PI / 2; + } + let fontFamily = this.#fontInspectorEnabled && style.fontSubstitution || style.fontFamily; + fontFamily = TextLayer.fontFamilyMap.get(fontFamily) || fontFamily; + const fontHeight = Math.hypot(tx[2], tx[3]); + const fontAscent = fontHeight * TextLayer.#getAscent(fontFamily, style, this.#lang); + let left, top; + if (angle === 0) { + left = tx[4]; + top = tx[5] - fontAscent; + } else { + left = tx[4] + fontAscent * Math.sin(angle); + top = tx[5] - fontAscent * Math.cos(angle); + } + const scaleFactorStr = "calc(var(--total-scale-factor) *"; + const divStyle = textDiv.style; + if (this.#container === this.#rootContainer) { + divStyle.left = `${(100 * left / this.#pageWidth).toFixed(2)}%`; + divStyle.top = `${(100 * top / this.#pageHeight).toFixed(2)}%`; + } else { + divStyle.left = `${scaleFactorStr}${left.toFixed(2)}px)`; + divStyle.top = `${scaleFactorStr}${top.toFixed(2)}px)`; + } + divStyle.fontSize = `${scaleFactorStr}${(TextLayer.#minFontSize * fontHeight).toFixed(2)}px)`; + divStyle.fontFamily = fontFamily; + textDivProperties.fontSize = fontHeight; + textDiv.setAttribute("role", "presentation"); + textDiv.textContent = geom.str; + textDiv.dir = geom.dir; + if (this.#fontInspectorEnabled) { + textDiv.dataset.fontName = style.fontSubstitutionLoadedName || geom.fontName; + } + if (angle !== 0) { + textDivProperties.angle = angle * (180 / Math.PI); + } + let shouldScaleText = false; + if (geom.str.length > 1) { + shouldScaleText = true; + } else if (geom.str !== " " && geom.transform[0] !== geom.transform[3]) { + const absScaleX = Math.abs(geom.transform[0]), + absScaleY = Math.abs(geom.transform[3]); + if (absScaleX !== absScaleY && Math.max(absScaleX, absScaleY) / Math.min(absScaleX, absScaleY) > 1.5) { + shouldScaleText = true; + } + } + if (shouldScaleText) { + textDivProperties.canvasWidth = style.vertical ? geom.height : geom.width; + } + this.#textDivProperties.set(textDiv, textDivProperties); + this.#layoutTextParams.div = textDiv; + this.#layoutTextParams.properties = textDivProperties; + this.#layout(this.#layoutTextParams); + if (textDivProperties.hasText) { + this.#container.append(textDiv); + } + if (textDivProperties.hasEOL) { + const br = document.createElement("br"); + br.setAttribute("role", "presentation"); + this.#container.append(br); + } + } + #layout(params) { + const { + div, + properties, + ctx + } = params; + const { + style + } = div; + let transform = ""; + if (TextLayer.#minFontSize > 1) { + transform = `scale(${1 / TextLayer.#minFontSize})`; + } + if (properties.canvasWidth !== 0 && properties.hasText) { + const { + fontFamily + } = style; + const { + canvasWidth, + fontSize + } = properties; + TextLayer.#ensureCtxFont(ctx, fontSize * this.#scale, fontFamily); + const { + width + } = ctx.measureText(div.textContent); + if (width > 0) { + transform = `scaleX(${canvasWidth * this.#scale / width}) ${transform}`; + } + } + if (properties.angle !== 0) { + transform = `rotate(${properties.angle}deg) ${transform}`; + } + if (transform.length > 0) { + style.transform = transform; + } + } + static cleanup() { + if (this.#pendingTextLayers.size > 0) { + return; + } + this.#ascentCache.clear(); + for (const { + canvas + } of this.#canvasContexts.values()) { + canvas.remove(); + } + this.#canvasContexts.clear(); + } + static #getCtx(lang = null) { + let ctx = this.#canvasContexts.get(lang ||= ""); + if (!ctx) { + const canvas = document.createElement("canvas"); + canvas.className = "hiddenCanvasElement"; + canvas.lang = lang; + document.body.append(canvas); + ctx = canvas.getContext("2d", { + alpha: false, + willReadFrequently: true + }); + this.#canvasContexts.set(lang, ctx); + this.#canvasCtxFonts.set(ctx, { + size: 0, + family: "" + }); + } + return ctx; + } + static #ensureCtxFont(ctx, size, family) { + const cached = this.#canvasCtxFonts.get(ctx); + if (size === cached.size && family === cached.family) { + return; + } + ctx.font = `${size}px ${family}`; + cached.size = size; + cached.family = family; + } + static #ensureMinFontSizeComputed() { + if (this.#minFontSize !== null) { + return; + } + const div = document.createElement("div"); + div.style.opacity = 0; + div.style.lineHeight = 1; + div.style.fontSize = "1px"; + div.style.position = "absolute"; + div.textContent = "X"; + document.body.append(div); + this.#minFontSize = div.getBoundingClientRect().height; + div.remove(); + } + static #getAscent(fontFamily, style, lang) { + const cachedAscent = this.#ascentCache.get(fontFamily); + if (cachedAscent) { + return cachedAscent; + } + const ctx = this.#getCtx(lang); + ctx.canvas.width = ctx.canvas.height = DEFAULT_FONT_SIZE; + this.#ensureCtxFont(ctx, DEFAULT_FONT_SIZE, fontFamily); + const metrics = ctx.measureText(""); + const ascent = metrics.fontBoundingBoxAscent; + const descent = Math.abs(metrics.fontBoundingBoxDescent); + ctx.canvas.width = ctx.canvas.height = 0; + let ratio = 0.8; + if (ascent) { + ratio = ascent / (ascent + descent); + } else { + if (util_FeatureTest.platform.isFirefox) { + warn("Enable the `dom.textMetrics.fontBoundingBox.enabled` preference " + "in `about:config` to improve TextLayer rendering."); + } + if (style.ascent) { + ratio = style.ascent; + } else if (style.descent) { + ratio = 1 + style.descent; + } + } + this.#ascentCache.set(fontFamily, ratio); + return ratio; + } +} + +;// ./src/display/api.js + + + + + + + + + + + + + + + + + + + + + + + + + +const RENDERING_CANCELLED_TIMEOUT = 100; +function getDocument(src = {}) { + if (typeof src === "string" || src instanceof URL) { + src = { + url: src + }; + } else if (src instanceof ArrayBuffer || ArrayBuffer.isView(src)) { + src = { + data: src + }; + } + const task = new PDFDocumentLoadingTask(); + const { + docId + } = task; + const url = src.url ? getUrlProp(src.url) : null; + const data = src.data ? getDataProp(src.data) : null; + const httpHeaders = src.httpHeaders || null; + const withCredentials = src.withCredentials === true; + const password = src.password ?? null; + const rangeTransport = src.range instanceof PDFDataRangeTransport ? src.range : null; + const rangeChunkSize = Number.isInteger(src.rangeChunkSize) && src.rangeChunkSize > 0 ? src.rangeChunkSize : 2 ** 16; + let worker = src.worker instanceof PDFWorker ? src.worker : null; + const verbosity = src.verbosity; + const docBaseUrl = typeof src.docBaseUrl === "string" && !isDataScheme(src.docBaseUrl) ? src.docBaseUrl : null; + const cMapUrl = getFactoryUrlProp(src.cMapUrl); + const cMapPacked = src.cMapPacked !== false; + const CMapReaderFactory = src.CMapReaderFactory || (isNodeJS ? NodeCMapReaderFactory : DOMCMapReaderFactory); + const iccUrl = getFactoryUrlProp(src.iccUrl); + const standardFontDataUrl = getFactoryUrlProp(src.standardFontDataUrl); + const StandardFontDataFactory = src.StandardFontDataFactory || (isNodeJS ? NodeStandardFontDataFactory : DOMStandardFontDataFactory); + const wasmUrl = getFactoryUrlProp(src.wasmUrl); + const WasmFactory = src.WasmFactory || (isNodeJS ? NodeWasmFactory : DOMWasmFactory); + const ignoreErrors = src.stopAtErrors !== true; + const maxImageSize = Number.isInteger(src.maxImageSize) && src.maxImageSize > -1 ? src.maxImageSize : -1; + const isEvalSupported = src.isEvalSupported !== false; + const isOffscreenCanvasSupported = typeof src.isOffscreenCanvasSupported === "boolean" ? src.isOffscreenCanvasSupported : !isNodeJS; + const isImageDecoderSupported = typeof src.isImageDecoderSupported === "boolean" ? src.isImageDecoderSupported : !isNodeJS && (util_FeatureTest.platform.isFirefox || !globalThis.chrome); + const canvasMaxAreaInBytes = Number.isInteger(src.canvasMaxAreaInBytes) ? src.canvasMaxAreaInBytes : -1; + const disableFontFace = typeof src.disableFontFace === "boolean" ? src.disableFontFace : isNodeJS; + const fontExtraProperties = src.fontExtraProperties === true; + const enableXfa = src.enableXfa === true; + const ownerDocument = src.ownerDocument || globalThis.document; + const disableRange = src.disableRange === true; + const disableStream = src.disableStream === true; + const disableAutoFetch = src.disableAutoFetch === true; + const pdfBug = src.pdfBug === true; + const CanvasFactory = src.CanvasFactory || (isNodeJS ? NodeCanvasFactory : DOMCanvasFactory); + const FilterFactory = src.FilterFactory || (isNodeJS ? NodeFilterFactory : DOMFilterFactory); + const enableHWA = src.enableHWA === true; + const useWasm = src.useWasm !== false; + const length = rangeTransport ? rangeTransport.length : src.length ?? NaN; + const useSystemFonts = typeof src.useSystemFonts === "boolean" ? src.useSystemFonts : !isNodeJS && !disableFontFace; + const useWorkerFetch = typeof src.useWorkerFetch === "boolean" ? src.useWorkerFetch : !!(CMapReaderFactory === DOMCMapReaderFactory && StandardFontDataFactory === DOMStandardFontDataFactory && WasmFactory === DOMWasmFactory && cMapUrl && standardFontDataUrl && wasmUrl && isValidFetchUrl(cMapUrl, document.baseURI) && isValidFetchUrl(standardFontDataUrl, document.baseURI) && isValidFetchUrl(wasmUrl, document.baseURI)); + const styleElement = null; + setVerbosityLevel(verbosity); + const transportFactory = { + canvasFactory: new CanvasFactory({ + ownerDocument, + enableHWA + }), + filterFactory: new FilterFactory({ + docId, + ownerDocument + }), + cMapReaderFactory: useWorkerFetch ? null : new CMapReaderFactory({ + baseUrl: cMapUrl, + isCompressed: cMapPacked + }), + standardFontDataFactory: useWorkerFetch ? null : new StandardFontDataFactory({ + baseUrl: standardFontDataUrl + }), + wasmFactory: useWorkerFetch ? null : new WasmFactory({ + baseUrl: wasmUrl + }) + }; + if (!worker) { + worker = PDFWorker.create({ + verbosity, + port: GlobalWorkerOptions.workerPort + }); + task._worker = worker; + } + const docParams = { + docId, + apiVersion: "5.4.394", + data, + password, + disableAutoFetch, + rangeChunkSize, + length, + docBaseUrl, + enableXfa, + evaluatorOptions: { + maxImageSize, + disableFontFace, + ignoreErrors, + isEvalSupported, + isOffscreenCanvasSupported, + isImageDecoderSupported, + canvasMaxAreaInBytes, + fontExtraProperties, + useSystemFonts, + useWasm, + useWorkerFetch, + cMapUrl, + iccUrl, + standardFontDataUrl, + wasmUrl + } + }; + const transportParams = { + ownerDocument, + pdfBug, + styleElement, + loadingParams: { + disableAutoFetch, + enableXfa + } + }; + worker.promise.then(function () { + if (task.destroyed) { + throw new Error("Loading aborted"); + } + if (worker.destroyed) { + throw new Error("Worker was destroyed"); + } + const workerIdPromise = worker.messageHandler.sendWithPromise("GetDocRequest", docParams, data ? [data.buffer] : null); + let networkStream; + if (rangeTransport) { + networkStream = new PDFDataTransportStream(rangeTransport, { + disableRange, + disableStream + }); + } else if (!data) { + if (!url) { + throw new Error("getDocument - no `url` parameter provided."); + } + const NetworkStream = isValidFetchUrl(url) ? PDFFetchStream : isNodeJS ? PDFNodeStream : PDFNetworkStream; + networkStream = new NetworkStream({ + url, + length, + httpHeaders, + withCredentials, + rangeChunkSize, + disableRange, + disableStream + }); + } + return workerIdPromise.then(workerId => { + if (task.destroyed) { + throw new Error("Loading aborted"); + } + if (worker.destroyed) { + throw new Error("Worker was destroyed"); + } + const messageHandler = new MessageHandler(docId, workerId, worker.port); + const transport = new WorkerTransport(messageHandler, task, networkStream, transportParams, transportFactory, enableHWA); + task._transport = transport; + messageHandler.send("Ready", null); + }); + }).catch(task._capability.reject); + return task; +} +class PDFDocumentLoadingTask { + static #docId = 0; + _capability = Promise.withResolvers(); + _transport = null; + _worker = null; + docId = `d${PDFDocumentLoadingTask.#docId++}`; + destroyed = false; + onPassword = null; + onProgress = null; + get promise() { + return this._capability.promise; + } + async destroy() { + this.destroyed = true; + try { + if (this._worker?.port) { + this._worker._pendingDestroy = true; + } + await this._transport?.destroy(); + } catch (ex) { + if (this._worker?.port) { + delete this._worker._pendingDestroy; + } + throw ex; + } + this._transport = null; + this._worker?.destroy(); + this._worker = null; + } + async getData() { + return this._transport.getData(); + } +} +class PDFDataRangeTransport { + #capability = Promise.withResolvers(); + #progressiveDoneListeners = []; + #progressiveReadListeners = []; + #progressListeners = []; + #rangeListeners = []; + constructor(length, initialData, progressiveDone = false, contentDispositionFilename = null) { + this.length = length; + this.initialData = initialData; + this.progressiveDone = progressiveDone; + this.contentDispositionFilename = contentDispositionFilename; + } + addRangeListener(listener) { + this.#rangeListeners.push(listener); + } + addProgressListener(listener) { + this.#progressListeners.push(listener); + } + addProgressiveReadListener(listener) { + this.#progressiveReadListeners.push(listener); + } + addProgressiveDoneListener(listener) { + this.#progressiveDoneListeners.push(listener); + } + onDataRange(begin, chunk) { + for (const listener of this.#rangeListeners) { + listener(begin, chunk); + } + } + onDataProgress(loaded, total) { + this.#capability.promise.then(() => { + for (const listener of this.#progressListeners) { + listener(loaded, total); + } + }); + } + onDataProgressiveRead(chunk) { + this.#capability.promise.then(() => { + for (const listener of this.#progressiveReadListeners) { + listener(chunk); + } + }); + } + onDataProgressiveDone() { + this.#capability.promise.then(() => { + for (const listener of this.#progressiveDoneListeners) { + listener(); + } + }); + } + transportReady() { + this.#capability.resolve(); + } + requestDataRange(begin, end) { + unreachable("Abstract method PDFDataRangeTransport.requestDataRange"); + } + abort() {} +} +class PDFDocumentProxy { + constructor(pdfInfo, transport) { + this._pdfInfo = pdfInfo; + this._transport = transport; + } + get annotationStorage() { + return this._transport.annotationStorage; + } + get canvasFactory() { + return this._transport.canvasFactory; + } + get filterFactory() { + return this._transport.filterFactory; + } + get numPages() { + return this._pdfInfo.numPages; + } + get fingerprints() { + return this._pdfInfo.fingerprints; + } + get isPureXfa() { + return shadow(this, "isPureXfa", !!this._transport._htmlForXfa); + } + get allXfaHtml() { + return this._transport._htmlForXfa; + } + getPage(pageNumber) { + return this._transport.getPage(pageNumber); + } + getPageIndex(ref) { + return this._transport.getPageIndex(ref); + } + getDestinations() { + return this._transport.getDestinations(); + } + getDestination(id) { + return this._transport.getDestination(id); + } + getPageLabels() { + return this._transport.getPageLabels(); + } + getPageLayout() { + return this._transport.getPageLayout(); + } + getPageMode() { + return this._transport.getPageMode(); + } + getViewerPreferences() { + return this._transport.getViewerPreferences(); + } + getOpenAction() { + return this._transport.getOpenAction(); + } + getAttachments() { + return this._transport.getAttachments(); + } + getAnnotationsByType(types, pageIndexesToSkip) { + return this._transport.getAnnotationsByType(types, pageIndexesToSkip); + } + getJSActions() { + return this._transport.getDocJSActions(); + } + getOutline() { + return this._transport.getOutline(); + } + getOptionalContentConfig({ + intent = "display" + } = {}) { + const { + renderingIntent + } = this._transport.getRenderingIntent(intent); + return this._transport.getOptionalContentConfig(renderingIntent); + } + getPermissions() { + return this._transport.getPermissions(); + } + getMetadata() { + return this._transport.getMetadata(); + } + getMarkInfo() { + return this._transport.getMarkInfo(); + } + getData() { + return this._transport.getData(); + } + saveDocument() { + return this._transport.saveDocument(); + } + getDownloadInfo() { + return this._transport.downloadInfoCapability.promise; + } + cleanup(keepLoadedFonts = false) { + return this._transport.startCleanup(keepLoadedFonts || this.isPureXfa); + } + destroy() { + return this.loadingTask.destroy(); + } + cachedPageNumber(ref) { + return this._transport.cachedPageNumber(ref); + } + get loadingParams() { + return this._transport.loadingParams; + } + get loadingTask() { + return this._transport.loadingTask; + } + getFieldObjects() { + return this._transport.getFieldObjects(); + } + hasJSActions() { + return this._transport.hasJSActions(); + } + getCalculationOrderIds() { + return this._transport.getCalculationOrderIds(); + } +} +class PDFPageProxy { + #pendingCleanup = false; + constructor(pageIndex, pageInfo, transport, pdfBug = false) { + this._pageIndex = pageIndex; + this._pageInfo = pageInfo; + this._transport = transport; + this._stats = pdfBug ? new StatTimer() : null; + this._pdfBug = pdfBug; + this.commonObjs = transport.commonObjs; + this.objs = new PDFObjects(); + this._intentStates = new Map(); + this.destroyed = false; + this.recordedBBoxes = null; + } + get pageNumber() { + return this._pageIndex + 1; + } + get rotate() { + return this._pageInfo.rotate; + } + get ref() { + return this._pageInfo.ref; + } + get userUnit() { + return this._pageInfo.userUnit; + } + get view() { + return this._pageInfo.view; + } + getViewport({ + scale, + rotation = this.rotate, + offsetX = 0, + offsetY = 0, + dontFlip = false + } = {}) { + return new PageViewport({ + viewBox: this.view, + userUnit: this.userUnit, + scale, + rotation, + offsetX, + offsetY, + dontFlip + }); + } + getAnnotations({ + intent = "display" + } = {}) { + const { + renderingIntent + } = this._transport.getRenderingIntent(intent); + return this._transport.getAnnotations(this._pageIndex, renderingIntent); + } + getJSActions() { + return this._transport.getPageJSActions(this._pageIndex); + } + get filterFactory() { + return this._transport.filterFactory; + } + get isPureXfa() { + return shadow(this, "isPureXfa", !!this._transport._htmlForXfa); + } + async getXfa() { + return this._transport._htmlForXfa?.children[this._pageIndex] || null; + } + render({ + canvasContext, + canvas = canvasContext.canvas, + viewport, + intent = "display", + annotationMode = AnnotationMode.ENABLE, + transform = null, + background = null, + optionalContentConfigPromise = null, + annotationCanvasMap = null, + pageColors = null, + printAnnotationStorage = null, + isEditing = false, + recordOperations = false, + operationsFilter = null + }) { + this._stats?.time("Overall"); + const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage, isEditing); + const { + renderingIntent, + cacheKey + } = intentArgs; + this.#pendingCleanup = false; + optionalContentConfigPromise ||= this._transport.getOptionalContentConfig(renderingIntent); + let intentState = this._intentStates.get(cacheKey); + if (!intentState) { + intentState = Object.create(null); + this._intentStates.set(cacheKey, intentState); + } + if (intentState.streamReaderCancelTimeout) { + clearTimeout(intentState.streamReaderCancelTimeout); + intentState.streamReaderCancelTimeout = null; + } + const intentPrint = !!(renderingIntent & RenderingIntentFlag.PRINT); + if (!intentState.displayReadyCapability) { + intentState.displayReadyCapability = Promise.withResolvers(); + intentState.operatorList = { + fnArray: [], + argsArray: [], + lastChunk: false, + separateAnnots: null + }; + this._stats?.time("Page Request"); + this._pumpOperatorList(intentArgs); + } + const recordForDebugger = Boolean(this._pdfBug && globalThis.StepperManager?.enabled); + const shouldRecordOperations = !this.recordedBBoxes && (recordOperations || recordForDebugger); + const complete = error => { + intentState.renderTasks.delete(internalRenderTask); + if (shouldRecordOperations) { + const recordedBBoxes = internalRenderTask.gfx?.dependencyTracker.take(); + if (recordedBBoxes) { + if (internalRenderTask.stepper) { + internalRenderTask.stepper.setOperatorBBoxes(recordedBBoxes, internalRenderTask.gfx.dependencyTracker.takeDebugMetadata()); + } + if (recordOperations) { + this.recordedBBoxes = recordedBBoxes; + } + } + } + if (intentPrint) { + this.#pendingCleanup = true; + } + this.#tryCleanup(); + if (error) { + internalRenderTask.capability.reject(error); + this._abortOperatorList({ + intentState, + reason: error instanceof Error ? error : new Error(error) + }); + } else { + internalRenderTask.capability.resolve(); + } + if (this._stats) { + this._stats.timeEnd("Rendering"); + this._stats.timeEnd("Overall"); + if (globalThis.Stats?.enabled) { + globalThis.Stats.add(this.pageNumber, this._stats); + } + } + }; + const internalRenderTask = new InternalRenderTask({ + callback: complete, + params: { + canvas, + canvasContext, + dependencyTracker: shouldRecordOperations ? new CanvasDependencyTracker(canvas, intentState.operatorList.length, recordForDebugger) : null, + viewport, + transform, + background + }, + objs: this.objs, + commonObjs: this.commonObjs, + annotationCanvasMap, + operatorList: intentState.operatorList, + pageIndex: this._pageIndex, + canvasFactory: this._transport.canvasFactory, + filterFactory: this._transport.filterFactory, + useRequestAnimationFrame: !intentPrint, + pdfBug: this._pdfBug, + pageColors, + enableHWA: this._transport.enableHWA, + operationsFilter + }); + (intentState.renderTasks ||= new Set()).add(internalRenderTask); + const renderTask = internalRenderTask.task; + Promise.all([intentState.displayReadyCapability.promise, optionalContentConfigPromise]).then(([transparency, optionalContentConfig]) => { + if (this.destroyed) { + complete(); + return; + } + this._stats?.time("Rendering"); + if (!(optionalContentConfig.renderingIntent & renderingIntent)) { + throw new Error("Must use the same `intent`-argument when calling the `PDFPageProxy.render` " + "and `PDFDocumentProxy.getOptionalContentConfig` methods."); + } + internalRenderTask.initializeGraphics({ + transparency, + optionalContentConfig + }); + internalRenderTask.operatorListChanged(); + }).catch(complete); + return renderTask; + } + getOperatorList({ + intent = "display", + annotationMode = AnnotationMode.ENABLE, + printAnnotationStorage = null, + isEditing = false + } = {}) { + function operatorListChanged() { + if (intentState.operatorList.lastChunk) { + intentState.opListReadCapability.resolve(intentState.operatorList); + intentState.renderTasks.delete(opListTask); + } + } + const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage, isEditing, true); + let intentState = this._intentStates.get(intentArgs.cacheKey); + if (!intentState) { + intentState = Object.create(null); + this._intentStates.set(intentArgs.cacheKey, intentState); + } + let opListTask; + if (!intentState.opListReadCapability) { + opListTask = Object.create(null); + opListTask.operatorListChanged = operatorListChanged; + intentState.opListReadCapability = Promise.withResolvers(); + (intentState.renderTasks ||= new Set()).add(opListTask); + intentState.operatorList = { + fnArray: [], + argsArray: [], + lastChunk: false, + separateAnnots: null + }; + this._stats?.time("Page Request"); + this._pumpOperatorList(intentArgs); + } + return intentState.opListReadCapability.promise; + } + streamTextContent({ + includeMarkedContent = false, + disableNormalization = false + } = {}) { + const TEXT_CONTENT_CHUNK_SIZE = 100; + return this._transport.messageHandler.sendWithStream("GetTextContent", { + pageIndex: this._pageIndex, + includeMarkedContent: includeMarkedContent === true, + disableNormalization: disableNormalization === true + }, { + highWaterMark: TEXT_CONTENT_CHUNK_SIZE, + size(textContent) { + return textContent.items.length; + } + }); + } + getTextContent(params = {}) { + if (this._transport._htmlForXfa) { + return this.getXfa().then(xfa => XfaText.textContent(xfa)); + } + const readableStream = this.streamTextContent(params); + return new Promise(function (resolve, reject) { + function pump() { + reader.read().then(function ({ + value, + done + }) { + if (done) { + resolve(textContent); + return; + } + textContent.lang ??= value.lang; + Object.assign(textContent.styles, value.styles); + textContent.items.push(...value.items); + pump(); + }, reject); + } + const reader = readableStream.getReader(); + const textContent = { + items: [], + styles: Object.create(null), + lang: null + }; + pump(); + }); + } + getStructTree() { + return this._transport.getStructTree(this._pageIndex); + } + _destroy() { + this.destroyed = true; + const waitOn = []; + for (const intentState of this._intentStates.values()) { + this._abortOperatorList({ + intentState, + reason: new Error("Page was destroyed."), + force: true + }); + if (intentState.opListReadCapability) { + continue; + } + for (const internalRenderTask of intentState.renderTasks) { + waitOn.push(internalRenderTask.completed); + internalRenderTask.cancel(); + } + } + this.objs.clear(); + this.#pendingCleanup = false; + return Promise.all(waitOn); + } + cleanup(resetStats = false) { + this.#pendingCleanup = true; + const success = this.#tryCleanup(); + if (resetStats && success) { + this._stats &&= new StatTimer(); + } + return success; + } + #tryCleanup() { + if (!this.#pendingCleanup || this.destroyed) { + return false; + } + for (const { + renderTasks, + operatorList + } of this._intentStates.values()) { + if (renderTasks.size > 0 || !operatorList.lastChunk) { + return false; + } + } + this._intentStates.clear(); + this.objs.clear(); + this.#pendingCleanup = false; + return true; + } + _startRenderPage(transparency, cacheKey) { + const intentState = this._intentStates.get(cacheKey); + if (!intentState) { + return; + } + this._stats?.timeEnd("Page Request"); + intentState.displayReadyCapability?.resolve(transparency); + } + _renderPageChunk(operatorListChunk, intentState) { + for (let i = 0, ii = operatorListChunk.length; i < ii; i++) { + intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]); + intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]); + } + intentState.operatorList.lastChunk = operatorListChunk.lastChunk; + intentState.operatorList.separateAnnots = operatorListChunk.separateAnnots; + for (const internalRenderTask of intentState.renderTasks) { + internalRenderTask.operatorListChanged(); + } + if (operatorListChunk.lastChunk) { + this.#tryCleanup(); + } + } + _pumpOperatorList({ + renderingIntent, + cacheKey, + annotationStorageSerializable, + modifiedIds + }) { + const { + map, + transfer + } = annotationStorageSerializable; + const readableStream = this._transport.messageHandler.sendWithStream("GetOperatorList", { + pageIndex: this._pageIndex, + intent: renderingIntent, + cacheKey, + annotationStorage: map, + modifiedIds + }, transfer); + const reader = readableStream.getReader(); + const intentState = this._intentStates.get(cacheKey); + intentState.streamReader = reader; + const pump = () => { + reader.read().then(({ + value, + done + }) => { + if (done) { + intentState.streamReader = null; + return; + } + if (this._transport.destroyed) { + return; + } + this._renderPageChunk(value, intentState); + pump(); + }, reason => { + intentState.streamReader = null; + if (this._transport.destroyed) { + return; + } + if (intentState.operatorList) { + intentState.operatorList.lastChunk = true; + for (const internalRenderTask of intentState.renderTasks) { + internalRenderTask.operatorListChanged(); + } + this.#tryCleanup(); + } + if (intentState.displayReadyCapability) { + intentState.displayReadyCapability.reject(reason); + } else if (intentState.opListReadCapability) { + intentState.opListReadCapability.reject(reason); + } else { + throw reason; + } + }); + }; + pump(); + } + _abortOperatorList({ + intentState, + reason, + force = false + }) { + if (!intentState.streamReader) { + return; + } + if (intentState.streamReaderCancelTimeout) { + clearTimeout(intentState.streamReaderCancelTimeout); + intentState.streamReaderCancelTimeout = null; + } + if (!force) { + if (intentState.renderTasks.size > 0) { + return; + } + if (reason instanceof RenderingCancelledException) { + let delay = RENDERING_CANCELLED_TIMEOUT; + if (reason.extraDelay > 0 && reason.extraDelay < 1000) { + delay += reason.extraDelay; + } + intentState.streamReaderCancelTimeout = setTimeout(() => { + intentState.streamReaderCancelTimeout = null; + this._abortOperatorList({ + intentState, + reason, + force: true + }); + }, delay); + return; + } + } + intentState.streamReader.cancel(new AbortException(reason.message)).catch(() => {}); + intentState.streamReader = null; + if (this._transport.destroyed) { + return; + } + for (const [curCacheKey, curIntentState] of this._intentStates) { + if (curIntentState === intentState) { + this._intentStates.delete(curCacheKey); + break; + } + } + this.cleanup(); + } + get stats() { + return this._stats; + } +} +class PDFWorker { + #capability = Promise.withResolvers(); + #messageHandler = null; + #port = null; + #webWorker = null; + static #fakeWorkerId = 0; + static #isWorkerDisabled = false; + static #workerPorts = new WeakMap(); + static { + if (isNodeJS) { + this.#isWorkerDisabled = true; + GlobalWorkerOptions.workerSrc ||= "./pdf.worker.mjs"; + } + this._isSameOrigin = (baseUrl, otherUrl) => { + const base = URL.parse(baseUrl); + if (!base?.origin || base.origin === "null") { + return false; + } + const other = new URL(otherUrl, base); + return base.origin === other.origin; + }; + this._createCDNWrapper = url => { + const wrapper = `await import("${url}");`; + return URL.createObjectURL(new Blob([wrapper], { + type: "text/javascript" + })); + }; + this.fromPort = params => { + deprecated("`PDFWorker.fromPort` - please use `PDFWorker.create` instead."); + if (!params?.port) { + throw new Error("PDFWorker.fromPort - invalid method signature."); + } + return this.create(params); + }; + } + constructor({ + name = null, + port = null, + verbosity = getVerbosityLevel() + } = {}) { + this.name = name; + this.destroyed = false; + this.verbosity = verbosity; + if (port) { + if (PDFWorker.#workerPorts.has(port)) { + throw new Error("Cannot use more than one PDFWorker per port."); + } + PDFWorker.#workerPorts.set(port, this); + this.#initializeFromPort(port); + } else { + this.#initialize(); + } + } + get promise() { + return this.#capability.promise; + } + #resolve() { + this.#capability.resolve(); + this.#messageHandler.send("configure", { + verbosity: this.verbosity + }); + } + get port() { + return this.#port; + } + get messageHandler() { + return this.#messageHandler; + } + #initializeFromPort(port) { + this.#port = port; + this.#messageHandler = new MessageHandler("main", "worker", port); + this.#messageHandler.on("ready", () => {}); + this.#resolve(); + } + #initialize() { + if (PDFWorker.#isWorkerDisabled || PDFWorker.#mainThreadWorkerMessageHandler) { + this.#setupFakeWorker(); + return; + } + let { + workerSrc + } = PDFWorker; + try { + if (!PDFWorker._isSameOrigin(window.location, workerSrc)) { + workerSrc = PDFWorker._createCDNWrapper(new URL(workerSrc, window.location).href); + } + const worker = new Worker(workerSrc, { + type: "module" + }); + const messageHandler = new MessageHandler("main", "worker", worker); + const terminateEarly = () => { + ac.abort(); + messageHandler.destroy(); + worker.terminate(); + if (this.destroyed) { + this.#capability.reject(new Error("Worker was destroyed")); + } else { + this.#setupFakeWorker(); + } + }; + const ac = new AbortController(); + worker.addEventListener("error", () => { + if (!this.#webWorker) { + terminateEarly(); + } + }, { + signal: ac.signal + }); + messageHandler.on("test", data => { + ac.abort(); + if (this.destroyed || !data) { + terminateEarly(); + return; + } + this.#messageHandler = messageHandler; + this.#port = worker; + this.#webWorker = worker; + this.#resolve(); + }); + messageHandler.on("ready", data => { + ac.abort(); + if (this.destroyed) { + terminateEarly(); + return; + } + try { + sendTest(); + } catch { + this.#setupFakeWorker(); + } + }); + const sendTest = () => { + const testObj = new Uint8Array(); + messageHandler.send("test", testObj, [testObj.buffer]); + }; + sendTest(); + return; + } catch { + info("The worker has been disabled."); + } + this.#setupFakeWorker(); + } + #setupFakeWorker() { + if (!PDFWorker.#isWorkerDisabled) { + warn("Setting up fake worker."); + PDFWorker.#isWorkerDisabled = true; + } + PDFWorker._setupFakeWorkerGlobal.then(WorkerMessageHandler => { + if (this.destroyed) { + this.#capability.reject(new Error("Worker was destroyed")); + return; + } + const port = new LoopbackPort(); + this.#port = port; + const id = `fake${PDFWorker.#fakeWorkerId++}`; + const workerHandler = new MessageHandler(id + "_worker", id, port); + WorkerMessageHandler.setup(workerHandler, port); + this.#messageHandler = new MessageHandler(id, id + "_worker", port); + this.#resolve(); + }).catch(reason => { + this.#capability.reject(new Error(`Setting up fake worker failed: "${reason.message}".`)); + }); + } + destroy() { + this.destroyed = true; + this.#webWorker?.terminate(); + this.#webWorker = null; + PDFWorker.#workerPorts.delete(this.#port); + this.#port = null; + this.#messageHandler?.destroy(); + this.#messageHandler = null; + } + static create(params) { + const cachedPort = this.#workerPorts.get(params?.port); + if (cachedPort) { + if (cachedPort._pendingDestroy) { + throw new Error("PDFWorker.create - the worker is being destroyed.\n" + "Please remember to await `PDFDocumentLoadingTask.destroy()`-calls."); + } + return cachedPort; + } + return new PDFWorker(params); + } + static get workerSrc() { + if (GlobalWorkerOptions.workerSrc) { + return GlobalWorkerOptions.workerSrc; + } + throw new Error('No "GlobalWorkerOptions.workerSrc" specified.'); + } + static get #mainThreadWorkerMessageHandler() { + try { + return globalThis.pdfjsWorker?.WorkerMessageHandler || null; + } catch { + return null; + } + } + static get _setupFakeWorkerGlobal() { + const loader = async () => { + if (this.#mainThreadWorkerMessageHandler) { + return this.#mainThreadWorkerMessageHandler; + } + const worker = await import( + /*webpackIgnore: true*/ + /*@vite-ignore*/ + this.workerSrc); + return worker.WorkerMessageHandler; + }; + return shadow(this, "_setupFakeWorkerGlobal", loader()); + } +} +class WorkerTransport { + #methodPromises = new Map(); + #pageCache = new Map(); + #pagePromises = new Map(); + #pageRefCache = new Map(); + #passwordCapability = null; + constructor(messageHandler, loadingTask, networkStream, params, factory, enableHWA) { + this.messageHandler = messageHandler; + this.loadingTask = loadingTask; + this.commonObjs = new PDFObjects(); + this.fontLoader = new FontLoader({ + ownerDocument: params.ownerDocument, + styleElement: params.styleElement + }); + this.loadingParams = params.loadingParams; + this._params = params; + this.canvasFactory = factory.canvasFactory; + this.filterFactory = factory.filterFactory; + this.cMapReaderFactory = factory.cMapReaderFactory; + this.standardFontDataFactory = factory.standardFontDataFactory; + this.wasmFactory = factory.wasmFactory; + this.destroyed = false; + this.destroyCapability = null; + this._networkStream = networkStream; + this._fullReader = null; + this._lastProgress = null; + this.downloadInfoCapability = Promise.withResolvers(); + this.enableHWA = enableHWA; + this.setupMessageHandler(); + } + #cacheSimpleMethod(name, data = null) { + const cachedPromise = this.#methodPromises.get(name); + if (cachedPromise) { + return cachedPromise; + } + const promise = this.messageHandler.sendWithPromise(name, data); + this.#methodPromises.set(name, promise); + return promise; + } + get annotationStorage() { + return shadow(this, "annotationStorage", new AnnotationStorage()); + } + getRenderingIntent(intent, annotationMode = AnnotationMode.ENABLE, printAnnotationStorage = null, isEditing = false, isOpList = false) { + let renderingIntent = RenderingIntentFlag.DISPLAY; + let annotationStorageSerializable = SerializableEmpty; + switch (intent) { + case "any": + renderingIntent = RenderingIntentFlag.ANY; + break; + case "display": + break; + case "print": + renderingIntent = RenderingIntentFlag.PRINT; + break; + default: + warn(`getRenderingIntent - invalid intent: ${intent}`); + } + const annotationStorage = renderingIntent & RenderingIntentFlag.PRINT && printAnnotationStorage instanceof PrintAnnotationStorage ? printAnnotationStorage : this.annotationStorage; + switch (annotationMode) { + case AnnotationMode.DISABLE: + renderingIntent += RenderingIntentFlag.ANNOTATIONS_DISABLE; + break; + case AnnotationMode.ENABLE: + break; + case AnnotationMode.ENABLE_FORMS: + renderingIntent += RenderingIntentFlag.ANNOTATIONS_FORMS; + break; + case AnnotationMode.ENABLE_STORAGE: + renderingIntent += RenderingIntentFlag.ANNOTATIONS_STORAGE; + annotationStorageSerializable = annotationStorage.serializable; + break; + default: + warn(`getRenderingIntent - invalid annotationMode: ${annotationMode}`); + } + if (isEditing) { + renderingIntent += RenderingIntentFlag.IS_EDITING; + } + if (isOpList) { + renderingIntent += RenderingIntentFlag.OPLIST; + } + const { + ids: modifiedIds, + hash: modifiedIdsHash + } = annotationStorage.modifiedIds; + const cacheKeyBuf = [renderingIntent, annotationStorageSerializable.hash, modifiedIdsHash]; + return { + renderingIntent, + cacheKey: cacheKeyBuf.join("_"), + annotationStorageSerializable, + modifiedIds + }; + } + destroy() { + if (this.destroyCapability) { + return this.destroyCapability.promise; + } + this.destroyed = true; + this.destroyCapability = Promise.withResolvers(); + this.#passwordCapability?.reject(new Error("Worker was destroyed during onPassword callback")); + const waitOn = []; + for (const page of this.#pageCache.values()) { + waitOn.push(page._destroy()); + } + this.#pageCache.clear(); + this.#pagePromises.clear(); + this.#pageRefCache.clear(); + if (this.hasOwnProperty("annotationStorage")) { + this.annotationStorage.resetModified(); + } + const terminated = this.messageHandler.sendWithPromise("Terminate", null); + waitOn.push(terminated); + Promise.all(waitOn).then(() => { + this.commonObjs.clear(); + this.fontLoader.clear(); + this.#methodPromises.clear(); + this.filterFactory.destroy(); + TextLayer.cleanup(); + this._networkStream?.cancelAllRequests(new AbortException("Worker was terminated.")); + this.messageHandler?.destroy(); + this.messageHandler = null; + this.destroyCapability.resolve(); + }, this.destroyCapability.reject); + return this.destroyCapability.promise; + } + setupMessageHandler() { + const { + messageHandler, + loadingTask + } = this; + messageHandler.on("GetReader", (data, sink) => { + assert(this._networkStream, "GetReader - no `IPDFStream` instance available."); + this._fullReader = this._networkStream.getFullReader(); + this._fullReader.onProgress = evt => { + this._lastProgress = { + loaded: evt.loaded, + total: evt.total + }; + }; + sink.onPull = () => { + this._fullReader.read().then(function ({ + value, + done + }) { + if (done) { + sink.close(); + return; + } + assert(value instanceof ArrayBuffer, "GetReader - expected an ArrayBuffer."); + sink.enqueue(new Uint8Array(value), 1, [value]); + }).catch(reason => { + sink.error(reason); + }); + }; + sink.onCancel = reason => { + this._fullReader.cancel(reason); + sink.ready.catch(readyReason => { + if (this.destroyed) { + return; + } + throw readyReason; + }); + }; + }); + messageHandler.on("ReaderHeadersReady", async data => { + await this._fullReader.headersReady; + const { + isStreamingSupported, + isRangeSupported, + contentLength + } = this._fullReader; + if (!isStreamingSupported || !isRangeSupported) { + if (this._lastProgress) { + loadingTask.onProgress?.(this._lastProgress); + } + this._fullReader.onProgress = evt => { + loadingTask.onProgress?.({ + loaded: evt.loaded, + total: evt.total + }); + }; + } + return { + isStreamingSupported, + isRangeSupported, + contentLength + }; + }); + messageHandler.on("GetRangeReader", (data, sink) => { + assert(this._networkStream, "GetRangeReader - no `IPDFStream` instance available."); + const rangeReader = this._networkStream.getRangeReader(data.begin, data.end); + if (!rangeReader) { + sink.close(); + return; + } + sink.onPull = () => { + rangeReader.read().then(function ({ + value, + done + }) { + if (done) { + sink.close(); + return; + } + assert(value instanceof ArrayBuffer, "GetRangeReader - expected an ArrayBuffer."); + sink.enqueue(new Uint8Array(value), 1, [value]); + }).catch(reason => { + sink.error(reason); + }); + }; + sink.onCancel = reason => { + rangeReader.cancel(reason); + sink.ready.catch(readyReason => { + if (this.destroyed) { + return; + } + throw readyReason; + }); + }; + }); + messageHandler.on("GetDoc", ({ + pdfInfo + }) => { + this._numPages = pdfInfo.numPages; + this._htmlForXfa = pdfInfo.htmlForXfa; + delete pdfInfo.htmlForXfa; + loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, this)); + }); + messageHandler.on("DocException", ex => { + loadingTask._capability.reject(wrapReason(ex)); + }); + messageHandler.on("PasswordRequest", ex => { + this.#passwordCapability = Promise.withResolvers(); + try { + if (!loadingTask.onPassword) { + throw wrapReason(ex); + } + const updatePassword = password => { + if (password instanceof Error) { + this.#passwordCapability.reject(password); + } else { + this.#passwordCapability.resolve({ + password + }); + } + }; + loadingTask.onPassword(updatePassword, ex.code); + } catch (err) { + this.#passwordCapability.reject(err); + } + return this.#passwordCapability.promise; + }); + messageHandler.on("DataLoaded", data => { + loadingTask.onProgress?.({ + loaded: data.length, + total: data.length + }); + this.downloadInfoCapability.resolve(data); + }); + messageHandler.on("StartRenderPage", data => { + if (this.destroyed) { + return; + } + const page = this.#pageCache.get(data.pageIndex); + page._startRenderPage(data.transparency, data.cacheKey); + }); + messageHandler.on("commonobj", ([id, type, exportedData]) => { + if (this.destroyed) { + return null; + } + if (this.commonObjs.has(id)) { + return null; + } + switch (type) { + case "Font": + if ("error" in exportedData) { + const exportedError = exportedData.error; + warn(`Error during font loading: ${exportedError}`); + this.commonObjs.resolve(id, exportedError); + break; + } + const fontData = new FontInfo(exportedData); + const inspectFont = this._params.pdfBug && globalThis.FontInspector?.enabled ? (font, url) => globalThis.FontInspector.fontAdded(font, url) : null; + const font = new FontFaceObject(fontData, inspectFont, exportedData.extra, exportedData.charProcOperatorList); + this.fontLoader.bind(font).catch(() => messageHandler.sendWithPromise("FontFallback", { + id + })).finally(() => { + if (!font.fontExtraProperties && font.data) { + font.clearData(); + } + this.commonObjs.resolve(id, font); + }); + break; + case "CopyLocalImage": + const { + imageRef + } = exportedData; + assert(imageRef, "The imageRef must be defined."); + for (const pageProxy of this.#pageCache.values()) { + for (const [, data] of pageProxy.objs) { + if (data?.ref !== imageRef) { + continue; + } + if (!data.dataLen) { + return null; + } + this.commonObjs.resolve(id, structuredClone(data)); + return data.dataLen; + } + } + break; + case "FontPath": + case "Image": + this.commonObjs.resolve(id, exportedData); + break; + case "Pattern": + const pattern = new PatternInfo(exportedData); + this.commonObjs.resolve(id, pattern.getIR()); + break; + default: + throw new Error(`Got unknown common object type ${type}`); + } + return null; + }); + messageHandler.on("obj", ([id, pageIndex, type, imageData]) => { + if (this.destroyed) { + return; + } + const pageProxy = this.#pageCache.get(pageIndex); + if (pageProxy.objs.has(id)) { + return; + } + if (pageProxy._intentStates.size === 0) { + imageData?.bitmap?.close(); + return; + } + switch (type) { + case "Image": + case "Pattern": + pageProxy.objs.resolve(id, imageData); + break; + default: + throw new Error(`Got unknown object type ${type}`); + } + }); + messageHandler.on("DocProgress", data => { + if (this.destroyed) { + return; + } + loadingTask.onProgress?.({ + loaded: data.loaded, + total: data.total + }); + }); + messageHandler.on("FetchBinaryData", async data => { + if (this.destroyed) { + throw new Error("Worker was destroyed."); + } + const factory = this[data.type]; + if (!factory) { + throw new Error(`${data.type} not initialized, see the \`useWorkerFetch\` parameter.`); + } + return factory.fetch(data); + }); + } + getData() { + return this.messageHandler.sendWithPromise("GetData", null); + } + saveDocument() { + if (this.annotationStorage.size <= 0) { + warn("saveDocument called while `annotationStorage` is empty, " + "please use the getData-method instead."); + } + const { + map, + transfer + } = this.annotationStorage.serializable; + return this.messageHandler.sendWithPromise("SaveDocument", { + isPureXfa: !!this._htmlForXfa, + numPages: this._numPages, + annotationStorage: map, + filename: this._fullReader?.filename ?? null + }, transfer).finally(() => { + this.annotationStorage.resetModified(); + }); + } + getPage(pageNumber) { + if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this._numPages) { + return Promise.reject(new Error("Invalid page request.")); + } + const pageIndex = pageNumber - 1, + cachedPromise = this.#pagePromises.get(pageIndex); + if (cachedPromise) { + return cachedPromise; + } + const promise = this.messageHandler.sendWithPromise("GetPage", { + pageIndex + }).then(pageInfo => { + if (this.destroyed) { + throw new Error("Transport destroyed"); + } + if (pageInfo.refStr) { + this.#pageRefCache.set(pageInfo.refStr, pageNumber); + } + const page = new PDFPageProxy(pageIndex, pageInfo, this, this._params.pdfBug); + this.#pageCache.set(pageIndex, page); + return page; + }); + this.#pagePromises.set(pageIndex, promise); + return promise; + } + getPageIndex(ref) { + if (!isRefProxy(ref)) { + return Promise.reject(new Error("Invalid pageIndex request.")); + } + return this.messageHandler.sendWithPromise("GetPageIndex", { + num: ref.num, + gen: ref.gen + }); + } + getAnnotations(pageIndex, intent) { + return this.messageHandler.sendWithPromise("GetAnnotations", { + pageIndex, + intent + }); + } + getFieldObjects() { + return this.#cacheSimpleMethod("GetFieldObjects"); + } + hasJSActions() { + return this.#cacheSimpleMethod("HasJSActions"); + } + getCalculationOrderIds() { + return this.messageHandler.sendWithPromise("GetCalculationOrderIds", null); + } + getDestinations() { + return this.messageHandler.sendWithPromise("GetDestinations", null); + } + getDestination(id) { + if (typeof id !== "string") { + return Promise.reject(new Error("Invalid destination request.")); + } + return this.messageHandler.sendWithPromise("GetDestination", { + id + }); + } + getPageLabels() { + return this.messageHandler.sendWithPromise("GetPageLabels", null); + } + getPageLayout() { + return this.messageHandler.sendWithPromise("GetPageLayout", null); + } + getPageMode() { + return this.messageHandler.sendWithPromise("GetPageMode", null); + } + getViewerPreferences() { + return this.messageHandler.sendWithPromise("GetViewerPreferences", null); + } + getOpenAction() { + return this.messageHandler.sendWithPromise("GetOpenAction", null); + } + getAttachments() { + return this.messageHandler.sendWithPromise("GetAttachments", null); + } + getAnnotationsByType(types, pageIndexesToSkip) { + return this.messageHandler.sendWithPromise("GetAnnotationsByType", { + types, + pageIndexesToSkip + }); + } + getDocJSActions() { + return this.#cacheSimpleMethod("GetDocJSActions"); + } + getPageJSActions(pageIndex) { + return this.messageHandler.sendWithPromise("GetPageJSActions", { + pageIndex + }); + } + getStructTree(pageIndex) { + return this.messageHandler.sendWithPromise("GetStructTree", { + pageIndex + }); + } + getOutline() { + return this.messageHandler.sendWithPromise("GetOutline", null); + } + getOptionalContentConfig(renderingIntent) { + return this.#cacheSimpleMethod("GetOptionalContentConfig").then(data => new OptionalContentConfig(data, renderingIntent)); + } + getPermissions() { + return this.messageHandler.sendWithPromise("GetPermissions", null); + } + getMetadata() { + const name = "GetMetadata", + cachedPromise = this.#methodPromises.get(name); + if (cachedPromise) { + return cachedPromise; + } + const promise = this.messageHandler.sendWithPromise(name, null).then(results => ({ + info: results[0], + metadata: results[1] ? new Metadata(results[1]) : null, + contentDispositionFilename: this._fullReader?.filename ?? null, + contentLength: this._fullReader?.contentLength ?? null + })); + this.#methodPromises.set(name, promise); + return promise; + } + getMarkInfo() { + return this.messageHandler.sendWithPromise("GetMarkInfo", null); + } + async startCleanup(keepLoadedFonts = false) { + if (this.destroyed) { + return; + } + await this.messageHandler.sendWithPromise("Cleanup", null); + for (const page of this.#pageCache.values()) { + const cleanupSuccessful = page.cleanup(); + if (!cleanupSuccessful) { + throw new Error(`startCleanup: Page ${page.pageNumber} is currently rendering.`); + } + } + this.commonObjs.clear(); + if (!keepLoadedFonts) { + this.fontLoader.clear(); + } + this.#methodPromises.clear(); + this.filterFactory.destroy(true); + TextLayer.cleanup(); + } + cachedPageNumber(ref) { + if (!isRefProxy(ref)) { + return null; + } + const refStr = ref.gen === 0 ? `${ref.num}R` : `${ref.num}R${ref.gen}`; + return this.#pageRefCache.get(refStr) ?? null; + } +} +class RenderTask { + #internalRenderTask = null; + onContinue = null; + onError = null; + constructor(internalRenderTask) { + this.#internalRenderTask = internalRenderTask; + } + get promise() { + return this.#internalRenderTask.capability.promise; + } + cancel(extraDelay = 0) { + this.#internalRenderTask.cancel(null, extraDelay); + } + get separateAnnots() { + const { + separateAnnots + } = this.#internalRenderTask.operatorList; + if (!separateAnnots) { + return false; + } + const { + annotationCanvasMap + } = this.#internalRenderTask; + return separateAnnots.form || separateAnnots.canvas && annotationCanvasMap?.size > 0; + } +} +class InternalRenderTask { + #rAF = null; + static #canvasInUse = new WeakSet(); + constructor({ + callback, + params, + objs, + commonObjs, + annotationCanvasMap, + operatorList, + pageIndex, + canvasFactory, + filterFactory, + useRequestAnimationFrame = false, + pdfBug = false, + pageColors = null, + enableHWA = false, + operationsFilter = null + }) { + this.callback = callback; + this.params = params; + this.objs = objs; + this.commonObjs = commonObjs; + this.annotationCanvasMap = annotationCanvasMap; + this.operatorListIdx = null; + this.operatorList = operatorList; + this._pageIndex = pageIndex; + this.canvasFactory = canvasFactory; + this.filterFactory = filterFactory; + this._pdfBug = pdfBug; + this.pageColors = pageColors; + this.running = false; + this.graphicsReadyCallback = null; + this.graphicsReady = false; + this._useRequestAnimationFrame = useRequestAnimationFrame === true && typeof window !== "undefined"; + this.cancelled = false; + this.capability = Promise.withResolvers(); + this.task = new RenderTask(this); + this._cancelBound = this.cancel.bind(this); + this._continueBound = this._continue.bind(this); + this._scheduleNextBound = this._scheduleNext.bind(this); + this._nextBound = this._next.bind(this); + this._canvas = params.canvas; + this._canvasContext = params.canvas ? null : params.canvasContext; + this._enableHWA = enableHWA; + this._dependencyTracker = params.dependencyTracker; + this._operationsFilter = operationsFilter; + } + get completed() { + return this.capability.promise.catch(function () {}); + } + initializeGraphics({ + transparency = false, + optionalContentConfig + }) { + if (this.cancelled) { + return; + } + if (this._canvas) { + if (InternalRenderTask.#canvasInUse.has(this._canvas)) { + throw new Error("Cannot use the same canvas during multiple render() operations. " + "Use different canvas or ensure previous operations were " + "cancelled or completed."); + } + InternalRenderTask.#canvasInUse.add(this._canvas); + } + if (this._pdfBug && globalThis.StepperManager?.enabled) { + this.stepper = globalThis.StepperManager.create(this._pageIndex); + this.stepper.init(this.operatorList); + this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint(); + } + const { + viewport, + transform, + background, + dependencyTracker + } = this.params; + const canvasContext = this._canvasContext || this._canvas.getContext("2d", { + alpha: false, + willReadFrequently: !this._enableHWA + }); + this.gfx = new CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, { + optionalContentConfig + }, this.annotationCanvasMap, this.pageColors, dependencyTracker); + this.gfx.beginDrawing({ + transform, + viewport, + transparency, + background + }); + this.operatorListIdx = 0; + this.graphicsReady = true; + this.graphicsReadyCallback?.(); + } + cancel(error = null, extraDelay = 0) { + this.running = false; + this.cancelled = true; + this.gfx?.endDrawing(); + if (this.#rAF) { + window.cancelAnimationFrame(this.#rAF); + this.#rAF = null; + } + InternalRenderTask.#canvasInUse.delete(this._canvas); + error ||= new RenderingCancelledException(`Rendering cancelled, page ${this._pageIndex + 1}`, extraDelay); + this.callback(error); + this.task.onError?.(error); + } + operatorListChanged() { + if (!this.graphicsReady) { + this.graphicsReadyCallback ||= this._continueBound; + return; + } + this.gfx.dependencyTracker?.growOperationsCount(this.operatorList.fnArray.length); + this.stepper?.updateOperatorList(this.operatorList); + if (this.running) { + return; + } + this._continue(); + } + _continue() { + this.running = true; + if (this.cancelled) { + return; + } + if (this.task.onContinue) { + this.task.onContinue(this._scheduleNextBound); + } else { + this._scheduleNext(); + } + } + _scheduleNext() { + if (this._useRequestAnimationFrame) { + this.#rAF = window.requestAnimationFrame(() => { + this.#rAF = null; + this._nextBound().catch(this._cancelBound); + }); + } else { + Promise.resolve().then(this._nextBound).catch(this._cancelBound); + } + } + async _next() { + if (this.cancelled) { + return; + } + this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper, this._operationsFilter); + if (this.operatorListIdx === this.operatorList.argsArray.length) { + this.running = false; + if (this.operatorList.lastChunk) { + this.gfx.endDrawing(); + InternalRenderTask.#canvasInUse.delete(this._canvas); + this.callback(); + } + } + } +} +const version = "5.4.394"; +const build = "2cc809ade"; + +;// ./src/display/editor/color_picker.js + + + +class ColorPicker { + #button = null; + #buttonSwatch = null; + #defaultColor; + #dropdown = null; + #dropdownWasFromKeyboard = false; + #isMainColorPicker = false; + #editor = null; + #eventBus; + #openDropdownAC = null; + #uiManager = null; + static #l10nColor = null; + static get _keyboardManager() { + return shadow(this, "_keyboardManager", new KeyboardManager([[["Escape", "mac+Escape"], ColorPicker.prototype._hideDropdownFromKeyboard], [[" ", "mac+ "], ColorPicker.prototype._colorSelectFromKeyboard], [["ArrowDown", "ArrowRight", "mac+ArrowDown", "mac+ArrowRight"], ColorPicker.prototype._moveToNext], [["ArrowUp", "ArrowLeft", "mac+ArrowUp", "mac+ArrowLeft"], ColorPicker.prototype._moveToPrevious], [["Home", "mac+Home"], ColorPicker.prototype._moveToBeginning], [["End", "mac+End"], ColorPicker.prototype._moveToEnd]])); + } + constructor({ + editor = null, + uiManager = null + }) { + if (editor) { + this.#isMainColorPicker = false; + this.#editor = editor; + } else { + this.#isMainColorPicker = true; + } + this.#uiManager = editor?._uiManager || uiManager; + this.#eventBus = this.#uiManager._eventBus; + this.#defaultColor = editor?.color?.toUpperCase() || this.#uiManager?.highlightColors.values().next().value || "#FFFF98"; + ColorPicker.#l10nColor ||= Object.freeze({ + blue: "pdfjs-editor-colorpicker-blue", + green: "pdfjs-editor-colorpicker-green", + pink: "pdfjs-editor-colorpicker-pink", + red: "pdfjs-editor-colorpicker-red", + yellow: "pdfjs-editor-colorpicker-yellow" + }); + } + renderButton() { + const button = this.#button = document.createElement("button"); + button.className = "colorPicker"; + button.tabIndex = "0"; + button.setAttribute("data-l10n-id", "pdfjs-editor-colorpicker-button"); + button.ariaHasPopup = "true"; + if (this.#editor) { + button.ariaControls = `${this.#editor.id}_colorpicker_dropdown`; + } + const signal = this.#uiManager._signal; + button.addEventListener("click", this.#openDropdown.bind(this), { + signal + }); + button.addEventListener("keydown", this.#keyDown.bind(this), { + signal + }); + const swatch = this.#buttonSwatch = document.createElement("span"); + swatch.className = "swatch"; + swatch.ariaHidden = "true"; + swatch.style.backgroundColor = this.#defaultColor; + button.append(swatch); + return button; + } + renderMainDropdown() { + const dropdown = this.#dropdown = this.#getDropdownRoot(); + dropdown.ariaOrientation = "horizontal"; + dropdown.ariaLabelledBy = "highlightColorPickerLabel"; + return dropdown; + } + #getDropdownRoot() { + const div = document.createElement("div"); + const signal = this.#uiManager._signal; + div.addEventListener("contextmenu", noContextMenu, { + signal + }); + div.className = "dropdown"; + div.role = "listbox"; + div.ariaMultiSelectable = "false"; + div.ariaOrientation = "vertical"; + div.setAttribute("data-l10n-id", "pdfjs-editor-colorpicker-dropdown"); + if (this.#editor) { + div.id = `${this.#editor.id}_colorpicker_dropdown`; + } + for (const [name, color] of this.#uiManager.highlightColors) { + const button = document.createElement("button"); + button.tabIndex = "0"; + button.role = "option"; + button.setAttribute("data-color", color); + button.title = name; + button.setAttribute("data-l10n-id", ColorPicker.#l10nColor[name]); + const swatch = document.createElement("span"); + button.append(swatch); + swatch.className = "swatch"; + swatch.style.backgroundColor = color; + button.ariaSelected = color === this.#defaultColor; + button.addEventListener("click", this.#colorSelect.bind(this, color), { + signal + }); + div.append(button); + } + div.addEventListener("keydown", this.#keyDown.bind(this), { + signal + }); + return div; + } + #colorSelect(color, event) { + event.stopPropagation(); + this.#eventBus.dispatch("switchannotationeditorparams", { + source: this, + type: AnnotationEditorParamsType.HIGHLIGHT_COLOR, + value: color + }); + this.updateColor(color); + } + _colorSelectFromKeyboard(event) { + if (event.target === this.#button) { + this.#openDropdown(event); + return; + } + const color = event.target.getAttribute("data-color"); + if (!color) { + return; + } + this.#colorSelect(color, event); + } + _moveToNext(event) { + if (!this.#isDropdownVisible) { + this.#openDropdown(event); + return; + } + if (event.target === this.#button) { + this.#dropdown.firstChild?.focus(); + return; + } + event.target.nextSibling?.focus(); + } + _moveToPrevious(event) { + if (event.target === this.#dropdown?.firstChild || event.target === this.#button) { + if (this.#isDropdownVisible) { + this._hideDropdownFromKeyboard(); + } + return; + } + if (!this.#isDropdownVisible) { + this.#openDropdown(event); + } + event.target.previousSibling?.focus(); + } + _moveToBeginning(event) { + if (!this.#isDropdownVisible) { + this.#openDropdown(event); + return; + } + this.#dropdown.firstChild?.focus(); + } + _moveToEnd(event) { + if (!this.#isDropdownVisible) { + this.#openDropdown(event); + return; + } + this.#dropdown.lastChild?.focus(); + } + #keyDown(event) { + ColorPicker._keyboardManager.exec(this, event); + } + #openDropdown(event) { + if (this.#isDropdownVisible) { + this.hideDropdown(); + return; + } + this.#dropdownWasFromKeyboard = event.detail === 0; + if (!this.#openDropdownAC) { + this.#openDropdownAC = new AbortController(); + window.addEventListener("pointerdown", this.#pointerDown.bind(this), { + signal: this.#uiManager.combinedSignal(this.#openDropdownAC) + }); + } + this.#button.ariaExpanded = "true"; + if (this.#dropdown) { + this.#dropdown.classList.remove("hidden"); + return; + } + const root = this.#dropdown = this.#getDropdownRoot(); + this.#button.append(root); + } + #pointerDown(event) { + if (this.#dropdown?.contains(event.target)) { + return; + } + this.hideDropdown(); + } + hideDropdown() { + this.#dropdown?.classList.add("hidden"); + this.#button.ariaExpanded = "false"; + this.#openDropdownAC?.abort(); + this.#openDropdownAC = null; + } + get #isDropdownVisible() { + return this.#dropdown && !this.#dropdown.classList.contains("hidden"); + } + _hideDropdownFromKeyboard() { + if (this.#isMainColorPicker) { + return; + } + if (!this.#isDropdownVisible) { + this.#editor?.unselect(); + return; + } + this.hideDropdown(); + this.#button.focus({ + preventScroll: true, + focusVisible: this.#dropdownWasFromKeyboard + }); + } + updateColor(color) { + if (this.#buttonSwatch) { + this.#buttonSwatch.style.backgroundColor = color; + } + if (!this.#dropdown) { + return; + } + const i = this.#uiManager.highlightColors.values(); + for (const child of this.#dropdown.children) { + child.ariaSelected = i.next().value === color.toUpperCase(); + } + } + destroy() { + this.#button?.remove(); + this.#button = null; + this.#buttonSwatch = null; + this.#dropdown?.remove(); + this.#dropdown = null; + } +} +class BasicColorPicker { + #input = null; + #editor = null; + #uiManager = null; + static #l10nColor = null; + constructor(editor) { + this.#editor = editor; + this.#uiManager = editor._uiManager; + BasicColorPicker.#l10nColor ||= Object.freeze({ + freetext: "pdfjs-editor-color-picker-free-text-input", + ink: "pdfjs-editor-color-picker-ink-input" + }); + } + renderButton() { + if (this.#input) { + return this.#input; + } + const { + editorType, + colorType, + color + } = this.#editor; + const input = this.#input = document.createElement("input"); + input.type = "color"; + input.value = color || "#000000"; + input.className = "basicColorPicker"; + input.tabIndex = 0; + input.setAttribute("data-l10n-id", BasicColorPicker.#l10nColor[editorType]); + input.addEventListener("input", () => { + this.#uiManager.updateParams(colorType, input.value); + }, { + signal: this.#uiManager._signal + }); + return input; + } + update(value) { + if (!this.#input) { + return; + } + this.#input.value = value; + } + destroy() { + this.#input?.remove(); + this.#input = null; + } + hideDropdown() {} +} + +;// ./src/shared/scripting_utils.js +function makeColorComp(n) { + return Math.floor(Math.max(0, Math.min(1, n)) * 255).toString(16).padStart(2, "0"); +} +function scaleAndClamp(x) { + return Math.max(0, Math.min(255, 255 * x)); +} +class ColorConverters { + static CMYK_G([c, y, m, k]) { + return ["G", 1 - Math.min(1, 0.3 * c + 0.59 * m + 0.11 * y + k)]; + } + static G_CMYK([g]) { + return ["CMYK", 0, 0, 0, 1 - g]; + } + static G_RGB([g]) { + return ["RGB", g, g, g]; + } + static G_rgb([g]) { + g = scaleAndClamp(g); + return [g, g, g]; + } + static G_HTML([g]) { + const G = makeColorComp(g); + return `#${G}${G}${G}`; + } + static RGB_G([r, g, b]) { + return ["G", 0.3 * r + 0.59 * g + 0.11 * b]; + } + static RGB_rgb(color) { + return color.map(scaleAndClamp); + } + static RGB_HTML(color) { + return `#${color.map(makeColorComp).join("")}`; + } + static T_HTML() { + return "#00000000"; + } + static T_rgb() { + return [null]; + } + static CMYK_RGB([c, y, m, k]) { + return ["RGB", 1 - Math.min(1, c + k), 1 - Math.min(1, m + k), 1 - Math.min(1, y + k)]; + } + static CMYK_rgb([c, y, m, k]) { + return [scaleAndClamp(1 - Math.min(1, c + k)), scaleAndClamp(1 - Math.min(1, m + k)), scaleAndClamp(1 - Math.min(1, y + k))]; + } + static CMYK_HTML(components) { + const rgb = this.CMYK_RGB(components).slice(1); + return this.RGB_HTML(rgb); + } + static RGB_CMYK([r, g, b]) { + const c = 1 - r; + const m = 1 - g; + const y = 1 - b; + const k = Math.min(c, m, y); + return ["CMYK", c, m, y, k]; + } +} +const DateFormats = (/* unused pure expression or super */ null && (["m/d", "m/d/yy", "mm/dd/yy", "mm/yy", "d-mmm", "d-mmm-yy", "dd-mmm-yy", "yy-mm-dd", "mmm-yy", "mmmm-yy", "mmm d, yyyy", "mmmm d, yyyy", "m/d/yy h:MM tt", "m/d/yy HH:MM"])); +const TimeFormats = (/* unused pure expression or super */ null && (["HH:MM", "h:MM tt", "HH:MM:ss", "h:MM:ss tt"])); + +;// ./src/display/svg_factory.js + + +class BaseSVGFactory { + create(width, height, skipDimensions = false) { + if (width <= 0 || height <= 0) { + throw new Error("Invalid SVG dimensions"); + } + const svg = this._createSVG("svg:svg"); + svg.setAttribute("version", "1.1"); + if (!skipDimensions) { + svg.setAttribute("width", `${width}px`); + svg.setAttribute("height", `${height}px`); + } + svg.setAttribute("preserveAspectRatio", "none"); + svg.setAttribute("viewBox", `0 0 ${width} ${height}`); + return svg; + } + createElement(type) { + if (typeof type !== "string") { + throw new Error("Invalid SVG element type"); + } + return this._createSVG(type); + } + _createSVG(type) { + unreachable("Abstract method `_createSVG` called."); + } +} +class DOMSVGFactory extends BaseSVGFactory { + _createSVG(type) { + return document.createElementNS(SVG_NS, type); + } +} + +;// ./src/display/annotation_layer.js + + + + + +const annotation_layer_DEFAULT_FONT_SIZE = 9; +const GetElementsByNameSet = new WeakSet(); +const TIMEZONE_OFFSET = new Date().getTimezoneOffset() * 60 * 1000; +class AnnotationElementFactory { + static create(parameters) { + const subtype = parameters.data.annotationType; + switch (subtype) { + case AnnotationType.LINK: + return new LinkAnnotationElement(parameters); + case AnnotationType.TEXT: + return new TextAnnotationElement(parameters); + case AnnotationType.WIDGET: + const fieldType = parameters.data.fieldType; + switch (fieldType) { + case "Tx": + return new TextWidgetAnnotationElement(parameters); + case "Btn": + if (parameters.data.radioButton) { + return new RadioButtonWidgetAnnotationElement(parameters); + } else if (parameters.data.checkBox) { + return new CheckboxWidgetAnnotationElement(parameters); + } + return new PushButtonWidgetAnnotationElement(parameters); + case "Ch": + return new ChoiceWidgetAnnotationElement(parameters); + case "Sig": + return new SignatureWidgetAnnotationElement(parameters); + } + return new WidgetAnnotationElement(parameters); + case AnnotationType.POPUP: + return new PopupAnnotationElement(parameters); + case AnnotationType.FREETEXT: + return new FreeTextAnnotationElement(parameters); + case AnnotationType.LINE: + return new LineAnnotationElement(parameters); + case AnnotationType.SQUARE: + return new SquareAnnotationElement(parameters); + case AnnotationType.CIRCLE: + return new CircleAnnotationElement(parameters); + case AnnotationType.POLYLINE: + return new PolylineAnnotationElement(parameters); + case AnnotationType.CARET: + return new CaretAnnotationElement(parameters); + case AnnotationType.INK: + return new InkAnnotationElement(parameters); + case AnnotationType.POLYGON: + return new PolygonAnnotationElement(parameters); + case AnnotationType.HIGHLIGHT: + return new HighlightAnnotationElement(parameters); + case AnnotationType.UNDERLINE: + return new UnderlineAnnotationElement(parameters); + case AnnotationType.SQUIGGLY: + return new SquigglyAnnotationElement(parameters); + case AnnotationType.STRIKEOUT: + return new StrikeOutAnnotationElement(parameters); + case AnnotationType.STAMP: + return new StampAnnotationElement(parameters); + case AnnotationType.FILEATTACHMENT: + return new FileAttachmentAnnotationElement(parameters); + default: + return new AnnotationElement(parameters); + } + } +} +class AnnotationElement { + #updates = null; + #hasBorder = false; + #popupElement = null; + constructor(parameters, { + isRenderable = false, + ignoreBorder = false, + createQuadrilaterals = false + } = {}) { + this.isRenderable = isRenderable; + this.data = parameters.data; + this.layer = parameters.layer; + this.linkService = parameters.linkService; + this.downloadManager = parameters.downloadManager; + this.imageResourcesPath = parameters.imageResourcesPath; + this.renderForms = parameters.renderForms; + this.svgFactory = parameters.svgFactory; + this.annotationStorage = parameters.annotationStorage; + this.enableComment = parameters.enableComment; + this.enableScripting = parameters.enableScripting; + this.hasJSActions = parameters.hasJSActions; + this._fieldObjects = parameters.fieldObjects; + this.parent = parameters.parent; + this.hasOwnCommentButton = false; + if (isRenderable) { + this.contentElement = this.container = this._createContainer(ignoreBorder); + } + if (createQuadrilaterals) { + this._createQuadrilaterals(); + } + } + static _hasPopupData({ + contentsObj, + richText + }) { + return !!(contentsObj?.str || richText?.str); + } + get _isEditable() { + return this.data.isEditable; + } + get hasPopupData() { + return AnnotationElement._hasPopupData(this.data) || this.enableComment && !!this.commentText; + } + get commentData() { + const { + data + } = this; + const editor = this.annotationStorage?.getEditor(data.id); + if (editor) { + return editor.getData(); + } + return data; + } + get hasCommentButton() { + return this.enableComment && this.hasPopupElement; + } + get commentButtonPosition() { + const editor = this.annotationStorage?.getEditor(this.data.id); + if (editor) { + return editor.commentButtonPositionInPage; + } + const { + quadPoints, + inkLists, + rect + } = this.data; + let maxX = -Infinity; + let maxY = -Infinity; + if (quadPoints?.length >= 8) { + for (let i = 0; i < quadPoints.length; i += 8) { + if (quadPoints[i + 1] > maxY) { + maxY = quadPoints[i + 1]; + maxX = quadPoints[i + 2]; + } else if (quadPoints[i + 1] === maxY) { + maxX = Math.max(maxX, quadPoints[i + 2]); + } + } + return [maxX, maxY]; + } + if (inkLists?.length >= 1) { + for (const inkList of inkLists) { + for (let i = 0, ii = inkList.length; i < ii; i += 2) { + if (inkList[i + 1] > maxY) { + maxY = inkList[i + 1]; + maxX = inkList[i]; + } else if (inkList[i + 1] === maxY) { + maxX = Math.max(maxX, inkList[i]); + } + } + } + if (maxX !== Infinity) { + return [maxX, maxY]; + } + } + if (rect) { + return [rect[2], rect[3]]; + } + return null; + } + _normalizePoint(point) { + const { + page: { + view + }, + viewport: { + rawDims: { + pageWidth, + pageHeight, + pageX, + pageY + } + } + } = this.parent; + point[1] = view[3] - point[1] + view[1]; + point[0] = 100 * (point[0] - pageX) / pageWidth; + point[1] = 100 * (point[1] - pageY) / pageHeight; + return point; + } + get commentText() { + const { + data + } = this; + return this.annotationStorage.getRawValue(`${AnnotationEditorPrefix}${data.id}`)?.popup?.contents || data.contentsObj?.str || ""; + } + set commentText(text) { + const { + data + } = this; + const popup = { + deleted: !text, + contents: text || "" + }; + if (!this.annotationStorage.updateEditor(data.id, { + popup + })) { + this.annotationStorage.setValue(`${AnnotationEditorPrefix}${data.id}`, { + id: data.id, + annotationType: data.annotationType, + pageIndex: this.parent.page._pageIndex, + popup, + popupRef: data.popupRef, + modificationDate: new Date() + }); + } + if (!text) { + this.removePopup(); + } + } + removePopup() { + (this.#popupElement?.popup || this.popup)?.remove(); + this.#popupElement = this.popup = null; + } + updateEdited(params) { + if (!this.container) { + return; + } + if (params.rect) { + this.#updates ||= { + rect: this.data.rect.slice(0) + }; + } + const { + rect, + popup: newPopup + } = params; + if (rect) { + this.#setRectEdited(rect); + } + let popup = this.#popupElement?.popup || this.popup; + if (!popup && newPopup?.text) { + this._createPopup(newPopup); + popup = this.#popupElement.popup; + } + if (!popup) { + return; + } + popup.updateEdited(params); + if (newPopup?.deleted) { + popup.remove(); + this.#popupElement = null; + this.popup = null; + } + } + resetEdited() { + if (!this.#updates) { + return; + } + this.#setRectEdited(this.#updates.rect); + this.#popupElement?.popup.resetEdited(); + this.#updates = null; + } + #setRectEdited(rect) { + const { + container: { + style + }, + data: { + rect: currentRect, + rotation + }, + parent: { + viewport: { + rawDims: { + pageWidth, + pageHeight, + pageX, + pageY + } + } + } + } = this; + currentRect?.splice(0, 4, ...rect); + style.left = `${100 * (rect[0] - pageX) / pageWidth}%`; + style.top = `${100 * (pageHeight - rect[3] + pageY) / pageHeight}%`; + if (rotation === 0) { + style.width = `${100 * (rect[2] - rect[0]) / pageWidth}%`; + style.height = `${100 * (rect[3] - rect[1]) / pageHeight}%`; + } else { + this.setRotation(rotation); + } + } + _createContainer(ignoreBorder) { + const { + data, + parent: { + page, + viewport + } + } = this; + const container = document.createElement("section"); + container.setAttribute("data-annotation-id", data.id); + if (!(this instanceof WidgetAnnotationElement) && !(this instanceof LinkAnnotationElement)) { + container.tabIndex = 0; + } + const { + style + } = container; + style.zIndex = this.parent.zIndex; + this.parent.zIndex += 2; + if (data.alternativeText) { + container.title = data.alternativeText; + } + if (data.noRotate) { + container.classList.add("norotate"); + } + if (!data.rect || this instanceof PopupAnnotationElement) { + const { + rotation + } = data; + if (!data.hasOwnCanvas && rotation !== 0) { + this.setRotation(rotation, container); + } + return container; + } + const { + width, + height + } = this; + if (!ignoreBorder && data.borderStyle.width > 0) { + style.borderWidth = `${data.borderStyle.width}px`; + const horizontalRadius = data.borderStyle.horizontalCornerRadius; + const verticalRadius = data.borderStyle.verticalCornerRadius; + if (horizontalRadius > 0 || verticalRadius > 0) { + const radius = `calc(${horizontalRadius}px * var(--total-scale-factor)) / calc(${verticalRadius}px * var(--total-scale-factor))`; + style.borderRadius = radius; + } else if (this instanceof RadioButtonWidgetAnnotationElement) { + const radius = `calc(${width}px * var(--total-scale-factor)) / calc(${height}px * var(--total-scale-factor))`; + style.borderRadius = radius; + } + switch (data.borderStyle.style) { + case AnnotationBorderStyleType.SOLID: + style.borderStyle = "solid"; + break; + case AnnotationBorderStyleType.DASHED: + style.borderStyle = "dashed"; + break; + case AnnotationBorderStyleType.BEVELED: + warn("Unimplemented border style: beveled"); + break; + case AnnotationBorderStyleType.INSET: + warn("Unimplemented border style: inset"); + break; + case AnnotationBorderStyleType.UNDERLINE: + style.borderBottomStyle = "solid"; + break; + default: + break; + } + const borderColor = data.borderColor || null; + if (borderColor) { + this.#hasBorder = true; + style.borderColor = Util.makeHexColor(borderColor[0] | 0, borderColor[1] | 0, borderColor[2] | 0); + } else { + style.borderWidth = 0; + } + } + const rect = Util.normalizeRect([data.rect[0], page.view[3] - data.rect[1] + page.view[1], data.rect[2], page.view[3] - data.rect[3] + page.view[1]]); + const { + pageWidth, + pageHeight, + pageX, + pageY + } = viewport.rawDims; + style.left = `${100 * (rect[0] - pageX) / pageWidth}%`; + style.top = `${100 * (rect[1] - pageY) / pageHeight}%`; + const { + rotation + } = data; + if (data.hasOwnCanvas || rotation === 0) { + style.width = `${100 * width / pageWidth}%`; + style.height = `${100 * height / pageHeight}%`; + } else { + this.setRotation(rotation, container); + } + return container; + } + setRotation(angle, container = this.container) { + if (!this.data.rect) { + return; + } + const { + pageWidth, + pageHeight + } = this.parent.viewport.rawDims; + let { + width, + height + } = this; + if (angle % 180 !== 0) { + [width, height] = [height, width]; + } + container.style.width = `${100 * width / pageWidth}%`; + container.style.height = `${100 * height / pageHeight}%`; + container.setAttribute("data-main-rotation", (360 - angle) % 360); + } + get _commonActions() { + const setColor = (jsName, styleName, event) => { + const color = event.detail[jsName]; + const colorType = color[0]; + const colorArray = color.slice(1); + event.target.style[styleName] = ColorConverters[`${colorType}_HTML`](colorArray); + this.annotationStorage.setValue(this.data.id, { + [styleName]: ColorConverters[`${colorType}_rgb`](colorArray) + }); + }; + return shadow(this, "_commonActions", { + display: event => { + const { + display + } = event.detail; + const hidden = display % 2 === 1; + this.container.style.visibility = hidden ? "hidden" : "visible"; + this.annotationStorage.setValue(this.data.id, { + noView: hidden, + noPrint: display === 1 || display === 2 + }); + }, + print: event => { + this.annotationStorage.setValue(this.data.id, { + noPrint: !event.detail.print + }); + }, + hidden: event => { + const { + hidden + } = event.detail; + this.container.style.visibility = hidden ? "hidden" : "visible"; + this.annotationStorage.setValue(this.data.id, { + noPrint: hidden, + noView: hidden + }); + }, + focus: event => { + setTimeout(() => event.target.focus({ + preventScroll: false + }), 0); + }, + userName: event => { + event.target.title = event.detail.userName; + }, + readonly: event => { + event.target.disabled = event.detail.readonly; + }, + required: event => { + this._setRequired(event.target, event.detail.required); + }, + bgColor: event => { + setColor("bgColor", "backgroundColor", event); + }, + fillColor: event => { + setColor("fillColor", "backgroundColor", event); + }, + fgColor: event => { + setColor("fgColor", "color", event); + }, + textColor: event => { + setColor("textColor", "color", event); + }, + borderColor: event => { + setColor("borderColor", "borderColor", event); + }, + strokeColor: event => { + setColor("strokeColor", "borderColor", event); + }, + rotation: event => { + const angle = event.detail.rotation; + this.setRotation(angle); + this.annotationStorage.setValue(this.data.id, { + rotation: angle + }); + } + }); + } + _dispatchEventFromSandbox(actions, jsEvent) { + const commonActions = this._commonActions; + for (const name of Object.keys(jsEvent.detail)) { + const action = actions[name] || commonActions[name]; + action?.(jsEvent); + } + } + _setDefaultPropertiesFromJS(element) { + if (!this.enableScripting) { + return; + } + const storedData = this.annotationStorage.getRawValue(this.data.id); + if (!storedData) { + return; + } + const commonActions = this._commonActions; + for (const [actionName, detail] of Object.entries(storedData)) { + const action = commonActions[actionName]; + if (action) { + const eventProxy = { + detail: { + [actionName]: detail + }, + target: element + }; + action(eventProxy); + delete storedData[actionName]; + } + } + } + _createQuadrilaterals() { + if (!this.container) { + return; + } + const { + quadPoints + } = this.data; + if (!quadPoints) { + return; + } + const [rectBlX, rectBlY, rectTrX, rectTrY] = this.data.rect.map(x => Math.fround(x)); + if (quadPoints.length === 8) { + const [trX, trY, blX, blY] = quadPoints.subarray(2, 6); + if (rectTrX === trX && rectTrY === trY && rectBlX === blX && rectBlY === blY) { + return; + } + } + const { + style + } = this.container; + let svgBuffer; + if (this.#hasBorder) { + const { + borderColor, + borderWidth + } = style; + style.borderWidth = 0; + svgBuffer = ["url('data:image/svg+xml;utf8,", ``, ``]; + this.container.classList.add("hasBorder"); + } + const width = rectTrX - rectBlX; + const height = rectTrY - rectBlY; + const { + svgFactory + } = this; + const svg = svgFactory.createElement("svg"); + svg.classList.add("quadrilateralsContainer"); + svg.setAttribute("width", 0); + svg.setAttribute("height", 0); + svg.role = "none"; + const defs = svgFactory.createElement("defs"); + svg.append(defs); + const clipPath = svgFactory.createElement("clipPath"); + const id = `clippath_${this.data.id}`; + clipPath.setAttribute("id", id); + clipPath.setAttribute("clipPathUnits", "objectBoundingBox"); + defs.append(clipPath); + for (let i = 2, ii = quadPoints.length; i < ii; i += 8) { + const trX = quadPoints[i]; + const trY = quadPoints[i + 1]; + const blX = quadPoints[i + 2]; + const blY = quadPoints[i + 3]; + const rect = svgFactory.createElement("rect"); + const x = (blX - rectBlX) / width; + const y = (rectTrY - trY) / height; + const rectWidth = (trX - blX) / width; + const rectHeight = (trY - blY) / height; + rect.setAttribute("x", x); + rect.setAttribute("y", y); + rect.setAttribute("width", rectWidth); + rect.setAttribute("height", rectHeight); + clipPath.append(rect); + svgBuffer?.push(``); + } + if (this.#hasBorder) { + svgBuffer.push(`')`); + style.backgroundImage = svgBuffer.join(""); + } + this.container.append(svg); + this.container.style.clipPath = `url(#${id})`; + } + _createPopup(popupData = null) { + const { + data + } = this; + let contentsObj, modificationDate; + if (popupData) { + contentsObj = { + str: popupData.text + }; + modificationDate = popupData.date; + } else { + contentsObj = data.contentsObj; + modificationDate = data.modificationDate; + } + this.#popupElement = new PopupAnnotationElement({ + data: { + color: data.color, + titleObj: data.titleObj, + modificationDate, + contentsObj, + richText: data.richText, + parentRect: data.rect, + borderStyle: 0, + id: `popup_${data.id}`, + rotation: data.rotation, + noRotate: true + }, + linkService: this.linkService, + parent: this.parent, + elements: [this] + }); + } + get hasPopupElement() { + return !!(this.#popupElement || this.popup || this.data.popupRef); + } + get extraPopupElement() { + return this.#popupElement; + } + render() { + unreachable("Abstract method `AnnotationElement.render` called"); + } + _getElementsByName(name, skipId = null) { + const fields = []; + if (this._fieldObjects) { + const fieldObj = this._fieldObjects[name]; + if (fieldObj) { + for (const { + page, + id, + exportValues + } of fieldObj) { + if (page === -1) { + continue; + } + if (id === skipId) { + continue; + } + const exportValue = typeof exportValues === "string" ? exportValues : null; + const domElement = document.querySelector(`[data-element-id="${id}"]`); + if (domElement && !GetElementsByNameSet.has(domElement)) { + warn(`_getElementsByName - element not allowed: ${id}`); + continue; + } + fields.push({ + id, + exportValue, + domElement + }); + } + } + return fields; + } + for (const domElement of document.getElementsByName(name)) { + const { + exportValue + } = domElement; + const id = domElement.getAttribute("data-element-id"); + if (id === skipId) { + continue; + } + if (!GetElementsByNameSet.has(domElement)) { + continue; + } + fields.push({ + id, + exportValue, + domElement + }); + } + return fields; + } + show() { + if (this.container) { + this.container.hidden = false; + } + this.popup?.maybeShow(); + } + hide() { + if (this.container) { + this.container.hidden = true; + } + this.popup?.forceHide(); + } + getElementsToTriggerPopup() { + return this.container; + } + addHighlightArea() { + const triggers = this.getElementsToTriggerPopup(); + if (Array.isArray(triggers)) { + for (const element of triggers) { + element.classList.add("highlightArea"); + } + } else { + triggers.classList.add("highlightArea"); + } + } + _editOnDoubleClick() { + if (!this._isEditable) { + return; + } + const { + annotationEditorType: mode, + data: { + id: editId + } + } = this; + this.container.addEventListener("dblclick", () => { + this.linkService.eventBus?.dispatch("switchannotationeditormode", { + source: this, + mode, + editId, + mustEnterInEditMode: true + }); + }); + } + get width() { + return this.data.rect[2] - this.data.rect[0]; + } + get height() { + return this.data.rect[3] - this.data.rect[1]; + } +} +class EditorAnnotationElement extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + this.editor = parameters.editor; + } + render() { + this.container.className = "editorAnnotation"; + return this.container; + } + createOrUpdatePopup() { + const { + editor + } = this; + if (!editor.hasComment) { + return; + } + this._createPopup(editor.comment); + } + get hasCommentButton() { + return this.enableComment && this.editor.hasComment; + } + get commentButtonPosition() { + return this.editor.commentButtonPositionInPage; + } + get commentText() { + return this.editor.comment.text; + } + set commentText(text) { + this.editor.comment = text; + if (!text) { + this.removePopup(); + } + } + get commentData() { + return this.editor.getData(); + } + remove() { + this.parent.removeAnnotation(this.data.id); + this.container.remove(); + this.container = null; + this.removePopup(); + } +} +class LinkAnnotationElement extends AnnotationElement { + constructor(parameters, options = null) { + super(parameters, { + isRenderable: true, + ignoreBorder: !!options?.ignoreBorder, + createQuadrilaterals: true + }); + this.isTooltipOnly = parameters.data.isTooltipOnly; + } + render() { + const { + data, + linkService + } = this; + const link = document.createElement("a"); + link.setAttribute("data-element-id", data.id); + let isBound = false; + if (data.url) { + linkService.addLinkAttributes(link, data.url, data.newWindow); + isBound = true; + } else if (data.action) { + this._bindNamedAction(link, data.action, data.overlaidText); + isBound = true; + } else if (data.attachment) { + this.#bindAttachment(link, data.attachment, data.overlaidText, data.attachmentDest); + isBound = true; + } else if (data.setOCGState) { + this.#bindSetOCGState(link, data.setOCGState, data.overlaidText); + isBound = true; + } else if (data.dest) { + this._bindLink(link, data.dest, data.overlaidText); + isBound = true; + } else { + if (data.actions && (data.actions.Action || data.actions["Mouse Up"] || data.actions["Mouse Down"]) && this.enableScripting && this.hasJSActions) { + this._bindJSAction(link, data); + isBound = true; + } + if (data.resetForm) { + this._bindResetFormAction(link, data.resetForm); + isBound = true; + } else if (this.isTooltipOnly && !isBound) { + this._bindLink(link, ""); + isBound = true; + } + } + this.container.classList.add("linkAnnotation"); + if (isBound) { + this.contentElement = link; + this.container.append(link); + } + return this.container; + } + #setInternalLink() { + this.container.setAttribute("data-internal-link", ""); + } + _bindLink(link, destination, overlaidText = "") { + link.href = this.linkService.getDestinationHash(destination); + link.onclick = () => { + if (destination) { + this.linkService.goToDestination(destination); + } + return false; + }; + if (destination || destination === "") { + this.#setInternalLink(); + } + if (overlaidText) { + link.title = overlaidText; + } + } + _bindNamedAction(link, action, overlaidText = "") { + link.href = this.linkService.getAnchorUrl(""); + link.onclick = () => { + this.linkService.executeNamedAction(action); + return false; + }; + if (overlaidText) { + link.title = overlaidText; + } + this.#setInternalLink(); + } + #bindAttachment(link, attachment, overlaidText = "", dest = null) { + link.href = this.linkService.getAnchorUrl(""); + if (attachment.description) { + link.title = attachment.description; + } else if (overlaidText) { + link.title = overlaidText; + } + link.onclick = () => { + this.downloadManager?.openOrDownloadData(attachment.content, attachment.filename, dest); + return false; + }; + this.#setInternalLink(); + } + #bindSetOCGState(link, action, overlaidText = "") { + link.href = this.linkService.getAnchorUrl(""); + link.onclick = () => { + this.linkService.executeSetOCGState(action); + return false; + }; + if (overlaidText) { + link.title = overlaidText; + } + this.#setInternalLink(); + } + _bindJSAction(link, data) { + link.href = this.linkService.getAnchorUrl(""); + const map = new Map([["Action", "onclick"], ["Mouse Up", "onmouseup"], ["Mouse Down", "onmousedown"]]); + for (const name of Object.keys(data.actions)) { + const jsName = map.get(name); + if (!jsName) { + continue; + } + link[jsName] = () => { + this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id: data.id, + name + } + }); + return false; + }; + } + if (data.overlaidText) { + link.title = data.overlaidText; + } + if (!link.onclick) { + link.onclick = () => false; + } + this.#setInternalLink(); + } + _bindResetFormAction(link, resetForm) { + const otherClickAction = link.onclick; + if (!otherClickAction) { + link.href = this.linkService.getAnchorUrl(""); + } + this.#setInternalLink(); + if (!this._fieldObjects) { + warn(`_bindResetFormAction - "resetForm" action not supported, ` + "ensure that the `fieldObjects` parameter is provided."); + if (!otherClickAction) { + link.onclick = () => false; + } + return; + } + link.onclick = () => { + otherClickAction?.(); + const { + fields: resetFormFields, + refs: resetFormRefs, + include + } = resetForm; + const allFields = []; + if (resetFormFields.length !== 0 || resetFormRefs.length !== 0) { + const fieldIds = new Set(resetFormRefs); + for (const fieldName of resetFormFields) { + const fields = this._fieldObjects[fieldName] || []; + for (const { + id + } of fields) { + fieldIds.add(id); + } + } + for (const fields of Object.values(this._fieldObjects)) { + for (const field of fields) { + if (fieldIds.has(field.id) === include) { + allFields.push(field); + } + } + } + } else { + for (const fields of Object.values(this._fieldObjects)) { + allFields.push(...fields); + } + } + const storage = this.annotationStorage; + const allIds = []; + for (const field of allFields) { + const { + id + } = field; + allIds.push(id); + switch (field.type) { + case "text": + { + const value = field.defaultValue || ""; + storage.setValue(id, { + value + }); + break; + } + case "checkbox": + case "radiobutton": + { + const value = field.defaultValue === field.exportValues; + storage.setValue(id, { + value + }); + break; + } + case "combobox": + case "listbox": + { + const value = field.defaultValue || ""; + storage.setValue(id, { + value + }); + break; + } + default: + continue; + } + const domElement = document.querySelector(`[data-element-id="${id}"]`); + if (!domElement) { + continue; + } else if (!GetElementsByNameSet.has(domElement)) { + warn(`_bindResetFormAction - element not allowed: ${id}`); + continue; + } + domElement.dispatchEvent(new Event("resetform")); + } + if (this.enableScripting) { + this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id: "app", + ids: allIds, + name: "ResetForm" + } + }); + } + return false; + }; + } +} +class TextAnnotationElement extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true + }); + } + render() { + this.container.classList.add("textAnnotation"); + const image = document.createElement("img"); + image.src = this.imageResourcesPath + "annotation-" + this.data.name.toLowerCase() + ".svg"; + image.setAttribute("data-l10n-id", "pdfjs-text-annotation-type"); + image.setAttribute("data-l10n-args", JSON.stringify({ + type: this.data.name + })); + if (!this.data.popupRef && this.hasPopupData) { + this.hasOwnCommentButton = true; + this._createPopup(); + } + this.container.append(image); + return this.container; + } +} +class WidgetAnnotationElement extends AnnotationElement { + render() { + return this.container; + } + showElementAndHideCanvas(element) { + if (this.data.hasOwnCanvas) { + if (element.previousSibling?.nodeName === "CANVAS") { + element.previousSibling.hidden = true; + } + element.hidden = false; + } + } + _getKeyModifier(event) { + return util_FeatureTest.platform.isMac ? event.metaKey : event.ctrlKey; + } + _setEventListener(element, elementData, baseName, eventName, valueGetter) { + if (baseName.includes("mouse")) { + element.addEventListener(baseName, event => { + this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id: this.data.id, + name: eventName, + value: valueGetter(event), + shift: event.shiftKey, + modifier: this._getKeyModifier(event) + } + }); + }); + } else { + element.addEventListener(baseName, event => { + if (baseName === "blur") { + if (!elementData.focused || !event.relatedTarget) { + return; + } + elementData.focused = false; + } else if (baseName === "focus") { + if (elementData.focused) { + return; + } + elementData.focused = true; + } + if (!valueGetter) { + return; + } + this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id: this.data.id, + name: eventName, + value: valueGetter(event) + } + }); + }); + } + } + _setEventListeners(element, elementData, names, getter) { + for (const [baseName, eventName] of names) { + if (eventName === "Action" || this.data.actions?.[eventName]) { + if (eventName === "Focus" || eventName === "Blur") { + elementData ||= { + focused: false + }; + } + this._setEventListener(element, elementData, baseName, eventName, getter); + if (eventName === "Focus" && !this.data.actions?.Blur) { + this._setEventListener(element, elementData, "blur", "Blur", null); + } else if (eventName === "Blur" && !this.data.actions?.Focus) { + this._setEventListener(element, elementData, "focus", "Focus", null); + } + } + } + } + _setBackgroundColor(element) { + const color = this.data.backgroundColor || null; + element.style.backgroundColor = color === null ? "transparent" : Util.makeHexColor(color[0], color[1], color[2]); + } + _setTextStyle(element) { + const TEXT_ALIGNMENT = ["left", "center", "right"]; + const { + fontColor + } = this.data.defaultAppearanceData; + const fontSize = this.data.defaultAppearanceData.fontSize || annotation_layer_DEFAULT_FONT_SIZE; + const style = element.style; + let computedFontSize; + const BORDER_SIZE = 2; + const roundToOneDecimal = x => Math.round(10 * x) / 10; + if (this.data.multiLine) { + const height = Math.abs(this.data.rect[3] - this.data.rect[1] - BORDER_SIZE); + const numberOfLines = Math.round(height / (LINE_FACTOR * fontSize)) || 1; + const lineHeight = height / numberOfLines; + computedFontSize = Math.min(fontSize, roundToOneDecimal(lineHeight / LINE_FACTOR)); + } else { + const height = Math.abs(this.data.rect[3] - this.data.rect[1] - BORDER_SIZE); + computedFontSize = Math.min(fontSize, roundToOneDecimal(height / LINE_FACTOR)); + } + style.fontSize = `calc(${computedFontSize}px * var(--total-scale-factor))`; + style.color = Util.makeHexColor(fontColor[0], fontColor[1], fontColor[2]); + if (this.data.textAlignment !== null) { + style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment]; + } + } + _setRequired(element, isRequired) { + if (isRequired) { + element.setAttribute("required", true); + } else { + element.removeAttribute("required"); + } + element.setAttribute("aria-required", isRequired); + } +} +class TextWidgetAnnotationElement extends WidgetAnnotationElement { + constructor(parameters) { + const isRenderable = parameters.renderForms || parameters.data.hasOwnCanvas || !parameters.data.hasAppearance && !!parameters.data.fieldValue; + super(parameters, { + isRenderable + }); + } + setPropertyOnSiblings(base, key, value, keyInStorage) { + const storage = this.annotationStorage; + for (const element of this._getElementsByName(base.name, base.id)) { + if (element.domElement) { + element.domElement[key] = value; + } + storage.setValue(element.id, { + [keyInStorage]: value + }); + } + } + render() { + const storage = this.annotationStorage; + const id = this.data.id; + this.container.classList.add("textWidgetAnnotation"); + let element = null; + if (this.renderForms) { + const storedData = storage.getValue(id, { + value: this.data.fieldValue + }); + let textContent = storedData.value || ""; + const maxLen = storage.getValue(id, { + charLimit: this.data.maxLen + }).charLimit; + if (maxLen && textContent.length > maxLen) { + textContent = textContent.slice(0, maxLen); + } + let fieldFormattedValues = storedData.formattedValue || this.data.textContent?.join("\n") || null; + if (fieldFormattedValues && this.data.comb) { + fieldFormattedValues = fieldFormattedValues.replaceAll(/\s+/g, ""); + } + const elementData = { + userValue: textContent, + formattedValue: fieldFormattedValues, + lastCommittedValue: null, + commitKey: 1, + focused: false + }; + if (this.data.multiLine) { + element = document.createElement("textarea"); + element.textContent = fieldFormattedValues ?? textContent; + if (this.data.doNotScroll) { + element.style.overflowY = "hidden"; + } + } else { + element = document.createElement("input"); + element.type = this.data.password ? "password" : "text"; + element.setAttribute("value", fieldFormattedValues ?? textContent); + if (this.data.doNotScroll) { + element.style.overflowX = "hidden"; + } + } + if (this.data.hasOwnCanvas) { + element.hidden = true; + } + GetElementsByNameSet.add(element); + this.contentElement = element; + element.setAttribute("data-element-id", id); + element.disabled = this.data.readOnly; + element.name = this.data.fieldName; + element.tabIndex = 0; + const { + datetimeFormat, + datetimeType, + timeStep + } = this.data; + const hasDateOrTime = !!datetimeType && this.enableScripting; + if (datetimeFormat) { + element.title = datetimeFormat; + } + this._setRequired(element, this.data.required); + if (maxLen) { + element.maxLength = maxLen; + } + element.addEventListener("input", event => { + storage.setValue(id, { + value: event.target.value + }); + this.setPropertyOnSiblings(element, "value", event.target.value, "value"); + elementData.formattedValue = null; + }); + element.addEventListener("resetform", event => { + const defaultValue = this.data.defaultFieldValue ?? ""; + element.value = elementData.userValue = defaultValue; + elementData.formattedValue = null; + }); + let blurListener = event => { + const { + formattedValue + } = elementData; + if (formattedValue !== null && formattedValue !== undefined) { + event.target.value = formattedValue; + } + event.target.scrollLeft = 0; + }; + if (this.enableScripting && this.hasJSActions) { + element.addEventListener("focus", event => { + if (elementData.focused) { + return; + } + const { + target + } = event; + if (hasDateOrTime) { + target.type = datetimeType; + if (timeStep) { + target.step = timeStep; + } + } + if (elementData.userValue) { + const value = elementData.userValue; + if (hasDateOrTime) { + if (datetimeType === "time") { + const date = new Date(value); + const parts = [date.getHours(), date.getMinutes(), date.getSeconds()]; + target.value = parts.map(v => v.toString().padStart(2, "0")).join(":"); + } else { + target.value = new Date(value - TIMEZONE_OFFSET).toISOString().split(datetimeType === "date" ? "T" : ".", 1)[0]; + } + } else { + target.value = value; + } + } + elementData.lastCommittedValue = target.value; + elementData.commitKey = 1; + if (!this.data.actions?.Focus) { + elementData.focused = true; + } + }); + element.addEventListener("updatefromsandbox", jsEvent => { + this.showElementAndHideCanvas(jsEvent.target); + const actions = { + value(event) { + elementData.userValue = event.detail.value ?? ""; + if (!hasDateOrTime) { + storage.setValue(id, { + value: elementData.userValue.toString() + }); + } + event.target.value = elementData.userValue; + }, + formattedValue(event) { + const { + formattedValue + } = event.detail; + elementData.formattedValue = formattedValue; + if (formattedValue !== null && formattedValue !== undefined && event.target !== document.activeElement) { + event.target.value = formattedValue; + } + const data = { + formattedValue + }; + if (hasDateOrTime) { + data.value = formattedValue; + } + storage.setValue(id, data); + }, + selRange(event) { + event.target.setSelectionRange(...event.detail.selRange); + }, + charLimit: event => { + const { + charLimit + } = event.detail; + const { + target + } = event; + if (charLimit === 0) { + target.removeAttribute("maxLength"); + return; + } + target.setAttribute("maxLength", charLimit); + let value = elementData.userValue; + if (!value || value.length <= charLimit) { + return; + } + value = value.slice(0, charLimit); + target.value = elementData.userValue = value; + storage.setValue(id, { + value + }); + this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id, + name: "Keystroke", + value, + willCommit: true, + commitKey: 1, + selStart: target.selectionStart, + selEnd: target.selectionEnd + } + }); + } + }; + this._dispatchEventFromSandbox(actions, jsEvent); + }); + element.addEventListener("keydown", event => { + elementData.commitKey = 1; + let commitKey = -1; + if (event.key === "Escape") { + commitKey = 0; + } else if (event.key === "Enter" && !this.data.multiLine) { + commitKey = 2; + } else if (event.key === "Tab") { + elementData.commitKey = 3; + } + if (commitKey === -1) { + return; + } + const { + value + } = event.target; + if (elementData.lastCommittedValue === value) { + return; + } + elementData.lastCommittedValue = value; + elementData.userValue = value; + this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id, + name: "Keystroke", + value, + willCommit: true, + commitKey, + selStart: event.target.selectionStart, + selEnd: event.target.selectionEnd + } + }); + }); + const _blurListener = blurListener; + blurListener = null; + element.addEventListener("blur", event => { + if (!elementData.focused || !event.relatedTarget) { + return; + } + if (!this.data.actions?.Blur) { + elementData.focused = false; + } + const { + target + } = event; + let { + value + } = target; + if (hasDateOrTime) { + if (value && datetimeType === "time") { + const parts = value.split(":").map(v => parseInt(v, 10)); + value = new Date(2000, 0, 1, parts[0], parts[1], parts[2] || 0).valueOf(); + target.step = ""; + } else { + if (!value.includes("T")) { + value = `${value}T00:00`; + } + value = new Date(value).valueOf(); + } + target.type = "text"; + } + elementData.userValue = value; + if (elementData.lastCommittedValue !== value) { + this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id, + name: "Keystroke", + value, + willCommit: true, + commitKey: elementData.commitKey, + selStart: event.target.selectionStart, + selEnd: event.target.selectionEnd + } + }); + } + _blurListener(event); + }); + if (this.data.actions?.Keystroke) { + element.addEventListener("beforeinput", event => { + elementData.lastCommittedValue = null; + const { + data, + target + } = event; + const { + value, + selectionStart, + selectionEnd + } = target; + let selStart = selectionStart, + selEnd = selectionEnd; + switch (event.inputType) { + case "deleteWordBackward": + { + const match = value.substring(0, selectionStart).match(/\w*[^\w]*$/); + if (match) { + selStart -= match[0].length; + } + break; + } + case "deleteWordForward": + { + const match = value.substring(selectionStart).match(/^[^\w]*\w*/); + if (match) { + selEnd += match[0].length; + } + break; + } + case "deleteContentBackward": + if (selectionStart === selectionEnd) { + selStart -= 1; + } + break; + case "deleteContentForward": + if (selectionStart === selectionEnd) { + selEnd += 1; + } + break; + } + event.preventDefault(); + this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id, + name: "Keystroke", + value, + change: data || "", + willCommit: false, + selStart, + selEnd + } + }); + }); + } + this._setEventListeners(element, elementData, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], event => event.target.value); + } + if (blurListener) { + element.addEventListener("blur", blurListener); + } + if (this.data.comb) { + const fieldWidth = this.data.rect[2] - this.data.rect[0]; + const combWidth = fieldWidth / maxLen; + element.classList.add("comb"); + element.style.letterSpacing = `calc(${combWidth}px * var(--total-scale-factor) - 1ch)`; + } + } else { + element = document.createElement("div"); + element.textContent = this.data.fieldValue; + element.style.verticalAlign = "middle"; + element.style.display = "table-cell"; + if (this.data.hasOwnCanvas) { + element.hidden = true; + } + } + this._setTextStyle(element); + this._setBackgroundColor(element); + this._setDefaultPropertiesFromJS(element); + this.container.append(element); + return this.container; + } +} +class SignatureWidgetAnnotationElement extends WidgetAnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: !!parameters.data.hasOwnCanvas + }); + } +} +class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: parameters.renderForms + }); + } + render() { + const storage = this.annotationStorage; + const data = this.data; + const id = data.id; + let value = storage.getValue(id, { + value: data.exportValue === data.fieldValue + }).value; + if (typeof value === "string") { + value = value !== "Off"; + storage.setValue(id, { + value + }); + } + this.container.classList.add("buttonWidgetAnnotation", "checkBox"); + const element = document.createElement("input"); + GetElementsByNameSet.add(element); + element.setAttribute("data-element-id", id); + element.disabled = data.readOnly; + this._setRequired(element, this.data.required); + element.type = "checkbox"; + element.name = data.fieldName; + if (value) { + element.setAttribute("checked", true); + } + element.setAttribute("exportValue", data.exportValue); + element.tabIndex = 0; + element.addEventListener("change", event => { + const { + name, + checked + } = event.target; + for (const checkbox of this._getElementsByName(name, id)) { + const curChecked = checked && checkbox.exportValue === data.exportValue; + if (checkbox.domElement) { + checkbox.domElement.checked = curChecked; + } + storage.setValue(checkbox.id, { + value: curChecked + }); + } + storage.setValue(id, { + value: checked + }); + }); + element.addEventListener("resetform", event => { + const defaultValue = data.defaultFieldValue || "Off"; + event.target.checked = defaultValue === data.exportValue; + }); + if (this.enableScripting && this.hasJSActions) { + element.addEventListener("updatefromsandbox", jsEvent => { + const actions = { + value(event) { + event.target.checked = event.detail.value !== "Off"; + storage.setValue(id, { + value: event.target.checked + }); + } + }; + this._dispatchEventFromSandbox(actions, jsEvent); + }); + this._setEventListeners(element, null, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], event => event.target.checked); + } + this._setBackgroundColor(element); + this._setDefaultPropertiesFromJS(element); + this.container.append(element); + return this.container; + } +} +class RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: parameters.renderForms + }); + } + render() { + this.container.classList.add("buttonWidgetAnnotation", "radioButton"); + const storage = this.annotationStorage; + const data = this.data; + const id = data.id; + let value = storage.getValue(id, { + value: data.fieldValue === data.buttonValue + }).value; + if (typeof value === "string") { + value = value !== data.buttonValue; + storage.setValue(id, { + value + }); + } + if (value) { + for (const radio of this._getElementsByName(data.fieldName, id)) { + storage.setValue(radio.id, { + value: false + }); + } + } + const element = document.createElement("input"); + GetElementsByNameSet.add(element); + element.setAttribute("data-element-id", id); + element.disabled = data.readOnly; + this._setRequired(element, this.data.required); + element.type = "radio"; + element.name = data.fieldName; + if (value) { + element.setAttribute("checked", true); + } + element.tabIndex = 0; + element.addEventListener("change", event => { + const { + name, + checked + } = event.target; + for (const radio of this._getElementsByName(name, id)) { + storage.setValue(radio.id, { + value: false + }); + } + storage.setValue(id, { + value: checked + }); + }); + element.addEventListener("resetform", event => { + const defaultValue = data.defaultFieldValue; + event.target.checked = defaultValue !== null && defaultValue !== undefined && defaultValue === data.buttonValue; + }); + if (this.enableScripting && this.hasJSActions) { + const pdfButtonValue = data.buttonValue; + element.addEventListener("updatefromsandbox", jsEvent => { + const actions = { + value: event => { + const checked = pdfButtonValue === event.detail.value; + for (const radio of this._getElementsByName(event.target.name)) { + const curChecked = checked && radio.id === id; + if (radio.domElement) { + radio.domElement.checked = curChecked; + } + storage.setValue(radio.id, { + value: curChecked + }); + } + } + }; + this._dispatchEventFromSandbox(actions, jsEvent); + }); + this._setEventListeners(element, null, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], event => event.target.checked); + } + this._setBackgroundColor(element); + this._setDefaultPropertiesFromJS(element); + this.container.append(element); + return this.container; + } +} +class PushButtonWidgetAnnotationElement extends LinkAnnotationElement { + constructor(parameters) { + super(parameters, { + ignoreBorder: parameters.data.hasAppearance + }); + } + render() { + const container = super.render(); + container.classList.add("buttonWidgetAnnotation", "pushButton"); + const linkElement = container.lastChild; + if (this.enableScripting && this.hasJSActions && linkElement) { + this._setDefaultPropertiesFromJS(linkElement); + linkElement.addEventListener("updatefromsandbox", jsEvent => { + this._dispatchEventFromSandbox({}, jsEvent); + }); + } + return container; + } +} +class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: parameters.renderForms + }); + } + render() { + this.container.classList.add("choiceWidgetAnnotation"); + const storage = this.annotationStorage; + const id = this.data.id; + const storedData = storage.getValue(id, { + value: this.data.fieldValue + }); + const selectElement = document.createElement("select"); + GetElementsByNameSet.add(selectElement); + selectElement.setAttribute("data-element-id", id); + selectElement.disabled = this.data.readOnly; + this._setRequired(selectElement, this.data.required); + selectElement.name = this.data.fieldName; + selectElement.tabIndex = 0; + let addAnEmptyEntry = this.data.combo && this.data.options.length > 0; + if (!this.data.combo) { + selectElement.size = this.data.options.length; + if (this.data.multiSelect) { + selectElement.multiple = true; + } + } + selectElement.addEventListener("resetform", event => { + const defaultValue = this.data.defaultFieldValue; + for (const option of selectElement.options) { + option.selected = option.value === defaultValue; + } + }); + for (const option of this.data.options) { + const optionElement = document.createElement("option"); + optionElement.textContent = option.displayValue; + optionElement.value = option.exportValue; + if (storedData.value.includes(option.exportValue)) { + optionElement.setAttribute("selected", true); + addAnEmptyEntry = false; + } + selectElement.append(optionElement); + } + let removeEmptyEntry = null; + if (addAnEmptyEntry) { + const noneOptionElement = document.createElement("option"); + noneOptionElement.value = " "; + noneOptionElement.setAttribute("hidden", true); + noneOptionElement.setAttribute("selected", true); + selectElement.prepend(noneOptionElement); + removeEmptyEntry = () => { + noneOptionElement.remove(); + selectElement.removeEventListener("input", removeEmptyEntry); + removeEmptyEntry = null; + }; + selectElement.addEventListener("input", removeEmptyEntry); + } + const getValue = isExport => { + const name = isExport ? "value" : "textContent"; + const { + options, + multiple + } = selectElement; + if (!multiple) { + return options.selectedIndex === -1 ? null : options[options.selectedIndex][name]; + } + return Array.prototype.filter.call(options, option => option.selected).map(option => option[name]); + }; + let selectedValues = getValue(false); + const getItems = event => { + const options = event.target.options; + return Array.prototype.map.call(options, option => ({ + displayValue: option.textContent, + exportValue: option.value + })); + }; + if (this.enableScripting && this.hasJSActions) { + selectElement.addEventListener("updatefromsandbox", jsEvent => { + const actions = { + value(event) { + removeEmptyEntry?.(); + const value = event.detail.value; + const values = new Set(Array.isArray(value) ? value : [value]); + for (const option of selectElement.options) { + option.selected = values.has(option.value); + } + storage.setValue(id, { + value: getValue(true) + }); + selectedValues = getValue(false); + }, + multipleSelection(event) { + selectElement.multiple = true; + }, + remove(event) { + const options = selectElement.options; + const index = event.detail.remove; + options[index].selected = false; + selectElement.remove(index); + if (options.length > 0) { + const i = Array.prototype.findIndex.call(options, option => option.selected); + if (i === -1) { + options[0].selected = true; + } + } + storage.setValue(id, { + value: getValue(true), + items: getItems(event) + }); + selectedValues = getValue(false); + }, + clear(event) { + while (selectElement.length !== 0) { + selectElement.remove(0); + } + storage.setValue(id, { + value: null, + items: [] + }); + selectedValues = getValue(false); + }, + insert(event) { + const { + index, + displayValue, + exportValue + } = event.detail.insert; + const selectChild = selectElement.children[index]; + const optionElement = document.createElement("option"); + optionElement.textContent = displayValue; + optionElement.value = exportValue; + if (selectChild) { + selectChild.before(optionElement); + } else { + selectElement.append(optionElement); + } + storage.setValue(id, { + value: getValue(true), + items: getItems(event) + }); + selectedValues = getValue(false); + }, + items(event) { + const { + items + } = event.detail; + while (selectElement.length !== 0) { + selectElement.remove(0); + } + for (const item of items) { + const { + displayValue, + exportValue + } = item; + const optionElement = document.createElement("option"); + optionElement.textContent = displayValue; + optionElement.value = exportValue; + selectElement.append(optionElement); + } + if (selectElement.options.length > 0) { + selectElement.options[0].selected = true; + } + storage.setValue(id, { + value: getValue(true), + items: getItems(event) + }); + selectedValues = getValue(false); + }, + indices(event) { + const indices = new Set(event.detail.indices); + for (const option of event.target.options) { + option.selected = indices.has(option.index); + } + storage.setValue(id, { + value: getValue(true) + }); + selectedValues = getValue(false); + }, + editable(event) { + event.target.disabled = !event.detail.editable; + } + }; + this._dispatchEventFromSandbox(actions, jsEvent); + }); + selectElement.addEventListener("input", event => { + const exportValue = getValue(true); + const change = getValue(false); + storage.setValue(id, { + value: exportValue + }); + event.preventDefault(); + this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id, + name: "Keystroke", + value: selectedValues, + change, + changeEx: exportValue, + willCommit: false, + commitKey: 1, + keyDown: false + } + }); + }); + this._setEventListeners(selectElement, null, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"], ["input", "Action"], ["input", "Validate"]], event => event.target.value); + } else { + selectElement.addEventListener("input", function (event) { + storage.setValue(id, { + value: getValue(true) + }); + }); + } + if (this.data.combo) { + this._setTextStyle(selectElement); + } else {} + this._setBackgroundColor(selectElement); + this._setDefaultPropertiesFromJS(selectElement); + this.container.append(selectElement); + return this.container; + } +} +class PopupAnnotationElement extends AnnotationElement { + constructor(parameters) { + const { + data, + elements, + parent + } = parameters; + const hasCommentManager = !!parent._commentManager; + super(parameters, { + isRenderable: !hasCommentManager && AnnotationElement._hasPopupData(data) + }); + this.elements = elements; + if (hasCommentManager && AnnotationElement._hasPopupData(data)) { + const popup = this.popup = this.#createPopup(); + for (const element of elements) { + element.popup = popup; + } + } else { + this.popup = null; + } + } + #createPopup() { + return new PopupElement({ + container: this.container, + color: this.data.color, + titleObj: this.data.titleObj, + modificationDate: this.data.modificationDate || this.data.creationDate, + contentsObj: this.data.contentsObj, + richText: this.data.richText, + rect: this.data.rect, + parentRect: this.data.parentRect || null, + parent: this.parent, + elements: this.elements, + open: this.data.open, + commentManager: this.parent._commentManager + }); + } + render() { + const { + container + } = this; + container.classList.add("popupAnnotation"); + container.role = "comment"; + const popup = this.popup = this.#createPopup(); + const elementIds = []; + for (const element of this.elements) { + element.popup = popup; + element.container.ariaHasPopup = "dialog"; + elementIds.push(element.data.id); + element.addHighlightArea(); + } + this.container.setAttribute("aria-controls", elementIds.map(id => `${AnnotationPrefix}${id}`).join(",")); + return this.container; + } +} +class PopupElement { + #commentManager = null; + #boundKeyDown = this.#keyDown.bind(this); + #boundHide = this.#hide.bind(this); + #boundShow = this.#show.bind(this); + #boundToggle = this.#toggle.bind(this); + #color = null; + #container = null; + #contentsObj = null; + #dateObj = null; + #elements = null; + #parent = null; + #parentRect = null; + #pinned = false; + #popup = null; + #popupAbortController = null; + #position = null; + #commentButton = null; + #commentButtonPosition = null; + #popupPosition = null; + #rect = null; + #richText = null; + #titleObj = null; + #updates = null; + #wasVisible = false; + #firstElement = null; + #commentText = null; + constructor({ + container, + color, + elements, + titleObj, + modificationDate, + contentsObj, + richText, + parent, + rect, + parentRect, + open, + commentManager = null + }) { + this.#container = container; + this.#titleObj = titleObj; + this.#contentsObj = contentsObj; + this.#richText = richText; + this.#parent = parent; + this.#color = color; + this.#rect = rect; + this.#parentRect = parentRect; + this.#elements = elements; + this.#commentManager = commentManager; + this.#firstElement = elements[0]; + this.#dateObj = PDFDateString.toDateObject(modificationDate); + this.trigger = elements.flatMap(e => e.getElementsToTriggerPopup()); + if (!commentManager) { + this.#addEventListeners(); + this.#container.hidden = true; + if (open) { + this.#toggle(); + } + } + } + #addEventListeners() { + if (this.#popupAbortController) { + return; + } + this.#popupAbortController = new AbortController(); + const { + signal + } = this.#popupAbortController; + for (const element of this.trigger) { + element.addEventListener("click", this.#boundToggle, { + signal + }); + element.addEventListener("pointerenter", this.#boundShow, { + signal + }); + element.addEventListener("pointerleave", this.#boundHide, { + signal + }); + element.classList.add("popupTriggerArea"); + } + for (const element of this.#elements) { + element.container?.addEventListener("keydown", this.#boundKeyDown, { + signal + }); + } + } + #setCommentButtonPosition() { + const element = this.#elements.find(e => e.hasCommentButton); + if (!element) { + return; + } + this.#commentButtonPosition = element._normalizePoint(element.commentButtonPosition); + } + renderCommentButton() { + if (this.#commentButton) { + if (!this.#commentButton.parentNode) { + this.#firstElement.container.after(this.#commentButton); + } + return; + } + if (!this.#commentButtonPosition) { + this.#setCommentButtonPosition(); + } + if (!this.#commentButtonPosition) { + return; + } + const { + signal + } = this.#popupAbortController = new AbortController(); + const hasOwnButton = this.#firstElement.hasOwnCommentButton; + const togglePopup = () => { + this.#commentManager.toggleCommentPopup(this, true, undefined, !hasOwnButton); + }; + const showPopup = () => { + this.#commentManager.toggleCommentPopup(this, false, true, !hasOwnButton); + }; + const hidePopup = () => { + this.#commentManager.toggleCommentPopup(this, false, false); + }; + if (!hasOwnButton) { + const button = this.#commentButton = document.createElement("button"); + button.className = "annotationCommentButton"; + const parentContainer = this.#firstElement.container; + button.style.zIndex = parentContainer.style.zIndex + 1; + button.tabIndex = 0; + button.ariaHasPopup = "dialog"; + button.ariaControls = "commentPopup"; + button.setAttribute("data-l10n-id", "pdfjs-show-comment-button"); + this.#updateColor(); + this.#updateCommentButtonPosition(); + button.addEventListener("keydown", this.#boundKeyDown, { + signal + }); + button.addEventListener("click", togglePopup, { + signal + }); + button.addEventListener("pointerenter", showPopup, { + signal + }); + button.addEventListener("pointerleave", hidePopup, { + signal + }); + parentContainer.after(button); + } else { + this.#commentButton = this.#firstElement.container; + for (const element of this.trigger) { + element.ariaHasPopup = "dialog"; + element.ariaControls = "commentPopup"; + element.addEventListener("keydown", this.#boundKeyDown, { + signal + }); + element.addEventListener("click", togglePopup, { + signal + }); + element.addEventListener("pointerenter", showPopup, { + signal + }); + element.addEventListener("pointerleave", hidePopup, { + signal + }); + element.classList.add("popupTriggerArea"); + } + } + } + #updateCommentButtonPosition() { + if (this.#firstElement.extraPopupElement && !this.#firstElement.editor) { + return; + } + if (!this.#commentButton) { + this.renderCommentButton(); + } + const [x, y] = this.#commentButtonPosition; + const { + style + } = this.#commentButton; + style.left = `calc(${x}%)`; + style.top = `calc(${y}% - var(--comment-button-dim))`; + } + #updateColor() { + if (this.#firstElement.extraPopupElement) { + return; + } + if (!this.#commentButton) { + this.renderCommentButton(); + } + this.#commentButton.style.backgroundColor = this.commentButtonColor || ""; + } + get commentButtonColor() { + const { + color, + opacity + } = this.#firstElement.commentData; + if (!color) { + return null; + } + return this.#parent._commentManager.makeCommentColor(color, opacity); + } + focusCommentButton() { + setTimeout(() => { + this.#commentButton?.focus(); + }, 0); + } + getData() { + const { + richText, + color, + opacity, + creationDate, + modificationDate + } = this.#firstElement.commentData; + return { + contentsObj: { + str: this.comment + }, + richText, + color, + opacity, + creationDate, + modificationDate + }; + } + get elementBeforePopup() { + return this.#commentButton; + } + get comment() { + this.#commentText ||= this.#firstElement.commentText; + return this.#commentText; + } + set comment(text) { + if (text === this.comment) { + return; + } + this.#firstElement.commentText = this.#commentText = text; + } + focus() { + this.#firstElement.container?.focus(); + } + get parentBoundingClientRect() { + return this.#firstElement.layer.getBoundingClientRect(); + } + setCommentButtonStates({ + selected, + hasPopup + }) { + if (!this.#commentButton) { + return; + } + this.#commentButton.classList.toggle("selected", selected); + this.#commentButton.ariaExpanded = hasPopup; + } + setSelectedCommentButton(selected) { + this.#commentButton.classList.toggle("selected", selected); + } + get commentPopupPosition() { + if (this.#popupPosition) { + return this.#popupPosition; + } + const { + x, + y, + height + } = this.#commentButton.getBoundingClientRect(); + const { + x: parentX, + y: parentY, + width: parentWidth, + height: parentHeight + } = this.#firstElement.layer.getBoundingClientRect(); + return [(x - parentX) / parentWidth, (y + height - parentY) / parentHeight]; + } + set commentPopupPosition(pos) { + this.#popupPosition = pos; + } + hasDefaultPopupPosition() { + return this.#popupPosition === null; + } + get commentButtonPosition() { + return this.#commentButtonPosition; + } + get commentButtonWidth() { + return this.#commentButton.getBoundingClientRect().width / this.parentBoundingClientRect.width; + } + editComment(options) { + const [posX, posY] = this.#popupPosition || this.commentButtonPosition.map(x => x / 100); + const parentDimensions = this.parentBoundingClientRect; + const { + x: parentX, + y: parentY, + width: parentWidth, + height: parentHeight + } = parentDimensions; + this.#commentManager.showDialog(null, this, parentX + posX * parentWidth, parentY + posY * parentHeight, { + ...options, + parentDimensions + }); + } + render() { + if (this.#popup) { + return; + } + const popup = this.#popup = document.createElement("div"); + popup.className = "popup"; + if (this.#color) { + const baseColor = popup.style.outlineColor = Util.makeHexColor(...this.#color); + popup.style.backgroundColor = `color-mix(in srgb, ${baseColor} 30%, white)`; + } + const header = document.createElement("span"); + header.className = "header"; + if (this.#titleObj?.str) { + const title = document.createElement("span"); + title.className = "title"; + header.append(title); + ({ + dir: title.dir, + str: title.textContent + } = this.#titleObj); + } + popup.append(header); + if (this.#dateObj) { + const modificationDate = document.createElement("time"); + modificationDate.className = "popupDate"; + modificationDate.setAttribute("data-l10n-id", "pdfjs-annotation-date-time-string"); + modificationDate.setAttribute("data-l10n-args", JSON.stringify({ + dateObj: this.#dateObj.valueOf() + })); + modificationDate.dateTime = this.#dateObj.toISOString(); + header.append(modificationDate); + } + renderRichText({ + html: this.#html || this.#contentsObj.str, + dir: this.#contentsObj?.dir, + className: "popupContent" + }, popup); + this.#container.append(popup); + } + get #html() { + const richText = this.#richText; + const contentsObj = this.#contentsObj; + if (richText?.str && (!contentsObj?.str || contentsObj.str === richText.str)) { + return this.#richText.html || null; + } + return null; + } + get #fontSize() { + return this.#html?.attributes?.style?.fontSize || 0; + } + get #fontColor() { + return this.#html?.attributes?.style?.color || null; + } + #makePopupContent(text) { + const popupLines = []; + const popupContent = { + str: text, + html: { + name: "div", + attributes: { + dir: "auto" + }, + children: [{ + name: "p", + children: popupLines + }] + } + }; + const lineAttributes = { + style: { + color: this.#fontColor, + fontSize: this.#fontSize ? `calc(${this.#fontSize}px * var(--total-scale-factor))` : "" + } + }; + for (const line of text.split("\n")) { + popupLines.push({ + name: "span", + value: line, + attributes: lineAttributes + }); + } + return popupContent; + } + #keyDown(event) { + if (event.altKey || event.shiftKey || event.ctrlKey || event.metaKey) { + return; + } + if (event.key === "Enter" || event.key === "Escape" && this.#pinned) { + this.#toggle(); + } + } + updateEdited({ + rect, + popup, + deleted + }) { + if (this.#commentManager) { + if (deleted) { + this.remove(); + this.#commentText = null; + } else if (popup) { + if (popup.deleted) { + this.remove(); + } else { + this.#updateColor(); + this.#commentText = popup.text; + } + } + if (rect) { + this.#commentButtonPosition = null; + this.#setCommentButtonPosition(); + this.#updateCommentButtonPosition(); + } + return; + } + if (deleted || popup?.deleted) { + this.remove(); + return; + } + this.#addEventListeners(); + this.#updates ||= { + contentsObj: this.#contentsObj, + richText: this.#richText + }; + if (rect) { + this.#position = null; + } + if (popup && popup.text) { + this.#richText = this.#makePopupContent(popup.text); + this.#dateObj = PDFDateString.toDateObject(popup.date); + this.#contentsObj = null; + } + this.#popup?.remove(); + this.#popup = null; + } + resetEdited() { + if (!this.#updates) { + return; + } + ({ + contentsObj: this.#contentsObj, + richText: this.#richText + } = this.#updates); + this.#updates = null; + this.#popup?.remove(); + this.#popup = null; + this.#position = null; + } + remove() { + this.#popupAbortController?.abort(); + this.#popupAbortController = null; + this.#popup?.remove(); + this.#popup = null; + this.#wasVisible = false; + this.#pinned = false; + this.#commentButton?.remove(); + this.#commentButton = null; + if (this.trigger) { + for (const element of this.trigger) { + element.classList.remove("popupTriggerArea"); + } + } + } + #setPosition() { + if (this.#position !== null) { + return; + } + const { + page: { + view + }, + viewport: { + rawDims: { + pageWidth, + pageHeight, + pageX, + pageY + } + } + } = this.#parent; + let useParentRect = !!this.#parentRect; + let rect = useParentRect ? this.#parentRect : this.#rect; + for (const element of this.#elements) { + if (!rect || Util.intersect(element.data.rect, rect) !== null) { + rect = element.data.rect; + useParentRect = true; + break; + } + } + const normalizedRect = Util.normalizeRect([rect[0], view[3] - rect[1] + view[1], rect[2], view[3] - rect[3] + view[1]]); + const HORIZONTAL_SPACE_AFTER_ANNOTATION = 5; + const parentWidth = useParentRect ? rect[2] - rect[0] + HORIZONTAL_SPACE_AFTER_ANNOTATION : 0; + const popupLeft = normalizedRect[0] + parentWidth; + const popupTop = normalizedRect[1]; + this.#position = [100 * (popupLeft - pageX) / pageWidth, 100 * (popupTop - pageY) / pageHeight]; + const { + style + } = this.#container; + style.left = `${this.#position[0]}%`; + style.top = `${this.#position[1]}%`; + } + #toggle() { + if (this.#commentManager) { + this.#commentManager.toggleCommentPopup(this, false); + return; + } + this.#pinned = !this.#pinned; + if (this.#pinned) { + this.#show(); + this.#container.addEventListener("click", this.#boundToggle); + this.#container.addEventListener("keydown", this.#boundKeyDown); + } else { + this.#hide(); + this.#container.removeEventListener("click", this.#boundToggle); + this.#container.removeEventListener("keydown", this.#boundKeyDown); + } + } + #show() { + if (!this.#popup) { + this.render(); + } + if (!this.isVisible) { + this.#setPosition(); + this.#container.hidden = false; + this.#container.style.zIndex = parseInt(this.#container.style.zIndex) + 1000; + } else if (this.#pinned) { + this.#container.classList.add("focused"); + } + } + #hide() { + this.#container.classList.remove("focused"); + if (this.#pinned || !this.isVisible) { + return; + } + this.#container.hidden = true; + this.#container.style.zIndex = parseInt(this.#container.style.zIndex) - 1000; + } + forceHide() { + this.#wasVisible = this.isVisible; + if (!this.#wasVisible) { + return; + } + this.#container.hidden = true; + } + maybeShow() { + if (this.#commentManager) { + return; + } + this.#addEventListeners(); + if (!this.#wasVisible) { + return; + } + if (!this.#popup) { + this.#show(); + } + this.#wasVisible = false; + this.#container.hidden = false; + } + get isVisible() { + if (this.#commentManager) { + return false; + } + return this.#container.hidden === false; + } +} +class FreeTextAnnotationElement extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + this.textContent = parameters.data.textContent; + this.textPosition = parameters.data.textPosition; + this.annotationEditorType = AnnotationEditorType.FREETEXT; + } + render() { + this.container.classList.add("freeTextAnnotation"); + if (this.textContent) { + const content = this.contentElement = document.createElement("div"); + content.classList.add("annotationTextContent"); + content.setAttribute("role", "comment"); + for (const line of this.textContent) { + const lineSpan = document.createElement("span"); + lineSpan.textContent = line; + content.append(lineSpan); + } + this.container.append(content); + } + if (!this.data.popupRef && this.hasPopupData) { + this.hasOwnCommentButton = true; + this._createPopup(); + } + this._editOnDoubleClick(); + return this.container; + } +} +class LineAnnotationElement extends AnnotationElement { + #line = null; + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + } + render() { + this.container.classList.add("lineAnnotation"); + const { + data, + width, + height + } = this; + const svg = this.svgFactory.create(width, height, true); + const line = this.#line = this.svgFactory.createElement("svg:line"); + line.setAttribute("x1", data.rect[2] - data.lineCoordinates[0]); + line.setAttribute("y1", data.rect[3] - data.lineCoordinates[1]); + line.setAttribute("x2", data.rect[2] - data.lineCoordinates[2]); + line.setAttribute("y2", data.rect[3] - data.lineCoordinates[3]); + line.setAttribute("stroke-width", data.borderStyle.width || 1); + line.setAttribute("stroke", "transparent"); + line.setAttribute("fill", "transparent"); + svg.append(line); + this.container.append(svg); + if (!data.popupRef && this.hasPopupData) { + this.hasOwnCommentButton = true; + this._createPopup(); + } + return this.container; + } + getElementsToTriggerPopup() { + return this.#line; + } + addHighlightArea() { + this.container.classList.add("highlightArea"); + } +} +class SquareAnnotationElement extends AnnotationElement { + #square = null; + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + } + render() { + this.container.classList.add("squareAnnotation"); + const { + data, + width, + height + } = this; + const svg = this.svgFactory.create(width, height, true); + const borderWidth = data.borderStyle.width; + const square = this.#square = this.svgFactory.createElement("svg:rect"); + square.setAttribute("x", borderWidth / 2); + square.setAttribute("y", borderWidth / 2); + square.setAttribute("width", width - borderWidth); + square.setAttribute("height", height - borderWidth); + square.setAttribute("stroke-width", borderWidth || 1); + square.setAttribute("stroke", "transparent"); + square.setAttribute("fill", "transparent"); + svg.append(square); + this.container.append(svg); + if (!data.popupRef && this.hasPopupData) { + this.hasOwnCommentButton = true; + this._createPopup(); + } + return this.container; + } + getElementsToTriggerPopup() { + return this.#square; + } + addHighlightArea() { + this.container.classList.add("highlightArea"); + } +} +class CircleAnnotationElement extends AnnotationElement { + #circle = null; + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + } + render() { + this.container.classList.add("circleAnnotation"); + const { + data, + width, + height + } = this; + const svg = this.svgFactory.create(width, height, true); + const borderWidth = data.borderStyle.width; + const circle = this.#circle = this.svgFactory.createElement("svg:ellipse"); + circle.setAttribute("cx", width / 2); + circle.setAttribute("cy", height / 2); + circle.setAttribute("rx", width / 2 - borderWidth / 2); + circle.setAttribute("ry", height / 2 - borderWidth / 2); + circle.setAttribute("stroke-width", borderWidth || 1); + circle.setAttribute("stroke", "transparent"); + circle.setAttribute("fill", "transparent"); + svg.append(circle); + this.container.append(svg); + if (!data.popupRef && this.hasPopupData) { + this.hasOwnCommentButton = true; + this._createPopup(); + } + return this.container; + } + getElementsToTriggerPopup() { + return this.#circle; + } + addHighlightArea() { + this.container.classList.add("highlightArea"); + } +} +class PolylineAnnotationElement extends AnnotationElement { + #polyline = null; + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + this.containerClassName = "polylineAnnotation"; + this.svgElementName = "svg:polyline"; + } + render() { + this.container.classList.add(this.containerClassName); + const { + data: { + rect, + vertices, + borderStyle, + popupRef + }, + width, + height + } = this; + if (!vertices) { + return this.container; + } + const svg = this.svgFactory.create(width, height, true); + let points = []; + for (let i = 0, ii = vertices.length; i < ii; i += 2) { + const x = vertices[i] - rect[0]; + const y = rect[3] - vertices[i + 1]; + points.push(`${x},${y}`); + } + points = points.join(" "); + const polyline = this.#polyline = this.svgFactory.createElement(this.svgElementName); + polyline.setAttribute("points", points); + polyline.setAttribute("stroke-width", borderStyle.width || 1); + polyline.setAttribute("stroke", "transparent"); + polyline.setAttribute("fill", "transparent"); + svg.append(polyline); + this.container.append(svg); + if (!popupRef && this.hasPopupData) { + this.hasOwnCommentButton = true; + this._createPopup(); + } + return this.container; + } + getElementsToTriggerPopup() { + return this.#polyline; + } + addHighlightArea() { + this.container.classList.add("highlightArea"); + } +} +class PolygonAnnotationElement extends PolylineAnnotationElement { + constructor(parameters) { + super(parameters); + this.containerClassName = "polygonAnnotation"; + this.svgElementName = "svg:polygon"; + } +} +class CaretAnnotationElement extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + } + render() { + this.container.classList.add("caretAnnotation"); + if (!this.data.popupRef && this.hasPopupData) { + this.hasOwnCommentButton = true; + this._createPopup(); + } + return this.container; + } +} +class InkAnnotationElement extends AnnotationElement { + #polylinesGroupElement = null; + #polylines = []; + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + this.containerClassName = "inkAnnotation"; + this.svgElementName = "svg:polyline"; + this.annotationEditorType = this.data.it === "InkHighlight" ? AnnotationEditorType.HIGHLIGHT : AnnotationEditorType.INK; + } + #getTransform(rotation, rect) { + switch (rotation) { + case 90: + return { + transform: `rotate(90) translate(${-rect[0]},${rect[1]}) scale(1,-1)`, + width: rect[3] - rect[1], + height: rect[2] - rect[0] + }; + case 180: + return { + transform: `rotate(180) translate(${-rect[2]},${rect[1]}) scale(1,-1)`, + width: rect[2] - rect[0], + height: rect[3] - rect[1] + }; + case 270: + return { + transform: `rotate(270) translate(${-rect[2]},${rect[3]}) scale(1,-1)`, + width: rect[3] - rect[1], + height: rect[2] - rect[0] + }; + default: + return { + transform: `translate(${-rect[0]},${rect[3]}) scale(1,-1)`, + width: rect[2] - rect[0], + height: rect[3] - rect[1] + }; + } + } + render() { + this.container.classList.add(this.containerClassName); + const { + data: { + rect, + rotation, + inkLists, + borderStyle, + popupRef + } + } = this; + const { + transform, + width, + height + } = this.#getTransform(rotation, rect); + const svg = this.svgFactory.create(width, height, true); + const g = this.#polylinesGroupElement = this.svgFactory.createElement("svg:g"); + svg.append(g); + g.setAttribute("stroke-width", borderStyle.width || 1); + g.setAttribute("stroke-linecap", "round"); + g.setAttribute("stroke-linejoin", "round"); + g.setAttribute("stroke-miterlimit", 10); + g.setAttribute("stroke", "transparent"); + g.setAttribute("fill", "transparent"); + g.setAttribute("transform", transform); + for (let i = 0, ii = inkLists.length; i < ii; i++) { + const polyline = this.svgFactory.createElement(this.svgElementName); + this.#polylines.push(polyline); + polyline.setAttribute("points", inkLists[i].join(",")); + g.append(polyline); + } + if (!popupRef && this.hasPopupData) { + this.hasOwnCommentButton = true; + this._createPopup(); + } + this.container.append(svg); + this._editOnDoubleClick(); + return this.container; + } + updateEdited(params) { + super.updateEdited(params); + const { + thickness, + points, + rect + } = params; + const g = this.#polylinesGroupElement; + if (thickness >= 0) { + g.setAttribute("stroke-width", thickness || 1); + } + if (points) { + for (let i = 0, ii = this.#polylines.length; i < ii; i++) { + this.#polylines[i].setAttribute("points", points[i].join(",")); + } + } + if (rect) { + const { + transform, + width, + height + } = this.#getTransform(this.data.rotation, rect); + const root = g.parentElement; + root.setAttribute("viewBox", `0 0 ${width} ${height}`); + g.setAttribute("transform", transform); + } + } + getElementsToTriggerPopup() { + return this.#polylines; + } + addHighlightArea() { + this.container.classList.add("highlightArea"); + } +} +class HighlightAnnotationElement extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true, + createQuadrilaterals: true + }); + this.annotationEditorType = AnnotationEditorType.HIGHLIGHT; + } + render() { + const { + data: { + overlaidText, + popupRef + } + } = this; + if (!popupRef && this.hasPopupData) { + this.hasOwnCommentButton = true; + this._createPopup(); + } + this.container.classList.add("highlightAnnotation"); + this._editOnDoubleClick(); + if (overlaidText) { + const mark = document.createElement("mark"); + mark.classList.add("overlaidText"); + mark.textContent = overlaidText; + this.container.append(mark); + } + return this.container; + } +} +class UnderlineAnnotationElement extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true, + createQuadrilaterals: true + }); + } + render() { + const { + data: { + overlaidText, + popupRef + } + } = this; + if (!popupRef && this.hasPopupData) { + this.hasOwnCommentButton = true; + this._createPopup(); + } + this.container.classList.add("underlineAnnotation"); + if (overlaidText) { + const underline = document.createElement("u"); + underline.classList.add("overlaidText"); + underline.textContent = overlaidText; + this.container.append(underline); + } + return this.container; + } +} +class SquigglyAnnotationElement extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true, + createQuadrilaterals: true + }); + } + render() { + const { + data: { + overlaidText, + popupRef + } + } = this; + if (!popupRef && this.hasPopupData) { + this.hasOwnCommentButton = true; + this._createPopup(); + } + this.container.classList.add("squigglyAnnotation"); + if (overlaidText) { + const underline = document.createElement("u"); + underline.classList.add("overlaidText"); + underline.textContent = overlaidText; + this.container.append(underline); + } + return this.container; + } +} +class StrikeOutAnnotationElement extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true, + createQuadrilaterals: true + }); + } + render() { + const { + data: { + overlaidText, + popupRef + } + } = this; + if (!popupRef && this.hasPopupData) { + this.hasOwnCommentButton = true; + this._createPopup(); + } + this.container.classList.add("strikeoutAnnotation"); + if (overlaidText) { + const strikeout = document.createElement("s"); + strikeout.classList.add("overlaidText"); + strikeout.textContent = overlaidText; + this.container.append(strikeout); + } + return this.container; + } +} +class StampAnnotationElement extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + this.annotationEditorType = AnnotationEditorType.STAMP; + } + render() { + this.container.classList.add("stampAnnotation"); + this.container.setAttribute("role", "img"); + if (!this.data.popupRef && this.hasPopupData) { + this.hasOwnCommentButton = true; + this._createPopup(); + } + this._editOnDoubleClick(); + return this.container; + } +} +class FileAttachmentAnnotationElement extends AnnotationElement { + #trigger = null; + constructor(parameters) { + super(parameters, { + isRenderable: true + }); + const { + file + } = this.data; + this.filename = file.filename; + this.content = file.content; + this.linkService.eventBus?.dispatch("fileattachmentannotation", { + source: this, + ...file + }); + } + render() { + this.container.classList.add("fileAttachmentAnnotation"); + const { + container, + data + } = this; + let trigger; + if (data.hasAppearance || data.fillAlpha === 0) { + trigger = document.createElement("div"); + } else { + trigger = document.createElement("img"); + trigger.src = `${this.imageResourcesPath}annotation-${/paperclip/i.test(data.name) ? "paperclip" : "pushpin"}.svg`; + if (data.fillAlpha && data.fillAlpha < 1) { + trigger.style = `filter: opacity(${Math.round(data.fillAlpha * 100)}%);`; + } + } + trigger.addEventListener("dblclick", this.#download.bind(this)); + this.#trigger = trigger; + const { + isMac + } = util_FeatureTest.platform; + container.addEventListener("keydown", evt => { + if (evt.key === "Enter" && (isMac ? evt.metaKey : evt.ctrlKey)) { + this.#download(); + } + }); + if (!data.popupRef && this.hasPopupData) { + this.hasOwnCommentButton = true; + this._createPopup(); + } else { + trigger.classList.add("popupTriggerArea"); + } + container.append(trigger); + return container; + } + getElementsToTriggerPopup() { + return this.#trigger; + } + addHighlightArea() { + this.container.classList.add("highlightArea"); + } + #download() { + this.downloadManager?.openOrDownloadData(this.content, this.filename); + } +} +class AnnotationLayer { + #accessibilityManager = null; + #annotationCanvasMap = null; + #annotationStorage = null; + #editableAnnotations = new Map(); + #structTreeLayer = null; + #linkService = null; + #elements = []; + #hasAriaAttributesFromStructTree = false; + constructor({ + div, + accessibilityManager, + annotationCanvasMap, + annotationEditorUIManager, + page, + viewport, + structTreeLayer, + commentManager, + linkService, + annotationStorage + }) { + this.div = div; + this.#accessibilityManager = accessibilityManager; + this.#annotationCanvasMap = annotationCanvasMap; + this.#structTreeLayer = structTreeLayer || null; + this.#linkService = linkService || null; + this.#annotationStorage = annotationStorage || new AnnotationStorage(); + this.page = page; + this.viewport = viewport; + this.zIndex = 0; + this._annotationEditorUIManager = annotationEditorUIManager; + this._commentManager = commentManager || null; + } + hasEditableAnnotations() { + return this.#editableAnnotations.size > 0; + } + async render(params) { + const { + annotations + } = params; + const layer = this.div; + setLayerDimensions(layer, this.viewport); + const popupToElements = new Map(); + const popupAnnotations = []; + const elementParams = { + data: null, + layer, + linkService: this.#linkService, + downloadManager: params.downloadManager, + imageResourcesPath: params.imageResourcesPath || "", + renderForms: params.renderForms !== false, + svgFactory: new DOMSVGFactory(), + annotationStorage: this.#annotationStorage, + enableComment: params.enableComment === true, + enableScripting: params.enableScripting === true, + hasJSActions: params.hasJSActions, + fieldObjects: params.fieldObjects, + parent: this, + elements: null + }; + for (const data of annotations) { + if (data.noHTML) { + continue; + } + const isPopupAnnotation = data.annotationType === AnnotationType.POPUP; + if (!isPopupAnnotation) { + if (data.rect[2] === data.rect[0] || data.rect[3] === data.rect[1]) { + continue; + } + } else { + const elements = popupToElements.get(data.id); + if (!elements) { + continue; + } + if (!this._commentManager) { + popupAnnotations.push(data); + continue; + } + elementParams.elements = elements; + } + elementParams.data = data; + const element = AnnotationElementFactory.create(elementParams); + if (!element.isRenderable) { + continue; + } + if (!isPopupAnnotation) { + this.#elements.push(element); + if (data.popupRef) { + const elements = popupToElements.get(data.popupRef); + if (!elements) { + popupToElements.set(data.popupRef, [element]); + } else { + elements.push(element); + } + } + } + const rendered = element.render(); + if (data.hidden) { + rendered.style.visibility = "hidden"; + } + if (element._isEditable) { + this.#editableAnnotations.set(element.data.id, element); + this._annotationEditorUIManager?.renderAnnotationElement(element); + } + } + await this.#addElementsToDOM(); + for (const data of popupAnnotations) { + const elements = elementParams.elements = popupToElements.get(data.id); + elementParams.data = data; + const element = AnnotationElementFactory.create(elementParams); + if (!element.isRenderable) { + continue; + } + const rendered = element.render(); + element.contentElement.id = `${AnnotationPrefix}${data.id}`; + if (data.hidden) { + rendered.style.visibility = "hidden"; + } + elements.at(-1).container.after(rendered); + } + this.#setAnnotationCanvasMap(); + } + async #addElementsToDOM() { + if (this.#elements.length === 0) { + return; + } + this.div.replaceChildren(); + const promises = []; + if (!this.#hasAriaAttributesFromStructTree) { + this.#hasAriaAttributesFromStructTree = true; + for (const { + contentElement, + data: { + id + } + } of this.#elements) { + const annotationId = contentElement.id = `${AnnotationPrefix}${id}`; + promises.push(this.#structTreeLayer?.getAriaAttributes(annotationId).then(ariaAttributes => { + if (ariaAttributes) { + for (const [key, value] of ariaAttributes) { + contentElement.setAttribute(key, value); + } + } + })); + } + } + this.#elements.sort(({ + data: { + rect: [a0, a1, a2, a3] + } + }, { + data: { + rect: [b0, b1, b2, b3] + } + }) => { + if (a0 === a2 && a1 === a3) { + return +1; + } + if (b0 === b2 && b1 === b3) { + return -1; + } + const top1 = a3; + const bot1 = a1; + const mid1 = (a1 + a3) / 2; + const top2 = b3; + const bot2 = b1; + const mid2 = (b1 + b3) / 2; + if (mid1 >= top2 && mid2 <= bot1) { + return -1; + } + if (mid2 >= top1 && mid1 <= bot2) { + return +1; + } + const centerX1 = (a0 + a2) / 2; + const centerX2 = (b0 + b2) / 2; + return centerX1 - centerX2; + }); + const fragment = document.createDocumentFragment(); + for (const element of this.#elements) { + fragment.append(element.container); + if (this._commentManager) { + (element.extraPopupElement?.popup || element.popup)?.renderCommentButton(); + } else if (element.extraPopupElement) { + fragment.append(element.extraPopupElement.render()); + } + } + this.div.append(fragment); + await Promise.all(promises); + if (this.#accessibilityManager) { + for (const element of this.#elements) { + this.#accessibilityManager.addPointerInTextLayer(element.contentElement, false); + } + } + } + async addLinkAnnotations(annotations) { + const elementParams = { + data: null, + layer: this.div, + linkService: this.#linkService, + svgFactory: new DOMSVGFactory(), + parent: this + }; + for (const data of annotations) { + data.borderStyle ||= AnnotationLayer._defaultBorderStyle; + elementParams.data = data; + const element = AnnotationElementFactory.create(elementParams); + if (!element.isRenderable) { + continue; + } + element.render(); + element.contentElement.id = `${AnnotationPrefix}${data.id}`; + this.#elements.push(element); + } + await this.#addElementsToDOM(); + } + update({ + viewport + }) { + const layer = this.div; + this.viewport = viewport; + setLayerDimensions(layer, { + rotation: viewport.rotation + }); + this.#setAnnotationCanvasMap(); + layer.hidden = false; + } + #setAnnotationCanvasMap() { + if (!this.#annotationCanvasMap) { + return; + } + const layer = this.div; + for (const [id, canvas] of this.#annotationCanvasMap) { + const element = layer.querySelector(`[data-annotation-id="${id}"]`); + if (!element) { + continue; + } + canvas.className = "annotationContent"; + const { + firstChild + } = element; + if (!firstChild) { + element.append(canvas); + } else if (firstChild.nodeName === "CANVAS") { + firstChild.replaceWith(canvas); + } else if (!firstChild.classList.contains("annotationContent")) { + firstChild.before(canvas); + } else { + firstChild.after(canvas); + } + const editableAnnotation = this.#editableAnnotations.get(id); + if (!editableAnnotation) { + continue; + } + if (editableAnnotation._hasNoCanvas) { + this._annotationEditorUIManager?.setMissingCanvas(id, element.id, canvas); + editableAnnotation._hasNoCanvas = false; + } else { + editableAnnotation.canvas = canvas; + } + } + this.#annotationCanvasMap.clear(); + } + getEditableAnnotations() { + return Array.from(this.#editableAnnotations.values()); + } + getEditableAnnotation(id) { + return this.#editableAnnotations.get(id); + } + addFakeAnnotation(editor) { + const { + div + } = this; + const { + id, + rotation + } = editor; + const element = new EditorAnnotationElement({ + data: { + id, + rect: editor.getPDFRect(), + rotation + }, + editor, + layer: div, + parent: this, + enableComment: !!this._commentManager, + linkService: this.#linkService, + annotationStorage: this.#annotationStorage + }); + element.render(); + element.contentElement.id = `${AnnotationPrefix}${id}`; + element.createOrUpdatePopup(); + this.#elements.push(element); + return element; + } + removeAnnotation(id) { + const index = this.#elements.findIndex(el => el.data.id === id); + if (index < 0) { + return; + } + const [element] = this.#elements.splice(index, 1); + this.#accessibilityManager?.removePointerInTextLayer(element.contentElement); + } + updateFakeAnnotations(editors) { + if (editors.length === 0) { + return; + } + for (const editor of editors) { + editor.updateFakeAnnotationElement(this); + } + this.#addElementsToDOM(); + } + togglePointerEvents(enabled = false) { + this.div.classList.toggle("disabled", !enabled); + } + static get _defaultBorderStyle() { + return shadow(this, "_defaultBorderStyle", Object.freeze({ + width: 1, + rawWidth: 1, + style: AnnotationBorderStyleType.SOLID, + dashArray: [3], + horizontalCornerRadius: 0, + verticalCornerRadius: 0 + })); + } +} + +;// ./src/display/editor/freetext.js + + + + + +const EOL_PATTERN = /\r\n?|\n/g; +class FreeTextEditor extends AnnotationEditor { + #content = ""; + #editorDivId = `${this.id}-editor`; + #editModeAC = null; + #fontSize; + _colorPicker = null; + static _freeTextDefaultContent = ""; + static _internalPadding = 0; + static _defaultColor = null; + static _defaultFontSize = 10; + static get _keyboardManager() { + const proto = FreeTextEditor.prototype; + const arrowChecker = self => self.isEmpty(); + const small = AnnotationEditorUIManager.TRANSLATE_SMALL; + const big = AnnotationEditorUIManager.TRANSLATE_BIG; + return shadow(this, "_keyboardManager", new KeyboardManager([[["ctrl+s", "mac+meta+s", "ctrl+p", "mac+meta+p"], proto.commitOrRemove, { + bubbles: true + }], [["ctrl+Enter", "mac+meta+Enter", "Escape", "mac+Escape"], proto.commitOrRemove], [["ArrowLeft", "mac+ArrowLeft"], proto._translateEmpty, { + args: [-small, 0], + checker: arrowChecker + }], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], proto._translateEmpty, { + args: [-big, 0], + checker: arrowChecker + }], [["ArrowRight", "mac+ArrowRight"], proto._translateEmpty, { + args: [small, 0], + checker: arrowChecker + }], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], proto._translateEmpty, { + args: [big, 0], + checker: arrowChecker + }], [["ArrowUp", "mac+ArrowUp"], proto._translateEmpty, { + args: [0, -small], + checker: arrowChecker + }], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], proto._translateEmpty, { + args: [0, -big], + checker: arrowChecker + }], [["ArrowDown", "mac+ArrowDown"], proto._translateEmpty, { + args: [0, small], + checker: arrowChecker + }], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], proto._translateEmpty, { + args: [0, big], + checker: arrowChecker + }]])); + } + static _type = "freetext"; + static _editorType = AnnotationEditorType.FREETEXT; + constructor(params) { + super({ + ...params, + name: "freeTextEditor" + }); + this.color = params.color || FreeTextEditor._defaultColor || AnnotationEditor._defaultLineColor; + this.#fontSize = params.fontSize || FreeTextEditor._defaultFontSize; + if (!this.annotationElementId) { + this._uiManager.a11yAlert("pdfjs-editor-freetext-added-alert"); + } + this.canAddComment = false; + } + static initialize(l10n, uiManager) { + AnnotationEditor.initialize(l10n, uiManager); + const style = getComputedStyle(document.documentElement); + this._internalPadding = parseFloat(style.getPropertyValue("--freetext-padding")); + } + static updateDefaultParams(type, value) { + switch (type) { + case AnnotationEditorParamsType.FREETEXT_SIZE: + FreeTextEditor._defaultFontSize = value; + break; + case AnnotationEditorParamsType.FREETEXT_COLOR: + FreeTextEditor._defaultColor = value; + break; + } + } + updateParams(type, value) { + switch (type) { + case AnnotationEditorParamsType.FREETEXT_SIZE: + this.#updateFontSize(value); + break; + case AnnotationEditorParamsType.FREETEXT_COLOR: + this.#updateColor(value); + break; + } + } + static get defaultPropertiesToUpdate() { + return [[AnnotationEditorParamsType.FREETEXT_SIZE, FreeTextEditor._defaultFontSize], [AnnotationEditorParamsType.FREETEXT_COLOR, FreeTextEditor._defaultColor || AnnotationEditor._defaultLineColor]]; + } + get propertiesToUpdate() { + return [[AnnotationEditorParamsType.FREETEXT_SIZE, this.#fontSize], [AnnotationEditorParamsType.FREETEXT_COLOR, this.color]]; + } + get toolbarButtons() { + this._colorPicker ||= new BasicColorPicker(this); + return [["colorPicker", this._colorPicker]]; + } + get colorType() { + return AnnotationEditorParamsType.FREETEXT_COLOR; + } + #updateFontSize(fontSize) { + const setFontsize = size => { + this.editorDiv.style.fontSize = `calc(${size}px * var(--total-scale-factor))`; + this.translate(0, -(size - this.#fontSize) * this.parentScale); + this.#fontSize = size; + this.#setEditorDimensions(); + }; + const savedFontsize = this.#fontSize; + this.addCommands({ + cmd: setFontsize.bind(this, fontSize), + undo: setFontsize.bind(this, savedFontsize), + post: this._uiManager.updateUI.bind(this._uiManager, this), + mustExec: true, + type: AnnotationEditorParamsType.FREETEXT_SIZE, + overwriteIfSameType: true, + keepUndo: true + }); + } + onUpdatedColor() { + this.editorDiv.style.color = this.color; + this._colorPicker?.update(this.color); + super.onUpdatedColor(); + } + #updateColor(color) { + const setColor = col => { + this.color = col; + this.onUpdatedColor(); + }; + const savedColor = this.color; + this.addCommands({ + cmd: setColor.bind(this, color), + undo: setColor.bind(this, savedColor), + post: this._uiManager.updateUI.bind(this._uiManager, this), + mustExec: true, + type: AnnotationEditorParamsType.FREETEXT_COLOR, + overwriteIfSameType: true, + keepUndo: true + }); + } + _translateEmpty(x, y) { + this._uiManager.translateSelectedEditors(x, y, true); + } + getInitialTranslation() { + const scale = this.parentScale; + return [-FreeTextEditor._internalPadding * scale, -(FreeTextEditor._internalPadding + this.#fontSize) * scale]; + } + rebuild() { + if (!this.parent) { + return; + } + super.rebuild(); + if (this.div === null) { + return; + } + if (!this.isAttachedToDOM) { + this.parent.add(this); + } + } + enableEditMode() { + if (!super.enableEditMode()) { + return false; + } + this.overlayDiv.classList.remove("enabled"); + this.editorDiv.contentEditable = true; + this._isDraggable = false; + this.div.removeAttribute("aria-activedescendant"); + this.#editModeAC = new AbortController(); + const signal = this._uiManager.combinedSignal(this.#editModeAC); + this.editorDiv.addEventListener("keydown", this.editorDivKeydown.bind(this), { + signal + }); + this.editorDiv.addEventListener("focus", this.editorDivFocus.bind(this), { + signal + }); + this.editorDiv.addEventListener("blur", this.editorDivBlur.bind(this), { + signal + }); + this.editorDiv.addEventListener("input", this.editorDivInput.bind(this), { + signal + }); + this.editorDiv.addEventListener("paste", this.editorDivPaste.bind(this), { + signal + }); + return true; + } + disableEditMode() { + if (!super.disableEditMode()) { + return false; + } + this.overlayDiv.classList.add("enabled"); + this.editorDiv.contentEditable = false; + this.div.setAttribute("aria-activedescendant", this.#editorDivId); + this._isDraggable = true; + this.#editModeAC?.abort(); + this.#editModeAC = null; + this.div.focus({ + preventScroll: true + }); + this.isEditing = false; + this.parent.div.classList.add("freetextEditing"); + return true; + } + focusin(event) { + if (!this._focusEventsAllowed) { + return; + } + super.focusin(event); + if (event.target !== this.editorDiv) { + this.editorDiv.focus(); + } + } + onceAdded(focus) { + if (this.width) { + return; + } + this.enableEditMode(); + if (focus) { + this.editorDiv.focus(); + } + if (this._initialOptions?.isCentered) { + this.center(); + } + this._initialOptions = null; + } + isEmpty() { + return !this.editorDiv || this.editorDiv.innerText.trim() === ""; + } + remove() { + this.isEditing = false; + if (this.parent) { + this.parent.setEditingState(true); + this.parent.div.classList.add("freetextEditing"); + } + super.remove(); + } + #extractText() { + const buffer = []; + this.editorDiv.normalize(); + let prevChild = null; + for (const child of this.editorDiv.childNodes) { + if (prevChild?.nodeType === Node.TEXT_NODE && child.nodeName === "BR") { + continue; + } + buffer.push(FreeTextEditor.#getNodeContent(child)); + prevChild = child; + } + return buffer.join("\n"); + } + #setEditorDimensions() { + const [parentWidth, parentHeight] = this.parentDimensions; + let rect; + if (this.isAttachedToDOM) { + rect = this.div.getBoundingClientRect(); + } else { + const { + currentLayer, + div + } = this; + const savedDisplay = div.style.display; + const savedVisibility = div.classList.contains("hidden"); + div.classList.remove("hidden"); + div.style.display = "hidden"; + currentLayer.div.append(this.div); + rect = div.getBoundingClientRect(); + div.remove(); + div.style.display = savedDisplay; + div.classList.toggle("hidden", savedVisibility); + } + if (this.rotation % 180 === this.parentRotation % 180) { + this.width = rect.width / parentWidth; + this.height = rect.height / parentHeight; + } else { + this.width = rect.height / parentWidth; + this.height = rect.width / parentHeight; + } + this.fixAndSetPosition(); + } + commit() { + if (!this.isInEditMode()) { + return; + } + super.commit(); + this.disableEditMode(); + const savedText = this.#content; + const newText = this.#content = this.#extractText().trimEnd(); + if (savedText === newText) { + return; + } + const setText = text => { + this.#content = text; + if (!text) { + this.remove(); + return; + } + this.#setContent(); + this._uiManager.rebuild(this); + this.#setEditorDimensions(); + }; + this.addCommands({ + cmd: () => { + setText(newText); + }, + undo: () => { + setText(savedText); + }, + mustExec: false + }); + this.#setEditorDimensions(); + } + shouldGetKeyboardEvents() { + return this.isInEditMode(); + } + enterInEditMode() { + this.enableEditMode(); + this.editorDiv.focus(); + } + keydown(event) { + if (event.target === this.div && event.key === "Enter") { + this.enterInEditMode(); + event.preventDefault(); + } + } + editorDivKeydown(event) { + FreeTextEditor._keyboardManager.exec(this, event); + } + editorDivFocus(event) { + this.isEditing = true; + } + editorDivBlur(event) { + this.isEditing = false; + } + editorDivInput(event) { + this.parent.div.classList.toggle("freetextEditing", this.isEmpty()); + } + disableEditing() { + this.editorDiv.setAttribute("role", "comment"); + this.editorDiv.removeAttribute("aria-multiline"); + } + enableEditing() { + this.editorDiv.setAttribute("role", "textbox"); + this.editorDiv.setAttribute("aria-multiline", true); + } + get canChangeContent() { + return true; + } + render() { + if (this.div) { + return this.div; + } + let baseX, baseY; + if (this._isCopy || this.annotationElementId) { + baseX = this.x; + baseY = this.y; + } + super.render(); + this.editorDiv = document.createElement("div"); + this.editorDiv.className = "internal"; + this.editorDiv.setAttribute("id", this.#editorDivId); + this.editorDiv.setAttribute("data-l10n-id", "pdfjs-free-text2"); + this.editorDiv.setAttribute("data-l10n-attrs", "default-content"); + this.enableEditing(); + this.editorDiv.contentEditable = true; + const { + style + } = this.editorDiv; + style.fontSize = `calc(${this.#fontSize}px * var(--total-scale-factor))`; + style.color = this.color; + this.div.append(this.editorDiv); + this.overlayDiv = document.createElement("div"); + this.overlayDiv.classList.add("overlay", "enabled"); + this.div.append(this.overlayDiv); + if (this._isCopy || this.annotationElementId) { + const [parentWidth, parentHeight] = this.parentDimensions; + if (this.annotationElementId) { + const { + position + } = this._initialData; + let [tx, ty] = this.getInitialTranslation(); + [tx, ty] = this.pageTranslationToScreen(tx, ty); + const [pageWidth, pageHeight] = this.pageDimensions; + const [pageX, pageY] = this.pageTranslation; + let posX, posY; + switch (this.rotation) { + case 0: + posX = baseX + (position[0] - pageX) / pageWidth; + posY = baseY + this.height - (position[1] - pageY) / pageHeight; + break; + case 90: + posX = baseX + (position[0] - pageX) / pageWidth; + posY = baseY - (position[1] - pageY) / pageHeight; + [tx, ty] = [ty, -tx]; + break; + case 180: + posX = baseX - this.width + (position[0] - pageX) / pageWidth; + posY = baseY - (position[1] - pageY) / pageHeight; + [tx, ty] = [-tx, -ty]; + break; + case 270: + posX = baseX + (position[0] - pageX - this.height * pageHeight) / pageWidth; + posY = baseY + (position[1] - pageY - this.width * pageWidth) / pageHeight; + [tx, ty] = [-ty, tx]; + break; + } + this.setAt(posX * parentWidth, posY * parentHeight, tx, ty); + } else { + this._moveAfterPaste(baseX, baseY); + } + this.#setContent(); + this._isDraggable = true; + this.editorDiv.contentEditable = false; + } else { + this._isDraggable = false; + this.editorDiv.contentEditable = true; + } + return this.div; + } + static #getNodeContent(node) { + return (node.nodeType === Node.TEXT_NODE ? node.nodeValue : node.innerText).replaceAll(EOL_PATTERN, ""); + } + editorDivPaste(event) { + const clipboardData = event.clipboardData || window.clipboardData; + const { + types + } = clipboardData; + if (types.length === 1 && types[0] === "text/plain") { + return; + } + event.preventDefault(); + const paste = FreeTextEditor.#deserializeContent(clipboardData.getData("text") || "").replaceAll(EOL_PATTERN, "\n"); + if (!paste) { + return; + } + const selection = window.getSelection(); + if (!selection.rangeCount) { + return; + } + this.editorDiv.normalize(); + selection.deleteFromDocument(); + const range = selection.getRangeAt(0); + if (!paste.includes("\n")) { + range.insertNode(document.createTextNode(paste)); + this.editorDiv.normalize(); + selection.collapseToStart(); + return; + } + const { + startContainer, + startOffset + } = range; + const bufferBefore = []; + const bufferAfter = []; + if (startContainer.nodeType === Node.TEXT_NODE) { + const parent = startContainer.parentElement; + bufferAfter.push(startContainer.nodeValue.slice(startOffset).replaceAll(EOL_PATTERN, "")); + if (parent !== this.editorDiv) { + let buffer = bufferBefore; + for (const child of this.editorDiv.childNodes) { + if (child === parent) { + buffer = bufferAfter; + continue; + } + buffer.push(FreeTextEditor.#getNodeContent(child)); + } + } + bufferBefore.push(startContainer.nodeValue.slice(0, startOffset).replaceAll(EOL_PATTERN, "")); + } else if (startContainer === this.editorDiv) { + let buffer = bufferBefore; + let i = 0; + for (const child of this.editorDiv.childNodes) { + if (i++ === startOffset) { + buffer = bufferAfter; + } + buffer.push(FreeTextEditor.#getNodeContent(child)); + } + } + this.#content = `${bufferBefore.join("\n")}${paste}${bufferAfter.join("\n")}`; + this.#setContent(); + const newRange = new Range(); + let beforeLength = Math.sumPrecise(bufferBefore.map(line => line.length)); + for (const { + firstChild + } of this.editorDiv.childNodes) { + if (firstChild.nodeType === Node.TEXT_NODE) { + const length = firstChild.nodeValue.length; + if (beforeLength <= length) { + newRange.setStart(firstChild, beforeLength); + newRange.setEnd(firstChild, beforeLength); + break; + } + beforeLength -= length; + } + } + selection.removeAllRanges(); + selection.addRange(newRange); + } + #setContent() { + this.editorDiv.replaceChildren(); + if (!this.#content) { + return; + } + for (const line of this.#content.split("\n")) { + const div = document.createElement("div"); + div.append(line ? document.createTextNode(line) : document.createElement("br")); + this.editorDiv.append(div); + } + } + #serializeContent() { + return this.#content.replaceAll("\xa0", " "); + } + static #deserializeContent(content) { + return content.replaceAll(" ", "\xa0"); + } + get contentDiv() { + return this.editorDiv; + } + getPDFRect() { + const padding = FreeTextEditor._internalPadding * this.parentScale; + return this.getRect(padding, padding); + } + static async deserialize(data, parent, uiManager) { + let initialData = null; + if (data instanceof FreeTextAnnotationElement) { + const { + data: { + defaultAppearanceData: { + fontSize, + fontColor + }, + rect, + rotation, + id, + popupRef, + richText, + contentsObj, + creationDate, + modificationDate + }, + textContent, + textPosition, + parent: { + page: { + pageNumber + } + } + } = data; + if (!textContent || textContent.length === 0) { + return null; + } + initialData = data = { + annotationType: AnnotationEditorType.FREETEXT, + color: Array.from(fontColor), + fontSize, + value: textContent.join("\n"), + position: textPosition, + pageIndex: pageNumber - 1, + rect: rect.slice(0), + rotation, + annotationElementId: id, + id, + deleted: false, + popupRef, + comment: contentsObj?.str || null, + richText, + creationDate, + modificationDate + }; + } + const editor = await super.deserialize(data, parent, uiManager); + editor.#fontSize = data.fontSize; + editor.color = Util.makeHexColor(...data.color); + editor.#content = FreeTextEditor.#deserializeContent(data.value); + editor._initialData = initialData; + if (data.comment) { + editor.setCommentData(data); + } + return editor; + } + serialize(isForCopying = false) { + if (this.isEmpty()) { + return null; + } + if (this.deleted) { + return this.serializeDeleted(); + } + const color = AnnotationEditor._colorManager.convert(this.isAttachedToDOM ? getComputedStyle(this.editorDiv).color : this.color); + const serialized = Object.assign(super.serialize(isForCopying), { + color, + fontSize: this.#fontSize, + value: this.#serializeContent() + }); + this.addComment(serialized); + if (isForCopying) { + serialized.isCopy = true; + return serialized; + } + if (this.annotationElementId && !this.#hasElementChanged(serialized)) { + return null; + } + serialized.id = this.annotationElementId; + return serialized; + } + #hasElementChanged(serialized) { + const { + value, + fontSize, + color, + pageIndex + } = this._initialData; + return this.hasEditedComment || this._hasBeenMoved || serialized.value !== value || serialized.fontSize !== fontSize || serialized.color.some((c, i) => c !== color[i]) || serialized.pageIndex !== pageIndex; + } + renderAnnotationElement(annotation) { + const content = super.renderAnnotationElement(annotation); + if (!content) { + return null; + } + const { + style + } = content; + style.fontSize = `calc(${this.#fontSize}px * var(--total-scale-factor))`; + style.color = this.color; + content.replaceChildren(); + for (const line of this.#content.split("\n")) { + const div = document.createElement("div"); + div.append(line ? document.createTextNode(line) : document.createElement("br")); + content.append(div); + } + annotation.updateEdited({ + rect: this.getPDFRect(), + popup: this._uiManager.hasCommentManager() || this.hasEditedComment ? this.comment : { + text: this.#content + } + }); + return content; + } + resetAnnotationElement(annotation) { + super.resetAnnotationElement(annotation); + annotation.resetEdited(); + } +} + +;// ./src/display/editor/drawers/outline.js + +class Outline { + static PRECISION = 1e-4; + toSVGPath() { + unreachable("Abstract method `toSVGPath` must be implemented."); + } + get box() { + unreachable("Abstract getter `box` must be implemented."); + } + serialize(_bbox, _rotation) { + unreachable("Abstract method `serialize` must be implemented."); + } + static _rescale(src, tx, ty, sx, sy, dest) { + dest ||= new Float32Array(src.length); + for (let i = 0, ii = src.length; i < ii; i += 2) { + dest[i] = tx + src[i] * sx; + dest[i + 1] = ty + src[i + 1] * sy; + } + return dest; + } + static _rescaleAndSwap(src, tx, ty, sx, sy, dest) { + dest ||= new Float32Array(src.length); + for (let i = 0, ii = src.length; i < ii; i += 2) { + dest[i] = tx + src[i + 1] * sx; + dest[i + 1] = ty + src[i] * sy; + } + return dest; + } + static _translate(src, tx, ty, dest) { + dest ||= new Float32Array(src.length); + for (let i = 0, ii = src.length; i < ii; i += 2) { + dest[i] = tx + src[i]; + dest[i + 1] = ty + src[i + 1]; + } + return dest; + } + static svgRound(x) { + return Math.round(x * 10000); + } + static _normalizePoint(x, y, parentWidth, parentHeight, rotation) { + switch (rotation) { + case 90: + return [1 - y / parentWidth, x / parentHeight]; + case 180: + return [1 - x / parentWidth, 1 - y / parentHeight]; + case 270: + return [y / parentWidth, 1 - x / parentHeight]; + default: + return [x / parentWidth, y / parentHeight]; + } + } + static _normalizePagePoint(x, y, rotation) { + switch (rotation) { + case 90: + return [1 - y, x]; + case 180: + return [1 - x, 1 - y]; + case 270: + return [y, 1 - x]; + default: + return [x, y]; + } + } + static createBezierPoints(x1, y1, x2, y2, x3, y3) { + return [(x1 + 5 * x2) / 6, (y1 + 5 * y2) / 6, (5 * x2 + x3) / 6, (5 * y2 + y3) / 6, (x2 + x3) / 2, (y2 + y3) / 2]; + } +} + +;// ./src/display/editor/drawers/freedraw.js + + +class FreeDrawOutliner { + #box; + #bottom = []; + #innerMargin; + #isLTR; + #top = []; + #last = new Float32Array(18); + #lastX; + #lastY; + #min; + #min_dist; + #scaleFactor; + #thickness; + #points = []; + static #MIN_DIST = 8; + static #MIN_DIFF = 2; + static #MIN = FreeDrawOutliner.#MIN_DIST + FreeDrawOutliner.#MIN_DIFF; + constructor({ + x, + y + }, box, scaleFactor, thickness, isLTR, innerMargin = 0) { + this.#box = box; + this.#thickness = thickness * scaleFactor; + this.#isLTR = isLTR; + this.#last.set([NaN, NaN, NaN, NaN, x, y], 6); + this.#innerMargin = innerMargin; + this.#min_dist = FreeDrawOutliner.#MIN_DIST * scaleFactor; + this.#min = FreeDrawOutliner.#MIN * scaleFactor; + this.#scaleFactor = scaleFactor; + this.#points.push(x, y); + } + isEmpty() { + return isNaN(this.#last[8]); + } + #getLastCoords() { + const lastTop = this.#last.subarray(4, 6); + const lastBottom = this.#last.subarray(16, 18); + const [x, y, width, height] = this.#box; + return [(this.#lastX + (lastTop[0] - lastBottom[0]) / 2 - x) / width, (this.#lastY + (lastTop[1] - lastBottom[1]) / 2 - y) / height, (this.#lastX + (lastBottom[0] - lastTop[0]) / 2 - x) / width, (this.#lastY + (lastBottom[1] - lastTop[1]) / 2 - y) / height]; + } + add({ + x, + y + }) { + this.#lastX = x; + this.#lastY = y; + const [layerX, layerY, layerWidth, layerHeight] = this.#box; + let [x1, y1, x2, y2] = this.#last.subarray(8, 12); + const diffX = x - x2; + const diffY = y - y2; + const d = Math.hypot(diffX, diffY); + if (d < this.#min) { + return false; + } + const diffD = d - this.#min_dist; + const K = diffD / d; + const shiftX = K * diffX; + const shiftY = K * diffY; + let x0 = x1; + let y0 = y1; + x1 = x2; + y1 = y2; + x2 += shiftX; + y2 += shiftY; + this.#points?.push(x, y); + const nX = -shiftY / diffD; + const nY = shiftX / diffD; + const thX = nX * this.#thickness; + const thY = nY * this.#thickness; + this.#last.set(this.#last.subarray(2, 8), 0); + this.#last.set([x2 + thX, y2 + thY], 4); + this.#last.set(this.#last.subarray(14, 18), 12); + this.#last.set([x2 - thX, y2 - thY], 16); + if (isNaN(this.#last[6])) { + if (this.#top.length === 0) { + this.#last.set([x1 + thX, y1 + thY], 2); + this.#top.push(NaN, NaN, NaN, NaN, (x1 + thX - layerX) / layerWidth, (y1 + thY - layerY) / layerHeight); + this.#last.set([x1 - thX, y1 - thY], 14); + this.#bottom.push(NaN, NaN, NaN, NaN, (x1 - thX - layerX) / layerWidth, (y1 - thY - layerY) / layerHeight); + } + this.#last.set([x0, y0, x1, y1, x2, y2], 6); + return !this.isEmpty(); + } + this.#last.set([x0, y0, x1, y1, x2, y2], 6); + const angle = Math.abs(Math.atan2(y0 - y1, x0 - x1) - Math.atan2(shiftY, shiftX)); + if (angle < Math.PI / 2) { + [x1, y1, x2, y2] = this.#last.subarray(2, 6); + this.#top.push(NaN, NaN, NaN, NaN, ((x1 + x2) / 2 - layerX) / layerWidth, ((y1 + y2) / 2 - layerY) / layerHeight); + [x1, y1, x0, y0] = this.#last.subarray(14, 18); + this.#bottom.push(NaN, NaN, NaN, NaN, ((x0 + x1) / 2 - layerX) / layerWidth, ((y0 + y1) / 2 - layerY) / layerHeight); + return true; + } + [x0, y0, x1, y1, x2, y2] = this.#last.subarray(0, 6); + this.#top.push(((x0 + 5 * x1) / 6 - layerX) / layerWidth, ((y0 + 5 * y1) / 6 - layerY) / layerHeight, ((5 * x1 + x2) / 6 - layerX) / layerWidth, ((5 * y1 + y2) / 6 - layerY) / layerHeight, ((x1 + x2) / 2 - layerX) / layerWidth, ((y1 + y2) / 2 - layerY) / layerHeight); + [x2, y2, x1, y1, x0, y0] = this.#last.subarray(12, 18); + this.#bottom.push(((x0 + 5 * x1) / 6 - layerX) / layerWidth, ((y0 + 5 * y1) / 6 - layerY) / layerHeight, ((5 * x1 + x2) / 6 - layerX) / layerWidth, ((5 * y1 + y2) / 6 - layerY) / layerHeight, ((x1 + x2) / 2 - layerX) / layerWidth, ((y1 + y2) / 2 - layerY) / layerHeight); + return true; + } + toSVGPath() { + if (this.isEmpty()) { + return ""; + } + const top = this.#top; + const bottom = this.#bottom; + if (isNaN(this.#last[6]) && !this.isEmpty()) { + return this.#toSVGPathTwoPoints(); + } + const buffer = []; + buffer.push(`M${top[4]} ${top[5]}`); + for (let i = 6; i < top.length; i += 6) { + if (isNaN(top[i])) { + buffer.push(`L${top[i + 4]} ${top[i + 5]}`); + } else { + buffer.push(`C${top[i]} ${top[i + 1]} ${top[i + 2]} ${top[i + 3]} ${top[i + 4]} ${top[i + 5]}`); + } + } + this.#toSVGPathEnd(buffer); + for (let i = bottom.length - 6; i >= 6; i -= 6) { + if (isNaN(bottom[i])) { + buffer.push(`L${bottom[i + 4]} ${bottom[i + 5]}`); + } else { + buffer.push(`C${bottom[i]} ${bottom[i + 1]} ${bottom[i + 2]} ${bottom[i + 3]} ${bottom[i + 4]} ${bottom[i + 5]}`); + } + } + this.#toSVGPathStart(buffer); + return buffer.join(" "); + } + #toSVGPathTwoPoints() { + const [x, y, width, height] = this.#box; + const [lastTopX, lastTopY, lastBottomX, lastBottomY] = this.#getLastCoords(); + return `M${(this.#last[2] - x) / width} ${(this.#last[3] - y) / height} L${(this.#last[4] - x) / width} ${(this.#last[5] - y) / height} L${lastTopX} ${lastTopY} L${lastBottomX} ${lastBottomY} L${(this.#last[16] - x) / width} ${(this.#last[17] - y) / height} L${(this.#last[14] - x) / width} ${(this.#last[15] - y) / height} Z`; + } + #toSVGPathStart(buffer) { + const bottom = this.#bottom; + buffer.push(`L${bottom[4]} ${bottom[5]} Z`); + } + #toSVGPathEnd(buffer) { + const [x, y, width, height] = this.#box; + const lastTop = this.#last.subarray(4, 6); + const lastBottom = this.#last.subarray(16, 18); + const [lastTopX, lastTopY, lastBottomX, lastBottomY] = this.#getLastCoords(); + buffer.push(`L${(lastTop[0] - x) / width} ${(lastTop[1] - y) / height} L${lastTopX} ${lastTopY} L${lastBottomX} ${lastBottomY} L${(lastBottom[0] - x) / width} ${(lastBottom[1] - y) / height}`); + } + newFreeDrawOutline(outline, points, box, scaleFactor, innerMargin, isLTR) { + return new FreeDrawOutline(outline, points, box, scaleFactor, innerMargin, isLTR); + } + getOutlines() { + const top = this.#top; + const bottom = this.#bottom; + const last = this.#last; + const [layerX, layerY, layerWidth, layerHeight] = this.#box; + const points = new Float32Array((this.#points?.length ?? 0) + 2); + for (let i = 0, ii = points.length - 2; i < ii; i += 2) { + points[i] = (this.#points[i] - layerX) / layerWidth; + points[i + 1] = (this.#points[i + 1] - layerY) / layerHeight; + } + points[points.length - 2] = (this.#lastX - layerX) / layerWidth; + points[points.length - 1] = (this.#lastY - layerY) / layerHeight; + if (isNaN(last[6]) && !this.isEmpty()) { + return this.#getOutlineTwoPoints(points); + } + const outline = new Float32Array(this.#top.length + 24 + this.#bottom.length); + let N = top.length; + for (let i = 0; i < N; i += 2) { + if (isNaN(top[i])) { + outline[i] = outline[i + 1] = NaN; + continue; + } + outline[i] = top[i]; + outline[i + 1] = top[i + 1]; + } + N = this.#getOutlineEnd(outline, N); + for (let i = bottom.length - 6; i >= 6; i -= 6) { + for (let j = 0; j < 6; j += 2) { + if (isNaN(bottom[i + j])) { + outline[N] = outline[N + 1] = NaN; + N += 2; + continue; + } + outline[N] = bottom[i + j]; + outline[N + 1] = bottom[i + j + 1]; + N += 2; + } + } + this.#getOutlineStart(outline, N); + return this.newFreeDrawOutline(outline, points, this.#box, this.#scaleFactor, this.#innerMargin, this.#isLTR); + } + #getOutlineTwoPoints(points) { + const last = this.#last; + const [layerX, layerY, layerWidth, layerHeight] = this.#box; + const [lastTopX, lastTopY, lastBottomX, lastBottomY] = this.#getLastCoords(); + const outline = new Float32Array(36); + outline.set([NaN, NaN, NaN, NaN, (last[2] - layerX) / layerWidth, (last[3] - layerY) / layerHeight, NaN, NaN, NaN, NaN, (last[4] - layerX) / layerWidth, (last[5] - layerY) / layerHeight, NaN, NaN, NaN, NaN, lastTopX, lastTopY, NaN, NaN, NaN, NaN, lastBottomX, lastBottomY, NaN, NaN, NaN, NaN, (last[16] - layerX) / layerWidth, (last[17] - layerY) / layerHeight, NaN, NaN, NaN, NaN, (last[14] - layerX) / layerWidth, (last[15] - layerY) / layerHeight], 0); + return this.newFreeDrawOutline(outline, points, this.#box, this.#scaleFactor, this.#innerMargin, this.#isLTR); + } + #getOutlineStart(outline, pos) { + const bottom = this.#bottom; + outline.set([NaN, NaN, NaN, NaN, bottom[4], bottom[5]], pos); + return pos += 6; + } + #getOutlineEnd(outline, pos) { + const lastTop = this.#last.subarray(4, 6); + const lastBottom = this.#last.subarray(16, 18); + const [layerX, layerY, layerWidth, layerHeight] = this.#box; + const [lastTopX, lastTopY, lastBottomX, lastBottomY] = this.#getLastCoords(); + outline.set([NaN, NaN, NaN, NaN, (lastTop[0] - layerX) / layerWidth, (lastTop[1] - layerY) / layerHeight, NaN, NaN, NaN, NaN, lastTopX, lastTopY, NaN, NaN, NaN, NaN, lastBottomX, lastBottomY, NaN, NaN, NaN, NaN, (lastBottom[0] - layerX) / layerWidth, (lastBottom[1] - layerY) / layerHeight], pos); + return pos += 24; + } +} +class FreeDrawOutline extends Outline { + #box; + #bbox = new Float32Array(4); + #innerMargin; + #isLTR; + #points; + #scaleFactor; + #outline; + constructor(outline, points, box, scaleFactor, innerMargin, isLTR) { + super(); + this.#outline = outline; + this.#points = points; + this.#box = box; + this.#scaleFactor = scaleFactor; + this.#innerMargin = innerMargin; + this.#isLTR = isLTR; + this.firstPoint = [NaN, NaN]; + this.lastPoint = [NaN, NaN]; + this.#computeMinMax(isLTR); + const [x, y, width, height] = this.#bbox; + for (let i = 0, ii = outline.length; i < ii; i += 2) { + outline[i] = (outline[i] - x) / width; + outline[i + 1] = (outline[i + 1] - y) / height; + } + for (let i = 0, ii = points.length; i < ii; i += 2) { + points[i] = (points[i] - x) / width; + points[i + 1] = (points[i + 1] - y) / height; + } + } + toSVGPath() { + const buffer = [`M${this.#outline[4]} ${this.#outline[5]}`]; + for (let i = 6, ii = this.#outline.length; i < ii; i += 6) { + if (isNaN(this.#outline[i])) { + buffer.push(`L${this.#outline[i + 4]} ${this.#outline[i + 5]}`); + continue; + } + buffer.push(`C${this.#outline[i]} ${this.#outline[i + 1]} ${this.#outline[i + 2]} ${this.#outline[i + 3]} ${this.#outline[i + 4]} ${this.#outline[i + 5]}`); + } + buffer.push("Z"); + return buffer.join(" "); + } + serialize([blX, blY, trX, trY], rotation) { + const width = trX - blX; + const height = trY - blY; + let outline; + let points; + switch (rotation) { + case 0: + outline = Outline._rescale(this.#outline, blX, trY, width, -height); + points = Outline._rescale(this.#points, blX, trY, width, -height); + break; + case 90: + outline = Outline._rescaleAndSwap(this.#outline, blX, blY, width, height); + points = Outline._rescaleAndSwap(this.#points, blX, blY, width, height); + break; + case 180: + outline = Outline._rescale(this.#outline, trX, blY, -width, height); + points = Outline._rescale(this.#points, trX, blY, -width, height); + break; + case 270: + outline = Outline._rescaleAndSwap(this.#outline, trX, trY, -width, -height); + points = Outline._rescaleAndSwap(this.#points, trX, trY, -width, -height); + break; + } + return { + outline: Array.from(outline), + points: [Array.from(points)] + }; + } + #computeMinMax(isLTR) { + const outline = this.#outline; + let lastX = outline[4]; + let lastY = outline[5]; + const minMax = [lastX, lastY, lastX, lastY]; + let firstPointX = lastX; + let firstPointY = lastY; + let lastPointX = lastX; + let lastPointY = lastY; + const ltrCallback = isLTR ? Math.max : Math.min; + const bezierBbox = new Float32Array(4); + for (let i = 6, ii = outline.length; i < ii; i += 6) { + const x = outline[i + 4], + y = outline[i + 5]; + if (isNaN(outline[i])) { + Util.pointBoundingBox(x, y, minMax); + if (firstPointY > y) { + firstPointX = x; + firstPointY = y; + } else if (firstPointY === y) { + firstPointX = ltrCallback(firstPointX, x); + } + if (lastPointY < y) { + lastPointX = x; + lastPointY = y; + } else if (lastPointY === y) { + lastPointX = ltrCallback(lastPointX, x); + } + } else { + bezierBbox[0] = bezierBbox[1] = Infinity; + bezierBbox[2] = bezierBbox[3] = -Infinity; + Util.bezierBoundingBox(lastX, lastY, ...outline.slice(i, i + 6), bezierBbox); + Util.rectBoundingBox(bezierBbox[0], bezierBbox[1], bezierBbox[2], bezierBbox[3], minMax); + if (firstPointY > bezierBbox[1]) { + firstPointX = bezierBbox[0]; + firstPointY = bezierBbox[1]; + } else if (firstPointY === bezierBbox[1]) { + firstPointX = ltrCallback(firstPointX, bezierBbox[0]); + } + if (lastPointY < bezierBbox[3]) { + lastPointX = bezierBbox[2]; + lastPointY = bezierBbox[3]; + } else if (lastPointY === bezierBbox[3]) { + lastPointX = ltrCallback(lastPointX, bezierBbox[2]); + } + } + lastX = x; + lastY = y; + } + const bbox = this.#bbox; + bbox[0] = minMax[0] - this.#innerMargin; + bbox[1] = minMax[1] - this.#innerMargin; + bbox[2] = minMax[2] - minMax[0] + 2 * this.#innerMargin; + bbox[3] = minMax[3] - minMax[1] + 2 * this.#innerMargin; + this.firstPoint = [firstPointX, firstPointY]; + this.lastPoint = [lastPointX, lastPointY]; + } + get box() { + return this.#bbox; + } + newOutliner(point, box, scaleFactor, thickness, isLTR, innerMargin = 0) { + return new FreeDrawOutliner(point, box, scaleFactor, thickness, isLTR, innerMargin); + } + getNewOutline(thickness, innerMargin) { + const [x, y, width, height] = this.#bbox; + const [layerX, layerY, layerWidth, layerHeight] = this.#box; + const sx = width * layerWidth; + const sy = height * layerHeight; + const tx = x * layerWidth + layerX; + const ty = y * layerHeight + layerY; + const outliner = this.newOutliner({ + x: this.#points[0] * sx + tx, + y: this.#points[1] * sy + ty + }, this.#box, this.#scaleFactor, thickness, this.#isLTR, innerMargin ?? this.#innerMargin); + for (let i = 2; i < this.#points.length; i += 2) { + outliner.add({ + x: this.#points[i] * sx + tx, + y: this.#points[i + 1] * sy + ty + }); + } + return outliner.getOutlines(); + } +} + +;// ./src/display/editor/drawers/highlight.js + + + +class HighlightOutliner { + #box; + #firstPoint; + #lastPoint; + #verticalEdges = []; + #intervals = []; + constructor(boxes, borderWidth = 0, innerMargin = 0, isLTR = true) { + const minMax = [Infinity, Infinity, -Infinity, -Infinity]; + const NUMBER_OF_DIGITS = 4; + const EPSILON = 10 ** -NUMBER_OF_DIGITS; + for (const { + x, + y, + width, + height + } of boxes) { + const x1 = Math.floor((x - borderWidth) / EPSILON) * EPSILON; + const x2 = Math.ceil((x + width + borderWidth) / EPSILON) * EPSILON; + const y1 = Math.floor((y - borderWidth) / EPSILON) * EPSILON; + const y2 = Math.ceil((y + height + borderWidth) / EPSILON) * EPSILON; + const left = [x1, y1, y2, true]; + const right = [x2, y1, y2, false]; + this.#verticalEdges.push(left, right); + Util.rectBoundingBox(x1, y1, x2, y2, minMax); + } + const bboxWidth = minMax[2] - minMax[0] + 2 * innerMargin; + const bboxHeight = minMax[3] - minMax[1] + 2 * innerMargin; + const shiftedMinX = minMax[0] - innerMargin; + const shiftedMinY = minMax[1] - innerMargin; + let firstPointX = isLTR ? -Infinity : Infinity; + let firstPointY = Infinity; + const lastEdge = this.#verticalEdges.at(isLTR ? -1 : -2); + const lastPoint = [lastEdge[0], lastEdge[2]]; + for (const edge of this.#verticalEdges) { + const [x, y1, y2, left] = edge; + if (!left && isLTR) { + if (y1 < firstPointY) { + firstPointY = y1; + firstPointX = x; + } else if (y1 === firstPointY) { + firstPointX = Math.max(firstPointX, x); + } + } else if (left && !isLTR) { + if (y1 < firstPointY) { + firstPointY = y1; + firstPointX = x; + } else if (y1 === firstPointY) { + firstPointX = Math.min(firstPointX, x); + } + } + edge[0] = (x - shiftedMinX) / bboxWidth; + edge[1] = (y1 - shiftedMinY) / bboxHeight; + edge[2] = (y2 - shiftedMinY) / bboxHeight; + } + this.#box = new Float32Array([shiftedMinX, shiftedMinY, bboxWidth, bboxHeight]); + this.#firstPoint = [firstPointX, firstPointY]; + this.#lastPoint = lastPoint; + } + getOutlines() { + this.#verticalEdges.sort((a, b) => a[0] - b[0] || a[1] - b[1] || a[2] - b[2]); + const outlineVerticalEdges = []; + for (const edge of this.#verticalEdges) { + if (edge[3]) { + outlineVerticalEdges.push(...this.#breakEdge(edge)); + this.#insert(edge); + } else { + this.#remove(edge); + outlineVerticalEdges.push(...this.#breakEdge(edge)); + } + } + return this.#getOutlines(outlineVerticalEdges); + } + #getOutlines(outlineVerticalEdges) { + const edges = []; + const allEdges = new Set(); + for (const edge of outlineVerticalEdges) { + const [x, y1, y2] = edge; + edges.push([x, y1, edge], [x, y2, edge]); + } + edges.sort((a, b) => a[1] - b[1] || a[0] - b[0]); + for (let i = 0, ii = edges.length; i < ii; i += 2) { + const edge1 = edges[i][2]; + const edge2 = edges[i + 1][2]; + edge1.push(edge2); + edge2.push(edge1); + allEdges.add(edge1); + allEdges.add(edge2); + } + const outlines = []; + let outline; + while (allEdges.size > 0) { + const edge = allEdges.values().next().value; + let [x, y1, y2, edge1, edge2] = edge; + allEdges.delete(edge); + let lastPointX = x; + let lastPointY = y1; + outline = [x, y2]; + outlines.push(outline); + while (true) { + let e; + if (allEdges.has(edge1)) { + e = edge1; + } else if (allEdges.has(edge2)) { + e = edge2; + } else { + break; + } + allEdges.delete(e); + [x, y1, y2, edge1, edge2] = e; + if (lastPointX !== x) { + outline.push(lastPointX, lastPointY, x, lastPointY === y1 ? y1 : y2); + lastPointX = x; + } + lastPointY = lastPointY === y1 ? y2 : y1; + } + outline.push(lastPointX, lastPointY); + } + return new HighlightOutline(outlines, this.#box, this.#firstPoint, this.#lastPoint); + } + #binarySearch(y) { + const array = this.#intervals; + let start = 0; + let end = array.length - 1; + while (start <= end) { + const middle = start + end >> 1; + const y1 = array[middle][0]; + if (y1 === y) { + return middle; + } + if (y1 < y) { + start = middle + 1; + } else { + end = middle - 1; + } + } + return end + 1; + } + #insert([, y1, y2]) { + const index = this.#binarySearch(y1); + this.#intervals.splice(index, 0, [y1, y2]); + } + #remove([, y1, y2]) { + const index = this.#binarySearch(y1); + for (let i = index; i < this.#intervals.length; i++) { + const [start, end] = this.#intervals[i]; + if (start !== y1) { + break; + } + if (start === y1 && end === y2) { + this.#intervals.splice(i, 1); + return; + } + } + for (let i = index - 1; i >= 0; i--) { + const [start, end] = this.#intervals[i]; + if (start !== y1) { + break; + } + if (start === y1 && end === y2) { + this.#intervals.splice(i, 1); + return; + } + } + } + #breakEdge(edge) { + const [x, y1, y2] = edge; + const results = [[x, y1, y2]]; + const index = this.#binarySearch(y2); + for (let i = 0; i < index; i++) { + const [start, end] = this.#intervals[i]; + for (let j = 0, jj = results.length; j < jj; j++) { + const [, y3, y4] = results[j]; + if (end <= y3 || y4 <= start) { + continue; + } + if (y3 >= start) { + if (y4 > end) { + results[j][1] = end; + } else { + if (jj === 1) { + return []; + } + results.splice(j, 1); + j--; + jj--; + } + continue; + } + results[j][2] = start; + if (y4 > end) { + results.push([x, end, y4]); + } + } + } + return results; + } +} +class HighlightOutline extends Outline { + #box; + #outlines; + constructor(outlines, box, firstPoint, lastPoint) { + super(); + this.#outlines = outlines; + this.#box = box; + this.firstPoint = firstPoint; + this.lastPoint = lastPoint; + } + toSVGPath() { + const buffer = []; + for (const polygon of this.#outlines) { + let [prevX, prevY] = polygon; + buffer.push(`M${prevX} ${prevY}`); + for (let i = 2; i < polygon.length; i += 2) { + const x = polygon[i]; + const y = polygon[i + 1]; + if (x === prevX) { + buffer.push(`V${y}`); + prevY = y; + } else if (y === prevY) { + buffer.push(`H${x}`); + prevX = x; + } + } + buffer.push("Z"); + } + return buffer.join(" "); + } + serialize([blX, blY, trX, trY], _rotation) { + const outlines = []; + const width = trX - blX; + const height = trY - blY; + for (const outline of this.#outlines) { + const points = new Array(outline.length); + for (let i = 0; i < outline.length; i += 2) { + points[i] = blX + outline[i] * width; + points[i + 1] = trY - outline[i + 1] * height; + } + outlines.push(points); + } + return outlines; + } + get box() { + return this.#box; + } + get classNamesForOutlining() { + return ["highlightOutline"]; + } +} +class FreeHighlightOutliner extends FreeDrawOutliner { + newFreeDrawOutline(outline, points, box, scaleFactor, innerMargin, isLTR) { + return new FreeHighlightOutline(outline, points, box, scaleFactor, innerMargin, isLTR); + } +} +class FreeHighlightOutline extends FreeDrawOutline { + newOutliner(point, box, scaleFactor, thickness, isLTR, innerMargin = 0) { + return new FreeHighlightOutliner(point, box, scaleFactor, thickness, isLTR, innerMargin); + } +} + +;// ./src/display/editor/highlight.js + + + + + + + +class HighlightEditor extends AnnotationEditor { + #anchorNode = null; + #anchorOffset = 0; + #boxes; + #clipPathId = null; + #colorPicker = null; + #focusOutlines = null; + #focusNode = null; + #focusOffset = 0; + #highlightDiv = null; + #highlightOutlines = null; + #id = null; + #isFreeHighlight = false; + #firstPoint = null; + #lastPoint = null; + #outlineId = null; + #text = ""; + #thickness; + #methodOfCreation = ""; + static _defaultColor = null; + static _defaultOpacity = 1; + static _defaultThickness = 12; + static _type = "highlight"; + static _editorType = AnnotationEditorType.HIGHLIGHT; + static _freeHighlightId = -1; + static _freeHighlight = null; + static _freeHighlightClipId = ""; + static get _keyboardManager() { + const proto = HighlightEditor.prototype; + return shadow(this, "_keyboardManager", new KeyboardManager([[["ArrowLeft", "mac+ArrowLeft"], proto._moveCaret, { + args: [0] + }], [["ArrowRight", "mac+ArrowRight"], proto._moveCaret, { + args: [1] + }], [["ArrowUp", "mac+ArrowUp"], proto._moveCaret, { + args: [2] + }], [["ArrowDown", "mac+ArrowDown"], proto._moveCaret, { + args: [3] + }]])); + } + constructor(params) { + super({ + ...params, + name: "highlightEditor" + }); + this.color = params.color || HighlightEditor._defaultColor; + this.#thickness = params.thickness || HighlightEditor._defaultThickness; + this.opacity = params.opacity || HighlightEditor._defaultOpacity; + this.#boxes = params.boxes || null; + this.#methodOfCreation = params.methodOfCreation || ""; + this.#text = params.text || ""; + this._isDraggable = false; + this.defaultL10nId = "pdfjs-editor-highlight-editor"; + if (params.highlightId > -1) { + this.#isFreeHighlight = true; + this.#createFreeOutlines(params); + this.#addToDrawLayer(); + } else if (this.#boxes) { + this.#anchorNode = params.anchorNode; + this.#anchorOffset = params.anchorOffset; + this.#focusNode = params.focusNode; + this.#focusOffset = params.focusOffset; + this.#createOutlines(); + this.#addToDrawLayer(); + this.rotate(this.rotation); + } + if (!this.annotationElementId) { + this._uiManager.a11yAlert("pdfjs-editor-highlight-added-alert"); + } + } + get telemetryInitialData() { + return { + action: "added", + type: this.#isFreeHighlight ? "free_highlight" : "highlight", + color: this._uiManager.getNonHCMColorName(this.color), + thickness: this.#thickness, + methodOfCreation: this.#methodOfCreation + }; + } + get telemetryFinalData() { + return { + type: "highlight", + color: this._uiManager.getNonHCMColorName(this.color) + }; + } + static computeTelemetryFinalData(data) { + return { + numberOfColors: data.get("color").size + }; + } + #createOutlines() { + const outliner = new HighlightOutliner(this.#boxes, 0.001); + this.#highlightOutlines = outliner.getOutlines(); + [this.x, this.y, this.width, this.height] = this.#highlightOutlines.box; + const outlinerForOutline = new HighlightOutliner(this.#boxes, 0.0025, 0.001, this._uiManager.direction === "ltr"); + this.#focusOutlines = outlinerForOutline.getOutlines(); + const { + firstPoint + } = this.#highlightOutlines; + this.#firstPoint = [(firstPoint[0] - this.x) / this.width, (firstPoint[1] - this.y) / this.height]; + const { + lastPoint + } = this.#focusOutlines; + this.#lastPoint = [(lastPoint[0] - this.x) / this.width, (lastPoint[1] - this.y) / this.height]; + } + #createFreeOutlines({ + highlightOutlines, + highlightId, + clipPathId + }) { + this.#highlightOutlines = highlightOutlines; + const extraThickness = 1.5; + this.#focusOutlines = highlightOutlines.getNewOutline(this.#thickness / 2 + extraThickness, 0.0025); + if (highlightId >= 0) { + this.#id = highlightId; + this.#clipPathId = clipPathId; + this.parent.drawLayer.finalizeDraw(highlightId, { + bbox: highlightOutlines.box, + path: { + d: highlightOutlines.toSVGPath() + } + }); + this.#outlineId = this.parent.drawLayer.drawOutline({ + rootClass: { + highlightOutline: true, + free: true + }, + bbox: this.#focusOutlines.box, + path: { + d: this.#focusOutlines.toSVGPath() + } + }, true); + } else if (this.parent) { + const angle = this.parent.viewport.rotation; + this.parent.drawLayer.updateProperties(this.#id, { + bbox: HighlightEditor.#rotateBbox(this.#highlightOutlines.box, (angle - this.rotation + 360) % 360), + path: { + d: highlightOutlines.toSVGPath() + } + }); + this.parent.drawLayer.updateProperties(this.#outlineId, { + bbox: HighlightEditor.#rotateBbox(this.#focusOutlines.box, angle), + path: { + d: this.#focusOutlines.toSVGPath() + } + }); + } + const [x, y, width, height] = highlightOutlines.box; + switch (this.rotation) { + case 0: + this.x = x; + this.y = y; + this.width = width; + this.height = height; + break; + case 90: + { + const [pageWidth, pageHeight] = this.parentDimensions; + this.x = y; + this.y = 1 - x; + this.width = width * pageHeight / pageWidth; + this.height = height * pageWidth / pageHeight; + break; + } + case 180: + this.x = 1 - x; + this.y = 1 - y; + this.width = width; + this.height = height; + break; + case 270: + { + const [pageWidth, pageHeight] = this.parentDimensions; + this.x = 1 - y; + this.y = x; + this.width = width * pageHeight / pageWidth; + this.height = height * pageWidth / pageHeight; + break; + } + } + const { + firstPoint + } = highlightOutlines; + this.#firstPoint = [(firstPoint[0] - x) / width, (firstPoint[1] - y) / height]; + const { + lastPoint + } = this.#focusOutlines; + this.#lastPoint = [(lastPoint[0] - x) / width, (lastPoint[1] - y) / height]; + } + static initialize(l10n, uiManager) { + AnnotationEditor.initialize(l10n, uiManager); + HighlightEditor._defaultColor ||= uiManager.highlightColors?.values().next().value || "#fff066"; + } + static updateDefaultParams(type, value) { + switch (type) { + case AnnotationEditorParamsType.HIGHLIGHT_COLOR: + HighlightEditor._defaultColor = value; + break; + case AnnotationEditorParamsType.HIGHLIGHT_THICKNESS: + HighlightEditor._defaultThickness = value; + break; + } + } + translateInPage(x, y) {} + get toolbarPosition() { + return this.#lastPoint; + } + get commentButtonPosition() { + return this.#firstPoint; + } + updateParams(type, value) { + switch (type) { + case AnnotationEditorParamsType.HIGHLIGHT_COLOR: + this.#updateColor(value); + break; + case AnnotationEditorParamsType.HIGHLIGHT_THICKNESS: + this.#updateThickness(value); + break; + } + } + static get defaultPropertiesToUpdate() { + return [[AnnotationEditorParamsType.HIGHLIGHT_COLOR, HighlightEditor._defaultColor], [AnnotationEditorParamsType.HIGHLIGHT_THICKNESS, HighlightEditor._defaultThickness]]; + } + get propertiesToUpdate() { + return [[AnnotationEditorParamsType.HIGHLIGHT_COLOR, this.color || HighlightEditor._defaultColor], [AnnotationEditorParamsType.HIGHLIGHT_THICKNESS, this.#thickness || HighlightEditor._defaultThickness], [AnnotationEditorParamsType.HIGHLIGHT_FREE, this.#isFreeHighlight]]; + } + onUpdatedColor() { + this.parent?.drawLayer.updateProperties(this.#id, { + root: { + fill: this.color, + "fill-opacity": this.opacity + } + }); + this.#colorPicker?.updateColor(this.color); + super.onUpdatedColor(); + } + #updateColor(color) { + const setColorAndOpacity = (col, opa) => { + this.color = col; + this.opacity = opa; + this.onUpdatedColor(); + }; + const savedColor = this.color; + const savedOpacity = this.opacity; + this.addCommands({ + cmd: setColorAndOpacity.bind(this, color, HighlightEditor._defaultOpacity), + undo: setColorAndOpacity.bind(this, savedColor, savedOpacity), + post: this._uiManager.updateUI.bind(this._uiManager, this), + mustExec: true, + type: AnnotationEditorParamsType.HIGHLIGHT_COLOR, + overwriteIfSameType: true, + keepUndo: true + }); + this._reportTelemetry({ + action: "color_changed", + color: this._uiManager.getNonHCMColorName(color) + }, true); + } + #updateThickness(thickness) { + const savedThickness = this.#thickness; + const setThickness = th => { + this.#thickness = th; + this.#changeThickness(th); + }; + this.addCommands({ + cmd: setThickness.bind(this, thickness), + undo: setThickness.bind(this, savedThickness), + post: this._uiManager.updateUI.bind(this._uiManager, this), + mustExec: true, + type: AnnotationEditorParamsType.INK_THICKNESS, + overwriteIfSameType: true, + keepUndo: true + }); + this._reportTelemetry({ + action: "thickness_changed", + thickness + }, true); + } + get toolbarButtons() { + if (this._uiManager.highlightColors) { + const colorPicker = this.#colorPicker = new ColorPicker({ + editor: this + }); + return [["colorPicker", colorPicker]]; + } + return super.toolbarButtons; + } + disableEditing() { + super.disableEditing(); + this.div.classList.toggle("disabled", true); + } + enableEditing() { + super.enableEditing(); + this.div.classList.toggle("disabled", false); + } + fixAndSetPosition() { + return super.fixAndSetPosition(this.#getRotation()); + } + getBaseTranslation() { + return [0, 0]; + } + getRect(tx, ty) { + return super.getRect(tx, ty, this.#getRotation()); + } + onceAdded(focus) { + if (!this.annotationElementId) { + this.parent.addUndoableEditor(this); + } + if (focus) { + this.div.focus(); + } + } + remove() { + this.#cleanDrawLayer(); + this._reportTelemetry({ + action: "deleted" + }); + super.remove(); + } + rebuild() { + if (!this.parent) { + return; + } + super.rebuild(); + if (this.div === null) { + return; + } + this.#addToDrawLayer(); + if (!this.isAttachedToDOM) { + this.parent.add(this); + } + } + setParent(parent) { + let mustBeSelected = false; + if (this.parent && !parent) { + this.#cleanDrawLayer(); + } else if (parent) { + this.#addToDrawLayer(parent); + mustBeSelected = !this.parent && this.div?.classList.contains("selectedEditor"); + } + super.setParent(parent); + this.show(this._isVisible); + if (mustBeSelected) { + this.select(); + } + } + #changeThickness(thickness) { + if (!this.#isFreeHighlight) { + return; + } + this.#createFreeOutlines({ + highlightOutlines: this.#highlightOutlines.getNewOutline(thickness / 2) + }); + this.fixAndSetPosition(); + this.setDims(); + } + #cleanDrawLayer() { + if (this.#id === null || !this.parent) { + return; + } + this.parent.drawLayer.remove(this.#id); + this.#id = null; + this.parent.drawLayer.remove(this.#outlineId); + this.#outlineId = null; + } + #addToDrawLayer(parent = this.parent) { + if (this.#id !== null) { + return; + } + ({ + id: this.#id, + clipPathId: this.#clipPathId + } = parent.drawLayer.draw({ + bbox: this.#highlightOutlines.box, + root: { + viewBox: "0 0 1 1", + fill: this.color, + "fill-opacity": this.opacity + }, + rootClass: { + highlight: true, + free: this.#isFreeHighlight + }, + path: { + d: this.#highlightOutlines.toSVGPath() + } + }, false, true)); + this.#outlineId = parent.drawLayer.drawOutline({ + rootClass: { + highlightOutline: true, + free: this.#isFreeHighlight + }, + bbox: this.#focusOutlines.box, + path: { + d: this.#focusOutlines.toSVGPath() + } + }, this.#isFreeHighlight); + if (this.#highlightDiv) { + this.#highlightDiv.style.clipPath = this.#clipPathId; + } + } + static #rotateBbox([x, y, width, height], angle) { + switch (angle) { + case 90: + return [1 - y - height, x, height, width]; + case 180: + return [1 - x - width, 1 - y - height, width, height]; + case 270: + return [y, 1 - x - width, height, width]; + } + return [x, y, width, height]; + } + rotate(angle) { + const { + drawLayer + } = this.parent; + let box; + if (this.#isFreeHighlight) { + angle = (angle - this.rotation + 360) % 360; + box = HighlightEditor.#rotateBbox(this.#highlightOutlines.box, angle); + } else { + box = HighlightEditor.#rotateBbox([this.x, this.y, this.width, this.height], angle); + } + drawLayer.updateProperties(this.#id, { + bbox: box, + root: { + "data-main-rotation": angle + } + }); + drawLayer.updateProperties(this.#outlineId, { + bbox: HighlightEditor.#rotateBbox(this.#focusOutlines.box, angle), + root: { + "data-main-rotation": angle + } + }); + } + render() { + if (this.div) { + return this.div; + } + const div = super.render(); + if (this.#text) { + div.setAttribute("aria-label", this.#text); + div.setAttribute("role", "mark"); + } + if (this.#isFreeHighlight) { + div.classList.add("free"); + } else { + this.div.addEventListener("keydown", this.#keydown.bind(this), { + signal: this._uiManager._signal + }); + } + const highlightDiv = this.#highlightDiv = document.createElement("div"); + div.append(highlightDiv); + highlightDiv.setAttribute("aria-hidden", "true"); + highlightDiv.className = "internal"; + highlightDiv.style.clipPath = this.#clipPathId; + this.setDims(); + bindEvents(this, this.#highlightDiv, ["pointerover", "pointerleave"]); + this.enableEditing(); + return div; + } + pointerover() { + if (!this.isSelected) { + this.parent?.drawLayer.updateProperties(this.#outlineId, { + rootClass: { + hovered: true + } + }); + } + } + pointerleave() { + if (!this.isSelected) { + this.parent?.drawLayer.updateProperties(this.#outlineId, { + rootClass: { + hovered: false + } + }); + } + } + #keydown(event) { + HighlightEditor._keyboardManager.exec(this, event); + } + _moveCaret(direction) { + this.parent.unselect(this); + switch (direction) { + case 0: + case 2: + this.#setCaret(true); + break; + case 1: + case 3: + this.#setCaret(false); + break; + } + } + #setCaret(start) { + if (!this.#anchorNode) { + return; + } + const selection = window.getSelection(); + if (start) { + selection.setPosition(this.#anchorNode, this.#anchorOffset); + } else { + selection.setPosition(this.#focusNode, this.#focusOffset); + } + } + select() { + super.select(); + if (!this.#outlineId) { + return; + } + this.parent?.drawLayer.updateProperties(this.#outlineId, { + rootClass: { + hovered: false, + selected: true + } + }); + } + unselect() { + super.unselect(); + if (!this.#outlineId) { + return; + } + this.parent?.drawLayer.updateProperties(this.#outlineId, { + rootClass: { + selected: false + } + }); + if (!this.#isFreeHighlight) { + this.#setCaret(false); + } + } + get _mustFixPosition() { + return !this.#isFreeHighlight; + } + show(visible = this._isVisible) { + super.show(visible); + if (this.parent) { + this.parent.drawLayer.updateProperties(this.#id, { + rootClass: { + hidden: !visible + } + }); + this.parent.drawLayer.updateProperties(this.#outlineId, { + rootClass: { + hidden: !visible + } + }); + } + } + #getRotation() { + return this.#isFreeHighlight ? this.rotation : 0; + } + #serializeBoxes() { + if (this.#isFreeHighlight) { + return null; + } + const [pageWidth, pageHeight] = this.pageDimensions; + const [pageX, pageY] = this.pageTranslation; + const boxes = this.#boxes; + const quadPoints = new Float32Array(boxes.length * 8); + let i = 0; + for (const { + x, + y, + width, + height + } of boxes) { + const sx = x * pageWidth + pageX; + const sy = (1 - y) * pageHeight + pageY; + quadPoints[i] = quadPoints[i + 4] = sx; + quadPoints[i + 1] = quadPoints[i + 3] = sy; + quadPoints[i + 2] = quadPoints[i + 6] = sx + width * pageWidth; + quadPoints[i + 5] = quadPoints[i + 7] = sy - height * pageHeight; + i += 8; + } + return quadPoints; + } + #serializeOutlines(rect) { + return this.#highlightOutlines.serialize(rect, this.#getRotation()); + } + static startHighlighting(parent, isLTR, { + target: textLayer, + x, + y + }) { + const { + x: layerX, + y: layerY, + width: parentWidth, + height: parentHeight + } = textLayer.getBoundingClientRect(); + const ac = new AbortController(); + const signal = parent.combinedSignal(ac); + const pointerUpCallback = e => { + ac.abort(); + this.#endHighlight(parent, e); + }; + window.addEventListener("blur", pointerUpCallback, { + signal + }); + window.addEventListener("pointerup", pointerUpCallback, { + signal + }); + window.addEventListener("pointerdown", stopEvent, { + capture: true, + passive: false, + signal + }); + window.addEventListener("contextmenu", noContextMenu, { + signal + }); + textLayer.addEventListener("pointermove", this.#highlightMove.bind(this, parent), { + signal + }); + this._freeHighlight = new FreeHighlightOutliner({ + x, + y + }, [layerX, layerY, parentWidth, parentHeight], parent.scale, this._defaultThickness / 2, isLTR, 0.001); + ({ + id: this._freeHighlightId, + clipPathId: this._freeHighlightClipId + } = parent.drawLayer.draw({ + bbox: [0, 0, 1, 1], + root: { + viewBox: "0 0 1 1", + fill: this._defaultColor, + "fill-opacity": this._defaultOpacity + }, + rootClass: { + highlight: true, + free: true + }, + path: { + d: this._freeHighlight.toSVGPath() + } + }, true, true)); + } + static #highlightMove(parent, event) { + if (this._freeHighlight.add(event)) { + parent.drawLayer.updateProperties(this._freeHighlightId, { + path: { + d: this._freeHighlight.toSVGPath() + } + }); + } + } + static #endHighlight(parent, event) { + if (!this._freeHighlight.isEmpty()) { + parent.createAndAddNewEditor(event, false, { + highlightId: this._freeHighlightId, + highlightOutlines: this._freeHighlight.getOutlines(), + clipPathId: this._freeHighlightClipId, + methodOfCreation: "main_toolbar" + }); + } else { + parent.drawLayer.remove(this._freeHighlightId); + } + this._freeHighlightId = -1; + this._freeHighlight = null; + this._freeHighlightClipId = ""; + } + static async deserialize(data, parent, uiManager) { + let initialData = null; + if (data instanceof HighlightAnnotationElement) { + const { + data: { + quadPoints, + rect, + rotation, + id, + color, + opacity, + popupRef, + richText, + contentsObj, + creationDate, + modificationDate + }, + parent: { + page: { + pageNumber + } + } + } = data; + initialData = data = { + annotationType: AnnotationEditorType.HIGHLIGHT, + color: Array.from(color), + opacity, + quadPoints, + boxes: null, + pageIndex: pageNumber - 1, + rect: rect.slice(0), + rotation, + annotationElementId: id, + id, + deleted: false, + popupRef, + richText, + comment: contentsObj?.str || null, + creationDate, + modificationDate + }; + } else if (data instanceof InkAnnotationElement) { + const { + data: { + inkLists, + rect, + rotation, + id, + color, + borderStyle: { + rawWidth: thickness + }, + popupRef, + richText, + contentsObj, + creationDate, + modificationDate + }, + parent: { + page: { + pageNumber + } + } + } = data; + initialData = data = { + annotationType: AnnotationEditorType.HIGHLIGHT, + color: Array.from(color), + thickness, + inkLists, + boxes: null, + pageIndex: pageNumber - 1, + rect: rect.slice(0), + rotation, + annotationElementId: id, + id, + deleted: false, + popupRef, + richText, + comment: contentsObj?.str || null, + creationDate, + modificationDate + }; + } + const { + color, + quadPoints, + inkLists, + opacity + } = data; + const editor = await super.deserialize(data, parent, uiManager); + editor.color = Util.makeHexColor(...color); + editor.opacity = opacity || 1; + if (inkLists) { + editor.#thickness = data.thickness; + } + editor._initialData = initialData; + if (data.comment) { + editor.setCommentData(data); + } + const [pageWidth, pageHeight] = editor.pageDimensions; + const [pageX, pageY] = editor.pageTranslation; + if (quadPoints) { + const boxes = editor.#boxes = []; + for (let i = 0; i < quadPoints.length; i += 8) { + boxes.push({ + x: (quadPoints[i] - pageX) / pageWidth, + y: 1 - (quadPoints[i + 1] - pageY) / pageHeight, + width: (quadPoints[i + 2] - quadPoints[i]) / pageWidth, + height: (quadPoints[i + 1] - quadPoints[i + 5]) / pageHeight + }); + } + editor.#createOutlines(); + editor.#addToDrawLayer(); + editor.rotate(editor.rotation); + } else if (inkLists) { + editor.#isFreeHighlight = true; + const points = inkLists[0]; + const point = { + x: points[0] - pageX, + y: pageHeight - (points[1] - pageY) + }; + const outliner = new FreeHighlightOutliner(point, [0, 0, pageWidth, pageHeight], 1, editor.#thickness / 2, true, 0.001); + for (let i = 0, ii = points.length; i < ii; i += 2) { + point.x = points[i] - pageX; + point.y = pageHeight - (points[i + 1] - pageY); + outliner.add(point); + } + const { + id, + clipPathId + } = parent.drawLayer.draw({ + bbox: [0, 0, 1, 1], + root: { + viewBox: "0 0 1 1", + fill: editor.color, + "fill-opacity": editor._defaultOpacity + }, + rootClass: { + highlight: true, + free: true + }, + path: { + d: outliner.toSVGPath() + } + }, true, true); + editor.#createFreeOutlines({ + highlightOutlines: outliner.getOutlines(), + highlightId: id, + clipPathId + }); + editor.#addToDrawLayer(); + editor.rotate(editor.parentRotation); + } + return editor; + } + serialize(isForCopying = false) { + if (this.isEmpty() || isForCopying) { + return null; + } + if (this.deleted) { + return this.serializeDeleted(); + } + const color = AnnotationEditor._colorManager.convert(this._uiManager.getNonHCMColor(this.color)); + const serialized = super.serialize(isForCopying); + Object.assign(serialized, { + color, + opacity: this.opacity, + thickness: this.#thickness, + quadPoints: this.#serializeBoxes(), + outlines: this.#serializeOutlines(serialized.rect) + }); + this.addComment(serialized); + if (this.annotationElementId && !this.#hasElementChanged(serialized)) { + return null; + } + serialized.id = this.annotationElementId; + return serialized; + } + #hasElementChanged(serialized) { + const { + color + } = this._initialData; + return this.hasEditedComment || serialized.color.some((c, i) => c !== color[i]); + } + renderAnnotationElement(annotation) { + if (this.deleted) { + annotation.hide(); + return null; + } + annotation.updateEdited({ + rect: this.getPDFRect(), + popup: this.comment + }); + return null; + } + static canCreateNewEmptyEditor() { + return false; + } +} + +;// ./src/display/editor/draw.js + + + + +class DrawingOptions { + #svgProperties = Object.create(null); + updateProperty(name, value) { + this[name] = value; + this.updateSVGProperty(name, value); + } + updateProperties(properties) { + if (!properties) { + return; + } + for (const [name, value] of Object.entries(properties)) { + if (!name.startsWith("_")) { + this.updateProperty(name, value); + } + } + } + updateSVGProperty(name, value) { + this.#svgProperties[name] = value; + } + toSVGProperties() { + const root = this.#svgProperties; + this.#svgProperties = Object.create(null); + return { + root + }; + } + reset() { + this.#svgProperties = Object.create(null); + } + updateAll(options = this) { + this.updateProperties(options); + } + clone() { + unreachable("Not implemented"); + } +} +class DrawingEditor extends AnnotationEditor { + #drawOutlines = null; + #mustBeCommitted; + _colorPicker = null; + _drawId = null; + static _currentDrawId = -1; + static _currentParent = null; + static #currentDraw = null; + static #currentDrawingAC = null; + static #currentDrawingOptions = null; + static _INNER_MARGIN = 3; + constructor(params) { + super(params); + this.#mustBeCommitted = params.mustBeCommitted || false; + this._addOutlines(params); + } + onUpdatedColor() { + this._colorPicker?.update(this.color); + super.onUpdatedColor(); + } + _addOutlines(params) { + if (params.drawOutlines) { + this.#createDrawOutlines(params); + this.#addToDrawLayer(); + } + } + #createDrawOutlines({ + drawOutlines, + drawId, + drawingOptions + }) { + this.#drawOutlines = drawOutlines; + this._drawingOptions ||= drawingOptions; + if (!this.annotationElementId) { + this._uiManager.a11yAlert(`pdfjs-editor-${this.editorType}-added-alert`); + } + if (drawId >= 0) { + this._drawId = drawId; + this.parent.drawLayer.finalizeDraw(drawId, drawOutlines.defaultProperties); + } else { + this._drawId = this.#createDrawing(drawOutlines, this.parent); + } + this.#updateBbox(drawOutlines.box); + } + #createDrawing(drawOutlines, parent) { + const { + id + } = parent.drawLayer.draw(DrawingEditor._mergeSVGProperties(this._drawingOptions.toSVGProperties(), drawOutlines.defaultSVGProperties), false, false); + return id; + } + static _mergeSVGProperties(p1, p2) { + const p1Keys = new Set(Object.keys(p1)); + for (const [key, value] of Object.entries(p2)) { + if (p1Keys.has(key)) { + Object.assign(p1[key], value); + } else { + p1[key] = value; + } + } + return p1; + } + static getDefaultDrawingOptions(_options) { + unreachable("Not implemented"); + } + static get typesMap() { + unreachable("Not implemented"); + } + static get isDrawer() { + return true; + } + static get supportMultipleDrawings() { + return false; + } + static updateDefaultParams(type, value) { + const propertyName = this.typesMap.get(type); + if (propertyName) { + this._defaultDrawingOptions.updateProperty(propertyName, value); + } + if (this._currentParent) { + DrawingEditor.#currentDraw.updateProperty(propertyName, value); + this._currentParent.drawLayer.updateProperties(this._currentDrawId, this._defaultDrawingOptions.toSVGProperties()); + } + } + updateParams(type, value) { + const propertyName = this.constructor.typesMap.get(type); + if (propertyName) { + this._updateProperty(type, propertyName, value); + } + } + static get defaultPropertiesToUpdate() { + const properties = []; + const options = this._defaultDrawingOptions; + for (const [type, name] of this.typesMap) { + properties.push([type, options[name]]); + } + return properties; + } + get propertiesToUpdate() { + const properties = []; + const { + _drawingOptions + } = this; + for (const [type, name] of this.constructor.typesMap) { + properties.push([type, _drawingOptions[name]]); + } + return properties; + } + _updateProperty(type, name, value) { + const options = this._drawingOptions; + const savedValue = options[name]; + const setter = val => { + options.updateProperty(name, val); + const bbox = this.#drawOutlines.updateProperty(name, val); + if (bbox) { + this.#updateBbox(bbox); + } + this.parent?.drawLayer.updateProperties(this._drawId, options.toSVGProperties()); + if (type === this.colorType) { + this.onUpdatedColor(); + } + }; + this.addCommands({ + cmd: setter.bind(this, value), + undo: setter.bind(this, savedValue), + post: this._uiManager.updateUI.bind(this._uiManager, this), + mustExec: true, + type, + overwriteIfSameType: true, + keepUndo: true + }); + } + _onResizing() { + this.parent?.drawLayer.updateProperties(this._drawId, DrawingEditor._mergeSVGProperties(this.#drawOutlines.getPathResizingSVGProperties(this.#convertToDrawSpace()), { + bbox: this.#rotateBox() + })); + } + _onResized() { + this.parent?.drawLayer.updateProperties(this._drawId, DrawingEditor._mergeSVGProperties(this.#drawOutlines.getPathResizedSVGProperties(this.#convertToDrawSpace()), { + bbox: this.#rotateBox() + })); + } + _onTranslating(_x, _y) { + this.parent?.drawLayer.updateProperties(this._drawId, { + bbox: this.#rotateBox() + }); + } + _onTranslated() { + this.parent?.drawLayer.updateProperties(this._drawId, DrawingEditor._mergeSVGProperties(this.#drawOutlines.getPathTranslatedSVGProperties(this.#convertToDrawSpace(), this.parentDimensions), { + bbox: this.#rotateBox() + })); + } + _onStartDragging() { + this.parent?.drawLayer.updateProperties(this._drawId, { + rootClass: { + moving: true + } + }); + } + _onStopDragging() { + this.parent?.drawLayer.updateProperties(this._drawId, { + rootClass: { + moving: false + } + }); + } + commit() { + super.commit(); + this.disableEditMode(); + this.disableEditing(); + } + disableEditing() { + super.disableEditing(); + this.div.classList.toggle("disabled", true); + } + enableEditing() { + super.enableEditing(); + this.div.classList.toggle("disabled", false); + } + getBaseTranslation() { + return [0, 0]; + } + get isResizable() { + return true; + } + onceAdded(focus) { + if (!this.annotationElementId) { + this.parent.addUndoableEditor(this); + } + this._isDraggable = true; + if (this.#mustBeCommitted) { + this.#mustBeCommitted = false; + this.commit(); + this.parent.setSelected(this); + if (focus && this.isOnScreen) { + this.div.focus(); + } + } + } + remove() { + this.#cleanDrawLayer(); + super.remove(); + } + rebuild() { + if (!this.parent) { + return; + } + super.rebuild(); + if (this.div === null) { + return; + } + this.#addToDrawLayer(); + this.#updateBbox(this.#drawOutlines.box); + if (!this.isAttachedToDOM) { + this.parent.add(this); + } + } + setParent(parent) { + let mustBeSelected = false; + if (this.parent && !parent) { + this._uiManager.removeShouldRescale(this); + this.#cleanDrawLayer(); + } else if (parent) { + this._uiManager.addShouldRescale(this); + this.#addToDrawLayer(parent); + mustBeSelected = !this.parent && this.div?.classList.contains("selectedEditor"); + } + super.setParent(parent); + if (mustBeSelected) { + this.select(); + } + } + #cleanDrawLayer() { + if (this._drawId === null || !this.parent) { + return; + } + this.parent.drawLayer.remove(this._drawId); + this._drawId = null; + this._drawingOptions.reset(); + } + #addToDrawLayer(parent = this.parent) { + if (this._drawId !== null && this.parent === parent) { + return; + } + if (this._drawId !== null) { + this.parent.drawLayer.updateParent(this._drawId, parent.drawLayer); + return; + } + this._drawingOptions.updateAll(); + this._drawId = this.#createDrawing(this.#drawOutlines, parent); + } + #convertToParentSpace([x, y, width, height]) { + const { + parentDimensions: [pW, pH], + rotation + } = this; + switch (rotation) { + case 90: + return [y, 1 - x, width * (pH / pW), height * (pW / pH)]; + case 180: + return [1 - x, 1 - y, width, height]; + case 270: + return [1 - y, x, width * (pH / pW), height * (pW / pH)]; + default: + return [x, y, width, height]; + } + } + #convertToDrawSpace() { + const { + x, + y, + width, + height, + parentDimensions: [pW, pH], + rotation + } = this; + switch (rotation) { + case 90: + return [1 - y, x, width * (pW / pH), height * (pH / pW)]; + case 180: + return [1 - x, 1 - y, width, height]; + case 270: + return [y, 1 - x, width * (pW / pH), height * (pH / pW)]; + default: + return [x, y, width, height]; + } + } + #updateBbox(bbox) { + [this.x, this.y, this.width, this.height] = this.#convertToParentSpace(bbox); + if (this.div) { + this.fixAndSetPosition(); + this.setDims(); + } + this._onResized(); + } + #rotateBox() { + const { + x, + y, + width, + height, + rotation, + parentRotation, + parentDimensions: [pW, pH] + } = this; + switch ((rotation * 4 + parentRotation) / 90) { + case 1: + return [1 - y - height, x, height, width]; + case 2: + return [1 - x - width, 1 - y - height, width, height]; + case 3: + return [y, 1 - x - width, height, width]; + case 4: + return [x, y - width * (pW / pH), height * (pH / pW), width * (pW / pH)]; + case 5: + return [1 - y, x, width * (pW / pH), height * (pH / pW)]; + case 6: + return [1 - x - height * (pH / pW), 1 - y, height * (pH / pW), width * (pW / pH)]; + case 7: + return [y - width * (pW / pH), 1 - x - height * (pH / pW), width * (pW / pH), height * (pH / pW)]; + case 8: + return [x - width, y - height, width, height]; + case 9: + return [1 - y, x - width, height, width]; + case 10: + return [1 - x, 1 - y, width, height]; + case 11: + return [y - height, 1 - x, height, width]; + case 12: + return [x - height * (pH / pW), y, height * (pH / pW), width * (pW / pH)]; + case 13: + return [1 - y - width * (pW / pH), x - height * (pH / pW), width * (pW / pH), height * (pH / pW)]; + case 14: + return [1 - x, 1 - y - width * (pW / pH), height * (pH / pW), width * (pW / pH)]; + case 15: + return [y, 1 - x, width * (pW / pH), height * (pH / pW)]; + default: + return [x, y, width, height]; + } + } + rotate() { + if (!this.parent) { + return; + } + this.parent.drawLayer.updateProperties(this._drawId, DrawingEditor._mergeSVGProperties({ + bbox: this.#rotateBox() + }, this.#drawOutlines.updateRotation((this.parentRotation - this.rotation + 360) % 360))); + } + onScaleChanging() { + if (!this.parent) { + return; + } + this.#updateBbox(this.#drawOutlines.updateParentDimensions(this.parentDimensions, this.parent.scale)); + } + static onScaleChangingWhenDrawing() {} + render() { + if (this.div) { + return this.div; + } + let baseX, baseY; + if (this._isCopy) { + baseX = this.x; + baseY = this.y; + } + const div = super.render(); + div.classList.add("draw"); + const drawDiv = document.createElement("div"); + div.append(drawDiv); + drawDiv.setAttribute("aria-hidden", "true"); + drawDiv.className = "internal"; + this.setDims(); + this._uiManager.addShouldRescale(this); + this.disableEditing(); + if (this._isCopy) { + this._moveAfterPaste(baseX, baseY); + } + return div; + } + static createDrawerInstance(_x, _y, _parentWidth, _parentHeight, _rotation) { + unreachable("Not implemented"); + } + static startDrawing(parent, uiManager, _isLTR, event) { + const { + target, + offsetX: x, + offsetY: y, + pointerId, + pointerType + } = event; + if (CurrentPointers.isInitializedAndDifferentPointerType(pointerType)) { + return; + } + const { + viewport: { + rotation + } + } = parent; + const { + width: parentWidth, + height: parentHeight + } = target.getBoundingClientRect(); + const ac = DrawingEditor.#currentDrawingAC = new AbortController(); + const signal = parent.combinedSignal(ac); + CurrentPointers.setPointer(pointerType, pointerId); + window.addEventListener("pointerup", e => { + if (CurrentPointers.isSamePointerIdOrRemove(e.pointerId)) { + this._endDraw(e); + } + }, { + signal + }); + window.addEventListener("pointercancel", e => { + if (CurrentPointers.isSamePointerIdOrRemove(e.pointerId)) { + this._currentParent.endDrawingSession(); + } + }, { + signal + }); + window.addEventListener("pointerdown", e => { + if (!CurrentPointers.isSamePointerType(e.pointerType)) { + return; + } + CurrentPointers.initializeAndAddPointerId(e.pointerId); + if (DrawingEditor.#currentDraw.isCancellable()) { + DrawingEditor.#currentDraw.removeLastElement(); + if (DrawingEditor.#currentDraw.isEmpty()) { + this._currentParent.endDrawingSession(true); + } else { + this._endDraw(null); + } + } + }, { + capture: true, + passive: false, + signal + }); + window.addEventListener("contextmenu", noContextMenu, { + signal + }); + target.addEventListener("pointermove", this._drawMove.bind(this), { + signal + }); + target.addEventListener("touchmove", e => { + if (CurrentPointers.isSameTimeStamp(e.timeStamp)) { + stopEvent(e); + } + }, { + signal + }); + parent.toggleDrawing(); + uiManager._editorUndoBar?.hide(); + if (DrawingEditor.#currentDraw) { + parent.drawLayer.updateProperties(this._currentDrawId, DrawingEditor.#currentDraw.startNew(x, y, parentWidth, parentHeight, rotation)); + return; + } + uiManager.updateUIForDefaultProperties(this); + DrawingEditor.#currentDraw = this.createDrawerInstance(x, y, parentWidth, parentHeight, rotation); + DrawingEditor.#currentDrawingOptions = this.getDefaultDrawingOptions(); + this._currentParent = parent; + ({ + id: this._currentDrawId + } = parent.drawLayer.draw(this._mergeSVGProperties(DrawingEditor.#currentDrawingOptions.toSVGProperties(), DrawingEditor.#currentDraw.defaultSVGProperties), true, false)); + } + static _drawMove(event) { + CurrentPointers.isSameTimeStamp(event.timeStamp); + if (!DrawingEditor.#currentDraw) { + return; + } + const { + offsetX, + offsetY, + pointerId + } = event; + if (!CurrentPointers.isSamePointerId(pointerId)) { + return; + } + if (CurrentPointers.isUsingMultiplePointers()) { + this._endDraw(event); + return; + } + this._currentParent.drawLayer.updateProperties(this._currentDrawId, DrawingEditor.#currentDraw.add(offsetX, offsetY)); + CurrentPointers.setTimeStamp(event.timeStamp); + stopEvent(event); + } + static _cleanup(all) { + if (all) { + this._currentDrawId = -1; + this._currentParent = null; + DrawingEditor.#currentDraw = null; + DrawingEditor.#currentDrawingOptions = null; + CurrentPointers.clearPointerType(); + CurrentPointers.clearTimeStamp(); + } + if (DrawingEditor.#currentDrawingAC) { + DrawingEditor.#currentDrawingAC.abort(); + DrawingEditor.#currentDrawingAC = null; + CurrentPointers.clearPointerIds(); + } + } + static _endDraw(event) { + const parent = this._currentParent; + if (!parent) { + return; + } + parent.toggleDrawing(true); + this._cleanup(false); + if (event?.target === parent.div) { + parent.drawLayer.updateProperties(this._currentDrawId, DrawingEditor.#currentDraw.end(event.offsetX, event.offsetY)); + } + if (this.supportMultipleDrawings) { + const draw = DrawingEditor.#currentDraw; + const drawId = this._currentDrawId; + const lastElement = draw.getLastElement(); + parent.addCommands({ + cmd: () => { + parent.drawLayer.updateProperties(drawId, draw.setLastElement(lastElement)); + }, + undo: () => { + parent.drawLayer.updateProperties(drawId, draw.removeLastElement()); + }, + mustExec: false, + type: AnnotationEditorParamsType.DRAW_STEP + }); + return; + } + this.endDrawing(false); + } + static endDrawing(isAborted) { + const parent = this._currentParent; + if (!parent) { + return null; + } + parent.toggleDrawing(true); + parent.cleanUndoStack(AnnotationEditorParamsType.DRAW_STEP); + if (!DrawingEditor.#currentDraw.isEmpty()) { + const { + pageDimensions: [pageWidth, pageHeight], + scale + } = parent; + const editor = parent.createAndAddNewEditor({ + offsetX: 0, + offsetY: 0 + }, false, { + drawId: this._currentDrawId, + drawOutlines: DrawingEditor.#currentDraw.getOutlines(pageWidth * scale, pageHeight * scale, scale, this._INNER_MARGIN), + drawingOptions: DrawingEditor.#currentDrawingOptions, + mustBeCommitted: !isAborted + }); + this._cleanup(true); + return editor; + } + parent.drawLayer.remove(this._currentDrawId); + this._cleanup(true); + return null; + } + createDrawingOptions(_data) {} + static deserializeDraw(_pageX, _pageY, _pageWidth, _pageHeight, _innerWidth, _data) { + unreachable("Not implemented"); + } + static async deserialize(data, parent, uiManager) { + const { + rawDims: { + pageWidth, + pageHeight, + pageX, + pageY + } + } = parent.viewport; + const drawOutlines = this.deserializeDraw(pageX, pageY, pageWidth, pageHeight, this._INNER_MARGIN, data); + const editor = await super.deserialize(data, parent, uiManager); + editor.createDrawingOptions(data); + editor.#createDrawOutlines({ + drawOutlines + }); + editor.#addToDrawLayer(); + editor.onScaleChanging(); + editor.rotate(); + return editor; + } + serializeDraw(isForCopying) { + const [pageX, pageY] = this.pageTranslation; + const [pageWidth, pageHeight] = this.pageDimensions; + return this.#drawOutlines.serialize([pageX, pageY, pageWidth, pageHeight], isForCopying); + } + renderAnnotationElement(annotation) { + annotation.updateEdited({ + rect: this.getPDFRect() + }); + return null; + } + static canCreateNewEmptyEditor() { + return false; + } +} + +;// ./src/display/editor/drawers/inkdraw.js + + +class InkDrawOutliner { + #last = new Float64Array(6); + #line; + #lines; + #rotation; + #thickness; + #points; + #lastSVGPath = ""; + #lastIndex = 0; + #outlines = new InkDrawOutline(); + #parentWidth; + #parentHeight; + constructor(x, y, parentWidth, parentHeight, rotation, thickness) { + this.#parentWidth = parentWidth; + this.#parentHeight = parentHeight; + this.#rotation = rotation; + this.#thickness = thickness; + [x, y] = this.#normalizePoint(x, y); + const line = this.#line = [NaN, NaN, NaN, NaN, x, y]; + this.#points = [x, y]; + this.#lines = [{ + line, + points: this.#points + }]; + this.#last.set(line, 0); + } + updateProperty(name, value) { + if (name === "stroke-width") { + this.#thickness = value; + } + } + #normalizePoint(x, y) { + return Outline._normalizePoint(x, y, this.#parentWidth, this.#parentHeight, this.#rotation); + } + isEmpty() { + return !this.#lines || this.#lines.length === 0; + } + isCancellable() { + return this.#points.length <= 10; + } + add(x, y) { + [x, y] = this.#normalizePoint(x, y); + const [x1, y1, x2, y2] = this.#last.subarray(2, 6); + const diffX = x - x2; + const diffY = y - y2; + const d = Math.hypot(this.#parentWidth * diffX, this.#parentHeight * diffY); + if (d <= 2) { + return null; + } + this.#points.push(x, y); + if (isNaN(x1)) { + this.#last.set([x2, y2, x, y], 2); + this.#line.push(NaN, NaN, NaN, NaN, x, y); + return { + path: { + d: this.toSVGPath() + } + }; + } + if (isNaN(this.#last[0])) { + this.#line.splice(6, 6); + } + this.#last.set([x1, y1, x2, y2, x, y], 0); + this.#line.push(...Outline.createBezierPoints(x1, y1, x2, y2, x, y)); + return { + path: { + d: this.toSVGPath() + } + }; + } + end(x, y) { + const change = this.add(x, y); + if (change) { + return change; + } + if (this.#points.length === 2) { + return { + path: { + d: this.toSVGPath() + } + }; + } + return null; + } + startNew(x, y, parentWidth, parentHeight, rotation) { + this.#parentWidth = parentWidth; + this.#parentHeight = parentHeight; + this.#rotation = rotation; + [x, y] = this.#normalizePoint(x, y); + const line = this.#line = [NaN, NaN, NaN, NaN, x, y]; + this.#points = [x, y]; + const last = this.#lines.at(-1); + if (last) { + last.line = new Float32Array(last.line); + last.points = new Float32Array(last.points); + } + this.#lines.push({ + line, + points: this.#points + }); + this.#last.set(line, 0); + this.#lastIndex = 0; + this.toSVGPath(); + return null; + } + getLastElement() { + return this.#lines.at(-1); + } + setLastElement(element) { + if (!this.#lines) { + return this.#outlines.setLastElement(element); + } + this.#lines.push(element); + this.#line = element.line; + this.#points = element.points; + this.#lastIndex = 0; + return { + path: { + d: this.toSVGPath() + } + }; + } + removeLastElement() { + if (!this.#lines) { + return this.#outlines.removeLastElement(); + } + this.#lines.pop(); + this.#lastSVGPath = ""; + for (let i = 0, ii = this.#lines.length; i < ii; i++) { + const { + line, + points + } = this.#lines[i]; + this.#line = line; + this.#points = points; + this.#lastIndex = 0; + this.toSVGPath(); + } + return { + path: { + d: this.#lastSVGPath + } + }; + } + toSVGPath() { + const firstX = Outline.svgRound(this.#line[4]); + const firstY = Outline.svgRound(this.#line[5]); + if (this.#points.length === 2) { + this.#lastSVGPath = `${this.#lastSVGPath} M ${firstX} ${firstY} Z`; + return this.#lastSVGPath; + } + if (this.#points.length <= 6) { + const i = this.#lastSVGPath.lastIndexOf("M"); + this.#lastSVGPath = `${this.#lastSVGPath.slice(0, i)} M ${firstX} ${firstY}`; + this.#lastIndex = 6; + } + if (this.#points.length === 4) { + const secondX = Outline.svgRound(this.#line[10]); + const secondY = Outline.svgRound(this.#line[11]); + this.#lastSVGPath = `${this.#lastSVGPath} L ${secondX} ${secondY}`; + this.#lastIndex = 12; + return this.#lastSVGPath; + } + const buffer = []; + if (this.#lastIndex === 0) { + buffer.push(`M ${firstX} ${firstY}`); + this.#lastIndex = 6; + } + for (let i = this.#lastIndex, ii = this.#line.length; i < ii; i += 6) { + const [c1x, c1y, c2x, c2y, x, y] = this.#line.slice(i, i + 6).map(Outline.svgRound); + buffer.push(`C${c1x} ${c1y} ${c2x} ${c2y} ${x} ${y}`); + } + this.#lastSVGPath += buffer.join(" "); + this.#lastIndex = this.#line.length; + return this.#lastSVGPath; + } + getOutlines(parentWidth, parentHeight, scale, innerMargin) { + const last = this.#lines.at(-1); + last.line = new Float32Array(last.line); + last.points = new Float32Array(last.points); + this.#outlines.build(this.#lines, parentWidth, parentHeight, scale, this.#rotation, this.#thickness, innerMargin); + this.#last = null; + this.#line = null; + this.#lines = null; + this.#lastSVGPath = null; + return this.#outlines; + } + get defaultSVGProperties() { + return { + root: { + viewBox: "0 0 10000 10000" + }, + rootClass: { + draw: true + }, + bbox: [0, 0, 1, 1] + }; + } +} +class InkDrawOutline extends Outline { + #bbox; + #currentRotation = 0; + #innerMargin; + #lines; + #parentWidth; + #parentHeight; + #parentScale; + #rotation; + #thickness; + build(lines, parentWidth, parentHeight, parentScale, rotation, thickness, innerMargin) { + this.#parentWidth = parentWidth; + this.#parentHeight = parentHeight; + this.#parentScale = parentScale; + this.#rotation = rotation; + this.#thickness = thickness; + this.#innerMargin = innerMargin ?? 0; + this.#lines = lines; + this.#computeBbox(); + } + get thickness() { + return this.#thickness; + } + setLastElement(element) { + this.#lines.push(element); + return { + path: { + d: this.toSVGPath() + } + }; + } + removeLastElement() { + this.#lines.pop(); + return { + path: { + d: this.toSVGPath() + } + }; + } + toSVGPath() { + const buffer = []; + for (const { + line + } of this.#lines) { + buffer.push(`M${Outline.svgRound(line[4])} ${Outline.svgRound(line[5])}`); + if (line.length === 6) { + buffer.push("Z"); + continue; + } + if (line.length === 12 && isNaN(line[6])) { + buffer.push(`L${Outline.svgRound(line[10])} ${Outline.svgRound(line[11])}`); + continue; + } + for (let i = 6, ii = line.length; i < ii; i += 6) { + const [c1x, c1y, c2x, c2y, x, y] = line.subarray(i, i + 6).map(Outline.svgRound); + buffer.push(`C${c1x} ${c1y} ${c2x} ${c2y} ${x} ${y}`); + } + } + return buffer.join(""); + } + serialize([pageX, pageY, pageWidth, pageHeight], isForCopying) { + const serializedLines = []; + const serializedPoints = []; + const [x, y, width, height] = this.#getBBoxWithNoMargin(); + let tx, ty, sx, sy, x1, y1, x2, y2, rescaleFn; + switch (this.#rotation) { + case 0: + rescaleFn = Outline._rescale; + tx = pageX; + ty = pageY + pageHeight; + sx = pageWidth; + sy = -pageHeight; + x1 = pageX + x * pageWidth; + y1 = pageY + (1 - y - height) * pageHeight; + x2 = pageX + (x + width) * pageWidth; + y2 = pageY + (1 - y) * pageHeight; + break; + case 90: + rescaleFn = Outline._rescaleAndSwap; + tx = pageX; + ty = pageY; + sx = pageWidth; + sy = pageHeight; + x1 = pageX + y * pageWidth; + y1 = pageY + x * pageHeight; + x2 = pageX + (y + height) * pageWidth; + y2 = pageY + (x + width) * pageHeight; + break; + case 180: + rescaleFn = Outline._rescale; + tx = pageX + pageWidth; + ty = pageY; + sx = -pageWidth; + sy = pageHeight; + x1 = pageX + (1 - x - width) * pageWidth; + y1 = pageY + y * pageHeight; + x2 = pageX + (1 - x) * pageWidth; + y2 = pageY + (y + height) * pageHeight; + break; + case 270: + rescaleFn = Outline._rescaleAndSwap; + tx = pageX + pageWidth; + ty = pageY + pageHeight; + sx = -pageWidth; + sy = -pageHeight; + x1 = pageX + (1 - y - height) * pageWidth; + y1 = pageY + (1 - x - width) * pageHeight; + x2 = pageX + (1 - y) * pageWidth; + y2 = pageY + (1 - x) * pageHeight; + break; + } + for (const { + line, + points + } of this.#lines) { + serializedLines.push(rescaleFn(line, tx, ty, sx, sy, isForCopying ? new Array(line.length) : null)); + serializedPoints.push(rescaleFn(points, tx, ty, sx, sy, isForCopying ? new Array(points.length) : null)); + } + return { + lines: serializedLines, + points: serializedPoints, + rect: [x1, y1, x2, y2] + }; + } + static deserialize(pageX, pageY, pageWidth, pageHeight, innerMargin, { + paths: { + lines, + points + }, + rotation, + thickness + }) { + const newLines = []; + let tx, ty, sx, sy, rescaleFn; + switch (rotation) { + case 0: + rescaleFn = Outline._rescale; + tx = -pageX / pageWidth; + ty = pageY / pageHeight + 1; + sx = 1 / pageWidth; + sy = -1 / pageHeight; + break; + case 90: + rescaleFn = Outline._rescaleAndSwap; + tx = -pageY / pageHeight; + ty = -pageX / pageWidth; + sx = 1 / pageHeight; + sy = 1 / pageWidth; + break; + case 180: + rescaleFn = Outline._rescale; + tx = pageX / pageWidth + 1; + ty = -pageY / pageHeight; + sx = -1 / pageWidth; + sy = 1 / pageHeight; + break; + case 270: + rescaleFn = Outline._rescaleAndSwap; + tx = pageY / pageHeight + 1; + ty = pageX / pageWidth + 1; + sx = -1 / pageHeight; + sy = -1 / pageWidth; + break; + } + if (!lines) { + lines = []; + for (const point of points) { + const len = point.length; + if (len === 2) { + lines.push(new Float32Array([NaN, NaN, NaN, NaN, point[0], point[1]])); + continue; + } + if (len === 4) { + lines.push(new Float32Array([NaN, NaN, NaN, NaN, point[0], point[1], NaN, NaN, NaN, NaN, point[2], point[3]])); + continue; + } + const line = new Float32Array(3 * (len - 2)); + lines.push(line); + let [x1, y1, x2, y2] = point.subarray(0, 4); + line.set([NaN, NaN, NaN, NaN, x1, y1], 0); + for (let i = 4; i < len; i += 2) { + const x = point[i]; + const y = point[i + 1]; + line.set(Outline.createBezierPoints(x1, y1, x2, y2, x, y), (i - 2) * 3); + [x1, y1, x2, y2] = [x2, y2, x, y]; + } + } + } + for (let i = 0, ii = lines.length; i < ii; i++) { + newLines.push({ + line: rescaleFn(lines[i].map(x => x ?? NaN), tx, ty, sx, sy), + points: rescaleFn(points[i].map(x => x ?? NaN), tx, ty, sx, sy) + }); + } + const outlines = new this.prototype.constructor(); + outlines.build(newLines, pageWidth, pageHeight, 1, rotation, thickness, innerMargin); + return outlines; + } + #getMarginComponents(thickness = this.#thickness) { + const margin = this.#innerMargin + thickness / 2 * this.#parentScale; + return this.#rotation % 180 === 0 ? [margin / this.#parentWidth, margin / this.#parentHeight] : [margin / this.#parentHeight, margin / this.#parentWidth]; + } + #getBBoxWithNoMargin() { + const [x, y, width, height] = this.#bbox; + const [marginX, marginY] = this.#getMarginComponents(0); + return [x + marginX, y + marginY, width - 2 * marginX, height - 2 * marginY]; + } + #computeBbox() { + const bbox = this.#bbox = new Float32Array([Infinity, Infinity, -Infinity, -Infinity]); + for (const { + line + } of this.#lines) { + if (line.length <= 12) { + for (let i = 4, ii = line.length; i < ii; i += 6) { + Util.pointBoundingBox(line[i], line[i + 1], bbox); + } + continue; + } + let lastX = line[4], + lastY = line[5]; + for (let i = 6, ii = line.length; i < ii; i += 6) { + const [c1x, c1y, c2x, c2y, x, y] = line.subarray(i, i + 6); + Util.bezierBoundingBox(lastX, lastY, c1x, c1y, c2x, c2y, x, y, bbox); + lastX = x; + lastY = y; + } + } + const [marginX, marginY] = this.#getMarginComponents(); + bbox[0] = MathClamp(bbox[0] - marginX, 0, 1); + bbox[1] = MathClamp(bbox[1] - marginY, 0, 1); + bbox[2] = MathClamp(bbox[2] + marginX, 0, 1); + bbox[3] = MathClamp(bbox[3] + marginY, 0, 1); + bbox[2] -= bbox[0]; + bbox[3] -= bbox[1]; + } + get box() { + return this.#bbox; + } + updateProperty(name, value) { + if (name === "stroke-width") { + return this.#updateThickness(value); + } + return null; + } + #updateThickness(thickness) { + const [oldMarginX, oldMarginY] = this.#getMarginComponents(); + this.#thickness = thickness; + const [newMarginX, newMarginY] = this.#getMarginComponents(); + const [diffMarginX, diffMarginY] = [newMarginX - oldMarginX, newMarginY - oldMarginY]; + const bbox = this.#bbox; + bbox[0] -= diffMarginX; + bbox[1] -= diffMarginY; + bbox[2] += 2 * diffMarginX; + bbox[3] += 2 * diffMarginY; + return bbox; + } + updateParentDimensions([width, height], scale) { + const [oldMarginX, oldMarginY] = this.#getMarginComponents(); + this.#parentWidth = width; + this.#parentHeight = height; + this.#parentScale = scale; + const [newMarginX, newMarginY] = this.#getMarginComponents(); + const diffMarginX = newMarginX - oldMarginX; + const diffMarginY = newMarginY - oldMarginY; + const bbox = this.#bbox; + bbox[0] -= diffMarginX; + bbox[1] -= diffMarginY; + bbox[2] += 2 * diffMarginX; + bbox[3] += 2 * diffMarginY; + return bbox; + } + updateRotation(rotation) { + this.#currentRotation = rotation; + return { + path: { + transform: this.rotationTransform + } + }; + } + get viewBox() { + return this.#bbox.map(Outline.svgRound).join(" "); + } + get defaultProperties() { + const [x, y] = this.#bbox; + return { + root: { + viewBox: this.viewBox + }, + path: { + "transform-origin": `${Outline.svgRound(x)} ${Outline.svgRound(y)}` + } + }; + } + get rotationTransform() { + const [,, width, height] = this.#bbox; + let a = 0, + b = 0, + c = 0, + d = 0, + e = 0, + f = 0; + switch (this.#currentRotation) { + case 90: + b = height / width; + c = -width / height; + e = width; + break; + case 180: + a = -1; + d = -1; + e = width; + f = height; + break; + case 270: + b = -height / width; + c = width / height; + f = height; + break; + default: + return ""; + } + return `matrix(${a} ${b} ${c} ${d} ${Outline.svgRound(e)} ${Outline.svgRound(f)})`; + } + getPathResizingSVGProperties([newX, newY, newWidth, newHeight]) { + const [marginX, marginY] = this.#getMarginComponents(); + const [x, y, width, height] = this.#bbox; + if (Math.abs(width - marginX) <= Outline.PRECISION || Math.abs(height - marginY) <= Outline.PRECISION) { + const tx = newX + newWidth / 2 - (x + width / 2); + const ty = newY + newHeight / 2 - (y + height / 2); + return { + path: { + "transform-origin": `${Outline.svgRound(newX)} ${Outline.svgRound(newY)}`, + transform: `${this.rotationTransform} translate(${tx} ${ty})` + } + }; + } + const s1x = (newWidth - 2 * marginX) / (width - 2 * marginX); + const s1y = (newHeight - 2 * marginY) / (height - 2 * marginY); + const s2x = width / newWidth; + const s2y = height / newHeight; + return { + path: { + "transform-origin": `${Outline.svgRound(x)} ${Outline.svgRound(y)}`, + transform: `${this.rotationTransform} scale(${s2x} ${s2y}) ` + `translate(${Outline.svgRound(marginX)} ${Outline.svgRound(marginY)}) scale(${s1x} ${s1y}) ` + `translate(${Outline.svgRound(-marginX)} ${Outline.svgRound(-marginY)})` + } + }; + } + getPathResizedSVGProperties([newX, newY, newWidth, newHeight]) { + const [marginX, marginY] = this.#getMarginComponents(); + const bbox = this.#bbox; + const [x, y, width, height] = bbox; + bbox[0] = newX; + bbox[1] = newY; + bbox[2] = newWidth; + bbox[3] = newHeight; + if (Math.abs(width - marginX) <= Outline.PRECISION || Math.abs(height - marginY) <= Outline.PRECISION) { + const tx = newX + newWidth / 2 - (x + width / 2); + const ty = newY + newHeight / 2 - (y + height / 2); + for (const { + line, + points + } of this.#lines) { + Outline._translate(line, tx, ty, line); + Outline._translate(points, tx, ty, points); + } + return { + root: { + viewBox: this.viewBox + }, + path: { + "transform-origin": `${Outline.svgRound(newX)} ${Outline.svgRound(newY)}`, + transform: this.rotationTransform || null, + d: this.toSVGPath() + } + }; + } + const s1x = (newWidth - 2 * marginX) / (width - 2 * marginX); + const s1y = (newHeight - 2 * marginY) / (height - 2 * marginY); + const tx = -s1x * (x + marginX) + newX + marginX; + const ty = -s1y * (y + marginY) + newY + marginY; + if (s1x !== 1 || s1y !== 1 || tx !== 0 || ty !== 0) { + for (const { + line, + points + } of this.#lines) { + Outline._rescale(line, tx, ty, s1x, s1y, line); + Outline._rescale(points, tx, ty, s1x, s1y, points); + } + } + return { + root: { + viewBox: this.viewBox + }, + path: { + "transform-origin": `${Outline.svgRound(newX)} ${Outline.svgRound(newY)}`, + transform: this.rotationTransform || null, + d: this.toSVGPath() + } + }; + } + getPathTranslatedSVGProperties([newX, newY], parentDimensions) { + const [newParentWidth, newParentHeight] = parentDimensions; + const bbox = this.#bbox; + const tx = newX - bbox[0]; + const ty = newY - bbox[1]; + if (this.#parentWidth === newParentWidth && this.#parentHeight === newParentHeight) { + for (const { + line, + points + } of this.#lines) { + Outline._translate(line, tx, ty, line); + Outline._translate(points, tx, ty, points); + } + } else { + const sx = this.#parentWidth / newParentWidth; + const sy = this.#parentHeight / newParentHeight; + this.#parentWidth = newParentWidth; + this.#parentHeight = newParentHeight; + for (const { + line, + points + } of this.#lines) { + Outline._rescale(line, tx, ty, sx, sy, line); + Outline._rescale(points, tx, ty, sx, sy, points); + } + bbox[2] *= sx; + bbox[3] *= sy; + } + bbox[0] = newX; + bbox[1] = newY; + return { + root: { + viewBox: this.viewBox + }, + path: { + d: this.toSVGPath(), + "transform-origin": `${Outline.svgRound(newX)} ${Outline.svgRound(newY)}` + } + }; + } + get defaultSVGProperties() { + const bbox = this.#bbox; + return { + root: { + viewBox: this.viewBox + }, + rootClass: { + draw: true + }, + path: { + d: this.toSVGPath(), + "transform-origin": `${Outline.svgRound(bbox[0])} ${Outline.svgRound(bbox[1])}`, + transform: this.rotationTransform || null + }, + bbox + }; + } +} + +;// ./src/display/editor/ink.js + + + + + + +class InkDrawingOptions extends DrawingOptions { + constructor(viewerParameters) { + super(); + this._viewParameters = viewerParameters; + super.updateProperties({ + fill: "none", + stroke: AnnotationEditor._defaultLineColor, + "stroke-opacity": 1, + "stroke-width": 1, + "stroke-linecap": "round", + "stroke-linejoin": "round", + "stroke-miterlimit": 10 + }); + } + updateSVGProperty(name, value) { + if (name === "stroke-width") { + value ??= this["stroke-width"]; + value *= this._viewParameters.realScale; + } + super.updateSVGProperty(name, value); + } + clone() { + const clone = new InkDrawingOptions(this._viewParameters); + clone.updateAll(this); + return clone; + } +} +class InkEditor extends DrawingEditor { + static _type = "ink"; + static _editorType = AnnotationEditorType.INK; + static _defaultDrawingOptions = null; + constructor(params) { + super({ + ...params, + name: "inkEditor" + }); + this._willKeepAspectRatio = true; + this.defaultL10nId = "pdfjs-editor-ink-editor"; + } + static initialize(l10n, uiManager) { + AnnotationEditor.initialize(l10n, uiManager); + this._defaultDrawingOptions = new InkDrawingOptions(uiManager.viewParameters); + } + static getDefaultDrawingOptions(options) { + const clone = this._defaultDrawingOptions.clone(); + clone.updateProperties(options); + return clone; + } + static get supportMultipleDrawings() { + return true; + } + static get typesMap() { + return shadow(this, "typesMap", new Map([[AnnotationEditorParamsType.INK_THICKNESS, "stroke-width"], [AnnotationEditorParamsType.INK_COLOR, "stroke"], [AnnotationEditorParamsType.INK_OPACITY, "stroke-opacity"]])); + } + static createDrawerInstance(x, y, parentWidth, parentHeight, rotation) { + return new InkDrawOutliner(x, y, parentWidth, parentHeight, rotation, this._defaultDrawingOptions["stroke-width"]); + } + static deserializeDraw(pageX, pageY, pageWidth, pageHeight, innerMargin, data) { + return InkDrawOutline.deserialize(pageX, pageY, pageWidth, pageHeight, innerMargin, data); + } + static async deserialize(data, parent, uiManager) { + let initialData = null; + if (data instanceof InkAnnotationElement) { + const { + data: { + inkLists, + rect, + rotation, + id, + color, + opacity, + borderStyle: { + rawWidth: thickness + }, + popupRef, + richText, + contentsObj, + creationDate, + modificationDate + }, + parent: { + page: { + pageNumber + } + } + } = data; + initialData = data = { + annotationType: AnnotationEditorType.INK, + color: Array.from(color), + thickness, + opacity, + paths: { + points: inkLists + }, + boxes: null, + pageIndex: pageNumber - 1, + rect: rect.slice(0), + rotation, + annotationElementId: id, + id, + deleted: false, + popupRef, + richText, + comment: contentsObj?.str || null, + creationDate, + modificationDate + }; + } + const editor = await super.deserialize(data, parent, uiManager); + editor._initialData = initialData; + if (data.comment) { + editor.setCommentData(data); + } + return editor; + } + get toolbarButtons() { + this._colorPicker ||= new BasicColorPicker(this); + return [["colorPicker", this._colorPicker]]; + } + get colorType() { + return AnnotationEditorParamsType.INK_COLOR; + } + get color() { + return this._drawingOptions.stroke; + } + get opacity() { + return this._drawingOptions["stroke-opacity"]; + } + onScaleChanging() { + if (!this.parent) { + return; + } + super.onScaleChanging(); + const { + _drawId, + _drawingOptions, + parent + } = this; + _drawingOptions.updateSVGProperty("stroke-width"); + parent.drawLayer.updateProperties(_drawId, _drawingOptions.toSVGProperties()); + } + static onScaleChangingWhenDrawing() { + const parent = this._currentParent; + if (!parent) { + return; + } + super.onScaleChangingWhenDrawing(); + this._defaultDrawingOptions.updateSVGProperty("stroke-width"); + parent.drawLayer.updateProperties(this._currentDrawId, this._defaultDrawingOptions.toSVGProperties()); + } + createDrawingOptions({ + color, + thickness, + opacity + }) { + this._drawingOptions = InkEditor.getDefaultDrawingOptions({ + stroke: Util.makeHexColor(...color), + "stroke-width": thickness, + "stroke-opacity": opacity + }); + } + serialize(isForCopying = false) { + if (this.isEmpty()) { + return null; + } + if (this.deleted) { + return this.serializeDeleted(); + } + const { + lines, + points + } = this.serializeDraw(isForCopying); + const { + _drawingOptions: { + stroke, + "stroke-opacity": opacity, + "stroke-width": thickness + } + } = this; + const serialized = Object.assign(super.serialize(isForCopying), { + color: AnnotationEditor._colorManager.convert(stroke), + opacity, + thickness, + paths: { + lines, + points + } + }); + this.addComment(serialized); + if (isForCopying) { + serialized.isCopy = true; + return serialized; + } + if (this.annotationElementId && !this.#hasElementChanged(serialized)) { + return null; + } + serialized.id = this.annotationElementId; + return serialized; + } + #hasElementChanged(serialized) { + const { + color, + thickness, + opacity, + pageIndex + } = this._initialData; + return this.hasEditedComment || this._hasBeenMoved || this._hasBeenResized || serialized.color.some((c, i) => c !== color[i]) || serialized.thickness !== thickness || serialized.opacity !== opacity || serialized.pageIndex !== pageIndex; + } + renderAnnotationElement(annotation) { + if (this.deleted) { + annotation.hide(); + return null; + } + const { + points, + rect + } = this.serializeDraw(false); + annotation.updateEdited({ + rect, + thickness: this._drawingOptions["stroke-width"], + points, + popup: this.comment + }); + return null; + } +} + +;// ./src/display/editor/drawers/contour.js + +class ContourDrawOutline extends InkDrawOutline { + toSVGPath() { + let path = super.toSVGPath(); + if (!path.endsWith("Z")) { + path += "Z"; + } + return path; + } +} + +;// ./src/display/editor/drawers/signaturedraw.js + + + + +const BASE_HEADER_LENGTH = 8; +const POINTS_PROPERTIES_NUMBER = 3; +class SignatureExtractor { + static #PARAMETERS = { + maxDim: 512, + sigmaSFactor: 0.02, + sigmaR: 25, + kernelSize: 16 + }; + static #neighborIndexToId(i0, j0, i, j) { + i -= i0; + j -= j0; + if (i === 0) { + return j > 0 ? 0 : 4; + } + if (i === 1) { + return j + 6; + } + return 2 - j; + } + static #neighborIdToIndex = new Int32Array([0, 1, -1, 1, -1, 0, -1, -1, 0, -1, 1, -1, 1, 0, 1, 1]); + static #clockwiseNonZero(buf, width, i0, j0, i, j, offset) { + const id = this.#neighborIndexToId(i0, j0, i, j); + for (let k = 0; k < 8; k++) { + const kk = (-k + id - offset + 16) % 8; + const shiftI = this.#neighborIdToIndex[2 * kk]; + const shiftJ = this.#neighborIdToIndex[2 * kk + 1]; + if (buf[(i0 + shiftI) * width + (j0 + shiftJ)] !== 0) { + return kk; + } + } + return -1; + } + static #counterClockwiseNonZero(buf, width, i0, j0, i, j, offset) { + const id = this.#neighborIndexToId(i0, j0, i, j); + for (let k = 0; k < 8; k++) { + const kk = (k + id + offset + 16) % 8; + const shiftI = this.#neighborIdToIndex[2 * kk]; + const shiftJ = this.#neighborIdToIndex[2 * kk + 1]; + if (buf[(i0 + shiftI) * width + (j0 + shiftJ)] !== 0) { + return kk; + } + } + return -1; + } + static #findContours(buf, width, height, threshold) { + const N = buf.length; + const types = new Int32Array(N); + for (let i = 0; i < N; i++) { + types[i] = buf[i] <= threshold ? 1 : 0; + } + for (let i = 1; i < height - 1; i++) { + types[i * width] = types[i * width + width - 1] = 0; + } + for (let i = 0; i < width; i++) { + types[i] = types[width * height - 1 - i] = 0; + } + let nbd = 1; + let lnbd; + const contours = []; + for (let i = 1; i < height - 1; i++) { + lnbd = 1; + for (let j = 1; j < width - 1; j++) { + const ij = i * width + j; + const pix = types[ij]; + if (pix === 0) { + continue; + } + let i2 = i; + let j2 = j; + if (pix === 1 && types[ij - 1] === 0) { + nbd += 1; + j2 -= 1; + } else if (pix >= 1 && types[ij + 1] === 0) { + nbd += 1; + j2 += 1; + if (pix > 1) { + lnbd = pix; + } + } else { + if (pix !== 1) { + lnbd = Math.abs(pix); + } + continue; + } + const points = [j, i]; + const isHole = j2 === j + 1; + const contour = { + isHole, + points, + id: nbd, + parent: 0 + }; + contours.push(contour); + let contour0; + for (const c of contours) { + if (c.id === lnbd) { + contour0 = c; + break; + } + } + if (!contour0) { + contour.parent = isHole ? lnbd : 0; + } else if (contour0.isHole) { + contour.parent = isHole ? contour0.parent : lnbd; + } else { + contour.parent = isHole ? lnbd : contour0.parent; + } + const k = this.#clockwiseNonZero(types, width, i, j, i2, j2, 0); + if (k === -1) { + types[ij] = -nbd; + if (types[ij] !== 1) { + lnbd = Math.abs(types[ij]); + } + continue; + } + let shiftI = this.#neighborIdToIndex[2 * k]; + let shiftJ = this.#neighborIdToIndex[2 * k + 1]; + const i1 = i + shiftI; + const j1 = j + shiftJ; + i2 = i1; + j2 = j1; + let i3 = i; + let j3 = j; + while (true) { + const kk = this.#counterClockwiseNonZero(types, width, i3, j3, i2, j2, 1); + shiftI = this.#neighborIdToIndex[2 * kk]; + shiftJ = this.#neighborIdToIndex[2 * kk + 1]; + const i4 = i3 + shiftI; + const j4 = j3 + shiftJ; + points.push(j4, i4); + const ij3 = i3 * width + j3; + if (types[ij3 + 1] === 0) { + types[ij3] = -nbd; + } else if (types[ij3] === 1) { + types[ij3] = nbd; + } + if (i4 === i && j4 === j && i3 === i1 && j3 === j1) { + if (types[ij] !== 1) { + lnbd = Math.abs(types[ij]); + } + break; + } else { + i2 = i3; + j2 = j3; + i3 = i4; + j3 = j4; + } + } + } + } + return contours; + } + static #douglasPeuckerHelper(points, start, end, output) { + if (end - start <= 4) { + for (let i = start; i < end - 2; i += 2) { + output.push(points[i], points[i + 1]); + } + return; + } + const ax = points[start]; + const ay = points[start + 1]; + const abx = points[end - 4] - ax; + const aby = points[end - 3] - ay; + const dist = Math.hypot(abx, aby); + const nabx = abx / dist; + const naby = aby / dist; + const aa = nabx * ay - naby * ax; + const m = aby / abx; + const invS = 1 / dist; + const phi = Math.atan(m); + const cosPhi = Math.cos(phi); + const sinPhi = Math.sin(phi); + const tmax = invS * (Math.abs(cosPhi) + Math.abs(sinPhi)); + const poly = invS * (1 - tmax + tmax ** 2); + const partialPhi = Math.max(Math.atan(Math.abs(sinPhi + cosPhi) * poly), Math.atan(Math.abs(sinPhi - cosPhi) * poly)); + let dmax = 0; + let index = start; + for (let i = start + 2; i < end - 2; i += 2) { + const d = Math.abs(aa - nabx * points[i + 1] + naby * points[i]); + if (d > dmax) { + index = i; + dmax = d; + } + } + if (dmax > (dist * partialPhi) ** 2) { + this.#douglasPeuckerHelper(points, start, index + 2, output); + this.#douglasPeuckerHelper(points, index, end, output); + } else { + output.push(ax, ay); + } + } + static #douglasPeucker(points) { + const output = []; + const len = points.length; + this.#douglasPeuckerHelper(points, 0, len, output); + output.push(points[len - 2], points[len - 1]); + return output.length <= 4 ? null : output; + } + static #bilateralFilter(buf, width, height, sigmaS, sigmaR, kernelSize) { + const kernel = new Float32Array(kernelSize ** 2); + const sigmaS2 = -2 * sigmaS ** 2; + const halfSize = kernelSize >> 1; + for (let i = 0; i < kernelSize; i++) { + const x = (i - halfSize) ** 2; + for (let j = 0; j < kernelSize; j++) { + kernel[i * kernelSize + j] = Math.exp((x + (j - halfSize) ** 2) / sigmaS2); + } + } + const rangeValues = new Float32Array(256); + const sigmaR2 = -2 * sigmaR ** 2; + for (let i = 0; i < 256; i++) { + rangeValues[i] = Math.exp(i ** 2 / sigmaR2); + } + const N = buf.length; + const out = new Uint8Array(N); + const histogram = new Uint32Array(256); + for (let i = 0; i < height; i++) { + for (let j = 0; j < width; j++) { + const ij = i * width + j; + const center = buf[ij]; + let sum = 0; + let norm = 0; + for (let k = 0; k < kernelSize; k++) { + const y = i + k - halfSize; + if (y < 0 || y >= height) { + continue; + } + for (let l = 0; l < kernelSize; l++) { + const x = j + l - halfSize; + if (x < 0 || x >= width) { + continue; + } + const neighbour = buf[y * width + x]; + const w = kernel[k * kernelSize + l] * rangeValues[Math.abs(neighbour - center)]; + sum += neighbour * w; + norm += w; + } + } + const pix = out[ij] = Math.round(sum / norm); + histogram[pix]++; + } + } + return [out, histogram]; + } + static #getHistogram(buf) { + const histogram = new Uint32Array(256); + for (const g of buf) { + histogram[g]++; + } + return histogram; + } + static #toUint8(buf) { + const N = buf.length; + const out = new Uint8ClampedArray(N >> 2); + let max = -Infinity; + let min = Infinity; + for (let i = 0, ii = out.length; i < ii; i++) { + const pix = out[i] = buf[i << 2]; + max = Math.max(max, pix); + min = Math.min(min, pix); + } + const ratio = 255 / (max - min); + for (let i = 0, ii = out.length; i < ii; i++) { + out[i] = (out[i] - min) * ratio; + } + return out; + } + static #guessThreshold(histogram) { + let i; + let M = -Infinity; + let L = -Infinity; + const min = histogram.findIndex(v => v !== 0); + let pos = min; + let spos = min; + for (i = min; i < 256; i++) { + const v = histogram[i]; + if (v > M) { + if (i - pos > L) { + L = i - pos; + spos = i - 1; + } + M = v; + pos = i; + } + } + for (i = spos - 1; i >= 0; i--) { + if (histogram[i] > histogram[i + 1]) { + break; + } + } + return i; + } + static #getGrayPixels(bitmap) { + const originalBitmap = bitmap; + const { + width, + height + } = bitmap; + const { + maxDim + } = this.#PARAMETERS; + let newWidth = width; + let newHeight = height; + if (width > maxDim || height > maxDim) { + let prevWidth = width; + let prevHeight = height; + let steps = Math.log2(Math.max(width, height) / maxDim); + const isteps = Math.floor(steps); + steps = steps === isteps ? isteps - 1 : isteps; + for (let i = 0; i < steps; i++) { + newWidth = Math.ceil(prevWidth / 2); + newHeight = Math.ceil(prevHeight / 2); + const offscreen = new OffscreenCanvas(newWidth, newHeight); + const ctx = offscreen.getContext("2d"); + ctx.drawImage(bitmap, 0, 0, prevWidth, prevHeight, 0, 0, newWidth, newHeight); + prevWidth = newWidth; + prevHeight = newHeight; + if (bitmap !== originalBitmap) { + bitmap.close(); + } + bitmap = offscreen.transferToImageBitmap(); + } + const ratio = Math.min(maxDim / newWidth, maxDim / newHeight); + newWidth = Math.round(newWidth * ratio); + newHeight = Math.round(newHeight * ratio); + } + const offscreen = new OffscreenCanvas(newWidth, newHeight); + const ctx = offscreen.getContext("2d", { + willReadFrequently: true + }); + ctx.fillStyle = "white"; + ctx.fillRect(0, 0, newWidth, newHeight); + ctx.filter = "grayscale(1)"; + ctx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, newWidth, newHeight); + const grayImage = ctx.getImageData(0, 0, newWidth, newHeight).data; + const uint8Buf = this.#toUint8(grayImage); + return [uint8Buf, newWidth, newHeight]; + } + static extractContoursFromText(text, { + fontFamily, + fontStyle, + fontWeight + }, pageWidth, pageHeight, rotation, innerMargin) { + let canvas = new OffscreenCanvas(1, 1); + let ctx = canvas.getContext("2d", { + alpha: false + }); + const fontSize = 200; + const font = ctx.font = `${fontStyle} ${fontWeight} ${fontSize}px ${fontFamily}`; + const { + actualBoundingBoxLeft, + actualBoundingBoxRight, + actualBoundingBoxAscent, + actualBoundingBoxDescent, + fontBoundingBoxAscent, + fontBoundingBoxDescent, + width + } = ctx.measureText(text); + const SCALE = 1.5; + const canvasWidth = Math.ceil(Math.max(Math.abs(actualBoundingBoxLeft) + Math.abs(actualBoundingBoxRight) || 0, width) * SCALE); + const canvasHeight = Math.ceil(Math.max(Math.abs(actualBoundingBoxAscent) + Math.abs(actualBoundingBoxDescent) || fontSize, Math.abs(fontBoundingBoxAscent) + Math.abs(fontBoundingBoxDescent) || fontSize) * SCALE); + canvas = new OffscreenCanvas(canvasWidth, canvasHeight); + ctx = canvas.getContext("2d", { + alpha: true, + willReadFrequently: true + }); + ctx.font = font; + ctx.filter = "grayscale(1)"; + ctx.fillStyle = "white"; + ctx.fillRect(0, 0, canvasWidth, canvasHeight); + ctx.fillStyle = "black"; + ctx.fillText(text, canvasWidth * (SCALE - 1) / 2, canvasHeight * (3 - SCALE) / 2); + const uint8Buf = this.#toUint8(ctx.getImageData(0, 0, canvasWidth, canvasHeight).data); + const histogram = this.#getHistogram(uint8Buf); + const threshold = this.#guessThreshold(histogram); + const contourList = this.#findContours(uint8Buf, canvasWidth, canvasHeight, threshold); + return this.processDrawnLines({ + lines: { + curves: contourList, + width: canvasWidth, + height: canvasHeight + }, + pageWidth, + pageHeight, + rotation, + innerMargin, + mustSmooth: true, + areContours: true + }); + } + static process(bitmap, pageWidth, pageHeight, rotation, innerMargin) { + const [uint8Buf, width, height] = this.#getGrayPixels(bitmap); + const [buffer, histogram] = this.#bilateralFilter(uint8Buf, width, height, Math.hypot(width, height) * this.#PARAMETERS.sigmaSFactor, this.#PARAMETERS.sigmaR, this.#PARAMETERS.kernelSize); + const threshold = this.#guessThreshold(histogram); + const contourList = this.#findContours(buffer, width, height, threshold); + return this.processDrawnLines({ + lines: { + curves: contourList, + width, + height + }, + pageWidth, + pageHeight, + rotation, + innerMargin, + mustSmooth: true, + areContours: true + }); + } + static processDrawnLines({ + lines, + pageWidth, + pageHeight, + rotation, + innerMargin, + mustSmooth, + areContours + }) { + if (rotation % 180 !== 0) { + [pageWidth, pageHeight] = [pageHeight, pageWidth]; + } + const { + curves, + width, + height + } = lines; + const thickness = lines.thickness ?? 0; + const linesAndPoints = []; + const ratio = Math.min(pageWidth / width, pageHeight / height); + const xScale = ratio / pageWidth; + const yScale = ratio / pageHeight; + const newCurves = []; + for (const { + points + } of curves) { + const reducedPoints = mustSmooth ? this.#douglasPeucker(points) : points; + if (!reducedPoints) { + continue; + } + newCurves.push(reducedPoints); + const len = reducedPoints.length; + const newPoints = new Float32Array(len); + const line = new Float32Array(3 * (len === 2 ? 2 : len - 2)); + linesAndPoints.push({ + line, + points: newPoints + }); + if (len === 2) { + newPoints[0] = reducedPoints[0] * xScale; + newPoints[1] = reducedPoints[1] * yScale; + line.set([NaN, NaN, NaN, NaN, newPoints[0], newPoints[1]], 0); + continue; + } + let [x1, y1, x2, y2] = reducedPoints; + x1 *= xScale; + y1 *= yScale; + x2 *= xScale; + y2 *= yScale; + newPoints.set([x1, y1, x2, y2], 0); + line.set([NaN, NaN, NaN, NaN, x1, y1], 0); + for (let i = 4; i < len; i += 2) { + const x = newPoints[i] = reducedPoints[i] * xScale; + const y = newPoints[i + 1] = reducedPoints[i + 1] * yScale; + line.set(Outline.createBezierPoints(x1, y1, x2, y2, x, y), (i - 2) * 3); + [x1, y1, x2, y2] = [x2, y2, x, y]; + } + } + if (linesAndPoints.length === 0) { + return null; + } + const outline = areContours ? new ContourDrawOutline() : new InkDrawOutline(); + outline.build(linesAndPoints, pageWidth, pageHeight, 1, rotation, areContours ? 0 : thickness, innerMargin); + return { + outline, + newCurves, + areContours, + thickness, + width, + height + }; + } + static async compressSignature({ + outlines, + areContours, + thickness, + width, + height + }) { + let minDiff = Infinity; + let maxDiff = -Infinity; + let outlinesLength = 0; + for (const points of outlines) { + outlinesLength += points.length; + for (let i = 2, ii = points.length; i < ii; i++) { + const dx = points[i] - points[i - 2]; + minDiff = Math.min(minDiff, dx); + maxDiff = Math.max(maxDiff, dx); + } + } + let bufferType; + if (minDiff >= -128 && maxDiff <= 127) { + bufferType = Int8Array; + } else if (minDiff >= -32768 && maxDiff <= 32767) { + bufferType = Int16Array; + } else { + bufferType = Int32Array; + } + const len = outlines.length; + const headerLength = BASE_HEADER_LENGTH + POINTS_PROPERTIES_NUMBER * len; + const header = new Uint32Array(headerLength); + let offset = 0; + header[offset++] = headerLength * Uint32Array.BYTES_PER_ELEMENT + (outlinesLength - 2 * len) * bufferType.BYTES_PER_ELEMENT; + header[offset++] = 0; + header[offset++] = width; + header[offset++] = height; + header[offset++] = areContours ? 0 : 1; + header[offset++] = Math.max(0, Math.floor(thickness ?? 0)); + header[offset++] = len; + header[offset++] = bufferType.BYTES_PER_ELEMENT; + for (const points of outlines) { + header[offset++] = points.length - 2; + header[offset++] = points[0]; + header[offset++] = points[1]; + } + const cs = new CompressionStream("deflate-raw"); + const writer = cs.writable.getWriter(); + await writer.ready; + writer.write(header); + const BufferCtor = bufferType.prototype.constructor; + for (const points of outlines) { + const diffs = new BufferCtor(points.length - 2); + for (let i = 2, ii = points.length; i < ii; i++) { + diffs[i - 2] = points[i] - points[i - 2]; + } + writer.write(diffs); + } + writer.close(); + const buf = await new Response(cs.readable).arrayBuffer(); + const bytes = new Uint8Array(buf); + return toBase64Util(bytes); + } + static async decompressSignature(signatureData) { + try { + const bytes = fromBase64Util(signatureData); + const { + readable, + writable + } = new DecompressionStream("deflate-raw"); + const writer = writable.getWriter(); + await writer.ready; + writer.write(bytes).then(async () => { + await writer.ready; + await writer.close(); + }).catch(() => {}); + let data = null; + let offset = 0; + for await (const chunk of readable) { + data ||= new Uint8Array(new Uint32Array(chunk.buffer, 0, 4)[0]); + data.set(chunk, offset); + offset += chunk.length; + } + const header = new Uint32Array(data.buffer, 0, data.length >> 2); + const version = header[1]; + if (version !== 0) { + throw new Error(`Invalid version: ${version}`); + } + const width = header[2]; + const height = header[3]; + const areContours = header[4] === 0; + const thickness = header[5]; + const numberOfDrawings = header[6]; + const bufferType = header[7]; + const outlines = []; + const diffsOffset = (BASE_HEADER_LENGTH + POINTS_PROPERTIES_NUMBER * numberOfDrawings) * Uint32Array.BYTES_PER_ELEMENT; + let diffs; + switch (bufferType) { + case Int8Array.BYTES_PER_ELEMENT: + diffs = new Int8Array(data.buffer, diffsOffset); + break; + case Int16Array.BYTES_PER_ELEMENT: + diffs = new Int16Array(data.buffer, diffsOffset); + break; + case Int32Array.BYTES_PER_ELEMENT: + diffs = new Int32Array(data.buffer, diffsOffset); + break; + } + offset = 0; + for (let i = 0; i < numberOfDrawings; i++) { + const len = header[POINTS_PROPERTIES_NUMBER * i + BASE_HEADER_LENGTH]; + const points = new Float32Array(len + 2); + outlines.push(points); + for (let j = 0; j < POINTS_PROPERTIES_NUMBER - 1; j++) { + points[j] = header[POINTS_PROPERTIES_NUMBER * i + BASE_HEADER_LENGTH + j + 1]; + } + for (let j = 0; j < len; j++) { + points[j + 2] = points[j] + diffs[offset++]; + } + } + return { + areContours, + thickness, + outlines, + width, + height + }; + } catch (e) { + warn(`decompressSignature: ${e}`); + return null; + } + } +} + +;// ./src/display/editor/signature.js + + + + + + + +class SignatureOptions extends DrawingOptions { + constructor() { + super(); + super.updateProperties({ + fill: AnnotationEditor._defaultLineColor, + "stroke-width": 0 + }); + } + clone() { + const clone = new SignatureOptions(); + clone.updateAll(this); + return clone; + } +} +class DrawnSignatureOptions extends InkDrawingOptions { + constructor(viewerParameters) { + super(viewerParameters); + super.updateProperties({ + stroke: AnnotationEditor._defaultLineColor, + "stroke-width": 1 + }); + } + clone() { + const clone = new DrawnSignatureOptions(this._viewParameters); + clone.updateAll(this); + return clone; + } +} +class SignatureEditor extends DrawingEditor { + #isExtracted = false; + #description = null; + #signatureData = null; + #signatureUUID = null; + static _type = "signature"; + static _editorType = AnnotationEditorType.SIGNATURE; + static _defaultDrawingOptions = null; + constructor(params) { + super({ + ...params, + mustBeCommitted: true, + name: "signatureEditor" + }); + this._willKeepAspectRatio = true; + this.#signatureData = params.signatureData || null; + this.#description = null; + this.defaultL10nId = "pdfjs-editor-signature-editor1"; + } + static initialize(l10n, uiManager) { + AnnotationEditor.initialize(l10n, uiManager); + this._defaultDrawingOptions = new SignatureOptions(); + this._defaultDrawnSignatureOptions = new DrawnSignatureOptions(uiManager.viewParameters); + } + static getDefaultDrawingOptions(options) { + const clone = this._defaultDrawingOptions.clone(); + clone.updateProperties(options); + return clone; + } + static get supportMultipleDrawings() { + return false; + } + static get typesMap() { + return shadow(this, "typesMap", new Map()); + } + static get isDrawer() { + return false; + } + get telemetryFinalData() { + return { + type: "signature", + hasDescription: !!this.#description + }; + } + static computeTelemetryFinalData(data) { + const hasDescriptionStats = data.get("hasDescription"); + return { + hasAltText: hasDescriptionStats.get(true) ?? 0, + hasNoAltText: hasDescriptionStats.get(false) ?? 0 + }; + } + get isResizable() { + return true; + } + onScaleChanging() { + if (this._drawId === null) { + return; + } + super.onScaleChanging(); + } + render() { + if (this.div) { + return this.div; + } + let baseX, baseY; + const { + _isCopy + } = this; + if (_isCopy) { + this._isCopy = false; + baseX = this.x; + baseY = this.y; + } + super.render(); + if (this._drawId === null) { + if (this.#signatureData) { + const { + lines, + mustSmooth, + areContours, + description, + uuid, + heightInPage + } = this.#signatureData; + const { + rawDims: { + pageWidth, + pageHeight + }, + rotation + } = this.parent.viewport; + const outline = SignatureExtractor.processDrawnLines({ + lines, + pageWidth, + pageHeight, + rotation, + innerMargin: SignatureEditor._INNER_MARGIN, + mustSmooth, + areContours + }); + this.addSignature(outline, heightInPage, description, uuid); + } else { + this.div.setAttribute("data-l10n-args", JSON.stringify({ + description: "" + })); + this.div.hidden = true; + this._uiManager.getSignature(this); + } + } else { + this.div.setAttribute("data-l10n-args", JSON.stringify({ + description: this.#description || "" + })); + } + if (_isCopy) { + this._isCopy = true; + this._moveAfterPaste(baseX, baseY); + } + return this.div; + } + setUuid(uuid) { + this.#signatureUUID = uuid; + this.addEditToolbar(); + } + getUuid() { + return this.#signatureUUID; + } + get description() { + return this.#description; + } + set description(description) { + this.#description = description; + if (!this.div) { + return; + } + this.div.setAttribute("data-l10n-args", JSON.stringify({ + description + })); + super.addEditToolbar().then(toolbar => { + toolbar?.updateEditSignatureButton(description); + }); + } + getSignaturePreview() { + const { + newCurves, + areContours, + thickness, + width, + height + } = this.#signatureData; + const maxDim = Math.max(width, height); + const outlineData = SignatureExtractor.processDrawnLines({ + lines: { + curves: newCurves.map(points => ({ + points + })), + thickness, + width, + height + }, + pageWidth: maxDim, + pageHeight: maxDim, + rotation: 0, + innerMargin: 0, + mustSmooth: false, + areContours + }); + return { + areContours, + outline: outlineData.outline + }; + } + get toolbarButtons() { + if (this._uiManager.signatureManager) { + return [["editSignature", this._uiManager.signatureManager]]; + } + return super.toolbarButtons; + } + addSignature(data, heightInPage, description, uuid) { + const { + x: savedX, + y: savedY + } = this; + const { + outline + } = this.#signatureData = data; + this.#isExtracted = outline instanceof ContourDrawOutline; + this.description = description; + let drawingOptions; + if (this.#isExtracted) { + drawingOptions = SignatureEditor.getDefaultDrawingOptions(); + } else { + drawingOptions = SignatureEditor._defaultDrawnSignatureOptions.clone(); + drawingOptions.updateProperties({ + "stroke-width": outline.thickness + }); + } + this._addOutlines({ + drawOutlines: outline, + drawingOptions + }); + const [, pageHeight] = this.pageDimensions; + let newHeight = heightInPage / pageHeight; + newHeight = newHeight >= 1 ? 0.5 : newHeight; + this.width *= newHeight / this.height; + if (this.width >= 1) { + newHeight *= 0.9 / this.width; + this.width = 0.9; + } + this.height = newHeight; + this.setDims(); + this.x = savedX; + this.y = savedY; + this.center(); + this._onResized(); + this.onScaleChanging(); + this.rotate(); + this._uiManager.addToAnnotationStorage(this); + this.setUuid(uuid); + this._reportTelemetry({ + action: "pdfjs.signature.inserted", + data: { + hasBeenSaved: !!uuid, + hasDescription: !!description + } + }); + this.div.hidden = false; + } + getFromImage(bitmap) { + const { + rawDims: { + pageWidth, + pageHeight + }, + rotation + } = this.parent.viewport; + return SignatureExtractor.process(bitmap, pageWidth, pageHeight, rotation, SignatureEditor._INNER_MARGIN); + } + getFromText(text, fontInfo) { + const { + rawDims: { + pageWidth, + pageHeight + }, + rotation + } = this.parent.viewport; + return SignatureExtractor.extractContoursFromText(text, fontInfo, pageWidth, pageHeight, rotation, SignatureEditor._INNER_MARGIN); + } + getDrawnSignature(curves) { + const { + rawDims: { + pageWidth, + pageHeight + }, + rotation + } = this.parent.viewport; + return SignatureExtractor.processDrawnLines({ + lines: curves, + pageWidth, + pageHeight, + rotation, + innerMargin: SignatureEditor._INNER_MARGIN, + mustSmooth: false, + areContours: false + }); + } + createDrawingOptions({ + areContours, + thickness + }) { + if (areContours) { + this._drawingOptions = SignatureEditor.getDefaultDrawingOptions(); + } else { + this._drawingOptions = SignatureEditor._defaultDrawnSignatureOptions.clone(); + this._drawingOptions.updateProperties({ + "stroke-width": thickness + }); + } + } + serialize(isForCopying = false) { + if (this.isEmpty()) { + return null; + } + const { + lines, + points + } = this.serializeDraw(isForCopying); + const { + _drawingOptions: { + "stroke-width": thickness + } + } = this; + const serialized = Object.assign(super.serialize(isForCopying), { + isSignature: true, + areContours: this.#isExtracted, + color: [0, 0, 0], + thickness: this.#isExtracted ? 0 : thickness + }); + this.addComment(serialized); + if (isForCopying) { + serialized.paths = { + lines, + points + }; + serialized.uuid = this.#signatureUUID; + serialized.isCopy = true; + } else { + serialized.lines = lines; + } + if (this.#description) { + serialized.accessibilityData = { + type: "Figure", + alt: this.#description + }; + } + return serialized; + } + static deserializeDraw(pageX, pageY, pageWidth, pageHeight, innerMargin, data) { + if (data.areContours) { + return ContourDrawOutline.deserialize(pageX, pageY, pageWidth, pageHeight, innerMargin, data); + } + return InkDrawOutline.deserialize(pageX, pageY, pageWidth, pageHeight, innerMargin, data); + } + static async deserialize(data, parent, uiManager) { + const editor = await super.deserialize(data, parent, uiManager); + editor.#isExtracted = data.areContours; + editor.description = data.accessibilityData?.alt || ""; + editor.#signatureUUID = data.uuid; + return editor; + } +} + +;// ./src/display/editor/stamp.js + + + + +class StampEditor extends AnnotationEditor { + #bitmap = null; + #bitmapId = null; + #bitmapPromise = null; + #bitmapUrl = null; + #bitmapFile = null; + #bitmapFileName = ""; + #canvas = null; + #missingCanvas = false; + #resizeTimeoutId = null; + #isSvg = false; + #hasBeenAddedInUndoStack = false; + static _type = "stamp"; + static _editorType = AnnotationEditorType.STAMP; + constructor(params) { + super({ + ...params, + name: "stampEditor" + }); + this.#bitmapUrl = params.bitmapUrl; + this.#bitmapFile = params.bitmapFile; + this.defaultL10nId = "pdfjs-editor-stamp-editor"; + } + static initialize(l10n, uiManager) { + AnnotationEditor.initialize(l10n, uiManager); + } + static isHandlingMimeForPasting(mime) { + return SupportedImageMimeTypes.includes(mime); + } + static paste(item, parent) { + parent.pasteEditor({ + mode: AnnotationEditorType.STAMP + }, { + bitmapFile: item.getAsFile() + }); + } + altTextFinish() { + if (this._uiManager.useNewAltTextFlow) { + this.div.hidden = false; + } + super.altTextFinish(); + } + get telemetryFinalData() { + return { + type: "stamp", + hasAltText: !!this.altTextData?.altText + }; + } + static computeTelemetryFinalData(data) { + const hasAltTextStats = data.get("hasAltText"); + return { + hasAltText: hasAltTextStats.get(true) ?? 0, + hasNoAltText: hasAltTextStats.get(false) ?? 0 + }; + } + #getBitmapFetched(data, fromId = false) { + if (!data) { + this.remove(); + return; + } + this.#bitmap = data.bitmap; + if (!fromId) { + this.#bitmapId = data.id; + this.#isSvg = data.isSvg; + } + if (data.file) { + this.#bitmapFileName = data.file.name; + } + this.#createCanvas(); + } + #getBitmapDone() { + this.#bitmapPromise = null; + this._uiManager.enableWaiting(false); + if (!this.#canvas) { + return; + } + if (this._uiManager.useNewAltTextWhenAddingImage && this._uiManager.useNewAltTextFlow && this.#bitmap) { + this.addEditToolbar().then(() => { + this._editToolbar.hide(); + this._uiManager.editAltText(this, true); + }); + return; + } + if (!this._uiManager.useNewAltTextWhenAddingImage && this._uiManager.useNewAltTextFlow && this.#bitmap) { + this._reportTelemetry({ + action: "pdfjs.image.image_added", + data: { + alt_text_modal: false, + alt_text_type: "empty" + } + }); + try { + this.mlGuessAltText(); + } catch {} + } + this.div.focus(); + } + async mlGuessAltText(imageData = null, updateAltTextData = true) { + if (this.hasAltTextData()) { + return null; + } + const { + mlManager + } = this._uiManager; + if (!mlManager) { + throw new Error("No ML."); + } + if (!(await mlManager.isEnabledFor("altText"))) { + throw new Error("ML isn't enabled for alt text."); + } + const { + data, + width, + height + } = imageData || this.copyCanvas(null, null, true).imageData; + const response = await mlManager.guess({ + name: "altText", + request: { + data, + width, + height, + channels: data.length / (width * height) + } + }); + if (!response) { + throw new Error("No response from the AI service."); + } + if (response.error) { + throw new Error("Error from the AI service."); + } + if (response.cancel) { + return null; + } + if (!response.output) { + throw new Error("No valid response from the AI service."); + } + const altText = response.output; + await this.setGuessedAltText(altText); + if (updateAltTextData && !this.hasAltTextData()) { + this.altTextData = { + alt: altText, + decorative: false + }; + } + return altText; + } + #getBitmap() { + if (this.#bitmapId) { + this._uiManager.enableWaiting(true); + this._uiManager.imageManager.getFromId(this.#bitmapId).then(data => this.#getBitmapFetched(data, true)).finally(() => this.#getBitmapDone()); + return; + } + if (this.#bitmapUrl) { + const url = this.#bitmapUrl; + this.#bitmapUrl = null; + this._uiManager.enableWaiting(true); + this.#bitmapPromise = this._uiManager.imageManager.getFromUrl(url).then(data => this.#getBitmapFetched(data)).finally(() => this.#getBitmapDone()); + return; + } + if (this.#bitmapFile) { + const file = this.#bitmapFile; + this.#bitmapFile = null; + this._uiManager.enableWaiting(true); + this.#bitmapPromise = this._uiManager.imageManager.getFromFile(file).then(data => this.#getBitmapFetched(data)).finally(() => this.#getBitmapDone()); + return; + } + const input = document.createElement("input"); + input.type = "file"; + input.accept = SupportedImageMimeTypes.join(","); + const signal = this._uiManager._signal; + this.#bitmapPromise = new Promise(resolve => { + input.addEventListener("change", async () => { + if (!input.files || input.files.length === 0) { + this.remove(); + } else { + this._uiManager.enableWaiting(true); + const data = await this._uiManager.imageManager.getFromFile(input.files[0]); + this._reportTelemetry({ + action: "pdfjs.image.image_selected", + data: { + alt_text_modal: this._uiManager.useNewAltTextFlow + } + }); + this.#getBitmapFetched(data); + } + resolve(); + }, { + signal + }); + input.addEventListener("cancel", () => { + this.remove(); + resolve(); + }, { + signal + }); + }).finally(() => this.#getBitmapDone()); + input.click(); + } + remove() { + if (this.#bitmapId) { + this.#bitmap = null; + this._uiManager.imageManager.deleteId(this.#bitmapId); + this.#canvas?.remove(); + this.#canvas = null; + if (this.#resizeTimeoutId) { + clearTimeout(this.#resizeTimeoutId); + this.#resizeTimeoutId = null; + } + } + super.remove(); + } + rebuild() { + if (!this.parent) { + if (this.#bitmapId) { + this.#getBitmap(); + } + return; + } + super.rebuild(); + if (this.div === null) { + return; + } + if (this.#bitmapId && this.#canvas === null) { + this.#getBitmap(); + } + if (!this.isAttachedToDOM) { + this.parent.add(this); + } + } + onceAdded(focus) { + this._isDraggable = true; + if (focus) { + this.div.focus(); + } + } + isEmpty() { + return !(this.#bitmapPromise || this.#bitmap || this.#bitmapUrl || this.#bitmapFile || this.#bitmapId || this.#missingCanvas); + } + get toolbarButtons() { + return [["altText", this.createAltText()]]; + } + get isResizable() { + return true; + } + render() { + if (this.div) { + return this.div; + } + let baseX, baseY; + if (this._isCopy) { + baseX = this.x; + baseY = this.y; + } + super.render(); + this.div.hidden = true; + this.createAltText(); + if (!this.#missingCanvas) { + if (this.#bitmap) { + this.#createCanvas(); + } else { + this.#getBitmap(); + } + } + if (this._isCopy) { + this._moveAfterPaste(baseX, baseY); + } + this._uiManager.addShouldRescale(this); + return this.div; + } + setCanvas(annotationElementId, canvas) { + const { + id: bitmapId, + bitmap + } = this._uiManager.imageManager.getFromCanvas(annotationElementId, canvas); + canvas.remove(); + if (bitmapId && this._uiManager.imageManager.isValidId(bitmapId)) { + this.#bitmapId = bitmapId; + if (bitmap) { + this.#bitmap = bitmap; + } + this.#missingCanvas = false; + this.#createCanvas(); + } + } + _onResized() { + this.onScaleChanging(); + } + onScaleChanging() { + if (!this.parent) { + return; + } + if (this.#resizeTimeoutId !== null) { + clearTimeout(this.#resizeTimeoutId); + } + const TIME_TO_WAIT = 200; + this.#resizeTimeoutId = setTimeout(() => { + this.#resizeTimeoutId = null; + this.#drawBitmap(); + }, TIME_TO_WAIT); + } + #createCanvas() { + const { + div + } = this; + let { + width, + height + } = this.#bitmap; + const [pageWidth, pageHeight] = this.pageDimensions; + const MAX_RATIO = 0.75; + if (this.width) { + width = this.width * pageWidth; + height = this.height * pageHeight; + } else if (width > MAX_RATIO * pageWidth || height > MAX_RATIO * pageHeight) { + const factor = Math.min(MAX_RATIO * pageWidth / width, MAX_RATIO * pageHeight / height); + width *= factor; + height *= factor; + } + this._uiManager.enableWaiting(false); + const canvas = this.#canvas = document.createElement("canvas"); + canvas.setAttribute("role", "img"); + this.addContainer(canvas); + this.width = width / pageWidth; + this.height = height / pageHeight; + this.setDims(); + if (this._initialOptions?.isCentered) { + this.center(); + } else { + this.fixAndSetPosition(); + } + this._initialOptions = null; + if (!this._uiManager.useNewAltTextWhenAddingImage || !this._uiManager.useNewAltTextFlow || this.annotationElementId) { + div.hidden = false; + } + this.#drawBitmap(); + if (!this.#hasBeenAddedInUndoStack) { + this.parent.addUndoableEditor(this); + this.#hasBeenAddedInUndoStack = true; + } + this._reportTelemetry({ + action: "inserted_image" + }); + if (this.#bitmapFileName) { + this.div.setAttribute("aria-description", this.#bitmapFileName); + } + if (!this.annotationElementId) { + this._uiManager.a11yAlert("pdfjs-editor-stamp-added-alert"); + } + } + copyCanvas(maxDataDimension, maxPreviewDimension, createImageData = false) { + if (!maxDataDimension) { + maxDataDimension = 224; + } + const { + width: bitmapWidth, + height: bitmapHeight + } = this.#bitmap; + const outputScale = new OutputScale(); + let bitmap = this.#bitmap; + let width = bitmapWidth, + height = bitmapHeight; + let canvas = null; + if (maxPreviewDimension) { + if (bitmapWidth > maxPreviewDimension || bitmapHeight > maxPreviewDimension) { + const ratio = Math.min(maxPreviewDimension / bitmapWidth, maxPreviewDimension / bitmapHeight); + width = Math.floor(bitmapWidth * ratio); + height = Math.floor(bitmapHeight * ratio); + } + canvas = document.createElement("canvas"); + const scaledWidth = canvas.width = Math.ceil(width * outputScale.sx); + const scaledHeight = canvas.height = Math.ceil(height * outputScale.sy); + if (!this.#isSvg) { + bitmap = this.#scaleBitmap(scaledWidth, scaledHeight); + } + const ctx = canvas.getContext("2d"); + ctx.filter = this._uiManager.hcmFilter; + let white = "white", + black = "#cfcfd8"; + if (this._uiManager.hcmFilter !== "none") { + black = "black"; + } else if (ColorScheme.isDarkMode) { + white = "#8f8f9d"; + black = "#42414d"; + } + const boxDim = 15; + const boxDimWidth = boxDim * outputScale.sx; + const boxDimHeight = boxDim * outputScale.sy; + const pattern = new OffscreenCanvas(boxDimWidth * 2, boxDimHeight * 2); + const patternCtx = pattern.getContext("2d"); + patternCtx.fillStyle = white; + patternCtx.fillRect(0, 0, boxDimWidth * 2, boxDimHeight * 2); + patternCtx.fillStyle = black; + patternCtx.fillRect(0, 0, boxDimWidth, boxDimHeight); + patternCtx.fillRect(boxDimWidth, boxDimHeight, boxDimWidth, boxDimHeight); + ctx.fillStyle = ctx.createPattern(pattern, "repeat"); + ctx.fillRect(0, 0, scaledWidth, scaledHeight); + ctx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, scaledWidth, scaledHeight); + } + let imageData = null; + if (createImageData) { + let dataWidth, dataHeight; + if (outputScale.symmetric && bitmap.width < maxDataDimension && bitmap.height < maxDataDimension) { + dataWidth = bitmap.width; + dataHeight = bitmap.height; + } else { + bitmap = this.#bitmap; + if (bitmapWidth > maxDataDimension || bitmapHeight > maxDataDimension) { + const ratio = Math.min(maxDataDimension / bitmapWidth, maxDataDimension / bitmapHeight); + dataWidth = Math.floor(bitmapWidth * ratio); + dataHeight = Math.floor(bitmapHeight * ratio); + if (!this.#isSvg) { + bitmap = this.#scaleBitmap(dataWidth, dataHeight); + } + } + } + const offscreen = new OffscreenCanvas(dataWidth, dataHeight); + const offscreenCtx = offscreen.getContext("2d", { + willReadFrequently: true + }); + offscreenCtx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, dataWidth, dataHeight); + imageData = { + width: dataWidth, + height: dataHeight, + data: offscreenCtx.getImageData(0, 0, dataWidth, dataHeight).data + }; + } + return { + canvas, + width, + height, + imageData + }; + } + #scaleBitmap(width, height) { + const { + width: bitmapWidth, + height: bitmapHeight + } = this.#bitmap; + let newWidth = bitmapWidth; + let newHeight = bitmapHeight; + let bitmap = this.#bitmap; + while (newWidth > 2 * width || newHeight > 2 * height) { + const prevWidth = newWidth; + const prevHeight = newHeight; + if (newWidth > 2 * width) { + newWidth = newWidth >= 16384 ? Math.floor(newWidth / 2) - 1 : Math.ceil(newWidth / 2); + } + if (newHeight > 2 * height) { + newHeight = newHeight >= 16384 ? Math.floor(newHeight / 2) - 1 : Math.ceil(newHeight / 2); + } + const offscreen = new OffscreenCanvas(newWidth, newHeight); + const ctx = offscreen.getContext("2d"); + ctx.drawImage(bitmap, 0, 0, prevWidth, prevHeight, 0, 0, newWidth, newHeight); + bitmap = offscreen.transferToImageBitmap(); + } + return bitmap; + } + #drawBitmap() { + const [parentWidth, parentHeight] = this.parentDimensions; + const { + width, + height + } = this; + const outputScale = new OutputScale(); + const scaledWidth = Math.ceil(width * parentWidth * outputScale.sx); + const scaledHeight = Math.ceil(height * parentHeight * outputScale.sy); + const canvas = this.#canvas; + if (!canvas || canvas.width === scaledWidth && canvas.height === scaledHeight) { + return; + } + canvas.width = scaledWidth; + canvas.height = scaledHeight; + const bitmap = this.#isSvg ? this.#bitmap : this.#scaleBitmap(scaledWidth, scaledHeight); + const ctx = canvas.getContext("2d"); + ctx.filter = this._uiManager.hcmFilter; + ctx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, scaledWidth, scaledHeight); + } + #serializeBitmap(toUrl) { + if (toUrl) { + if (this.#isSvg) { + const url = this._uiManager.imageManager.getSvgUrl(this.#bitmapId); + if (url) { + return url; + } + } + const canvas = document.createElement("canvas"); + ({ + width: canvas.width, + height: canvas.height + } = this.#bitmap); + const ctx = canvas.getContext("2d"); + ctx.drawImage(this.#bitmap, 0, 0); + return canvas.toDataURL(); + } + if (this.#isSvg) { + const [pageWidth, pageHeight] = this.pageDimensions; + const width = Math.round(this.width * pageWidth * PixelsPerInch.PDF_TO_CSS_UNITS); + const height = Math.round(this.height * pageHeight * PixelsPerInch.PDF_TO_CSS_UNITS); + const offscreen = new OffscreenCanvas(width, height); + const ctx = offscreen.getContext("2d"); + ctx.drawImage(this.#bitmap, 0, 0, this.#bitmap.width, this.#bitmap.height, 0, 0, width, height); + return offscreen.transferToImageBitmap(); + } + return structuredClone(this.#bitmap); + } + static async deserialize(data, parent, uiManager) { + let initialData = null; + let missingCanvas = false; + if (data instanceof StampAnnotationElement) { + const { + data: { + rect, + rotation, + id, + structParent, + popupRef, + richText, + contentsObj, + creationDate, + modificationDate + }, + container, + parent: { + page: { + pageNumber + } + }, + canvas + } = data; + let bitmapId, bitmap; + if (canvas) { + delete data.canvas; + ({ + id: bitmapId, + bitmap + } = uiManager.imageManager.getFromCanvas(container.id, canvas)); + canvas.remove(); + } else { + missingCanvas = true; + data._hasNoCanvas = true; + } + const altText = (await parent._structTree.getAriaAttributes(`${AnnotationPrefix}${id}`))?.get("aria-label") || ""; + initialData = data = { + annotationType: AnnotationEditorType.STAMP, + bitmapId, + bitmap, + pageIndex: pageNumber - 1, + rect: rect.slice(0), + rotation, + annotationElementId: id, + id, + deleted: false, + accessibilityData: { + decorative: false, + altText + }, + isSvg: false, + structParent, + popupRef, + richText, + comment: contentsObj?.str || null, + creationDate, + modificationDate + }; + } + const editor = await super.deserialize(data, parent, uiManager); + const { + rect, + bitmap, + bitmapUrl, + bitmapId, + isSvg, + accessibilityData + } = data; + if (missingCanvas) { + uiManager.addMissingCanvas(data.id, editor); + editor.#missingCanvas = true; + } else if (bitmapId && uiManager.imageManager.isValidId(bitmapId)) { + editor.#bitmapId = bitmapId; + if (bitmap) { + editor.#bitmap = bitmap; + } + } else { + editor.#bitmapUrl = bitmapUrl; + } + editor.#isSvg = isSvg; + const [parentWidth, parentHeight] = editor.pageDimensions; + editor.width = (rect[2] - rect[0]) / parentWidth; + editor.height = (rect[3] - rect[1]) / parentHeight; + if (accessibilityData) { + editor.altTextData = accessibilityData; + } + editor._initialData = initialData; + if (data.comment) { + editor.setCommentData(data); + } + editor.#hasBeenAddedInUndoStack = !!initialData; + return editor; + } + serialize(isForCopying = false, context = null) { + if (this.isEmpty()) { + return null; + } + if (this.deleted) { + return this.serializeDeleted(); + } + const serialized = Object.assign(super.serialize(isForCopying), { + bitmapId: this.#bitmapId, + isSvg: this.#isSvg + }); + this.addComment(serialized); + if (isForCopying) { + serialized.bitmapUrl = this.#serializeBitmap(true); + serialized.accessibilityData = this.serializeAltText(true); + serialized.isCopy = true; + return serialized; + } + const { + decorative, + altText + } = this.serializeAltText(false); + if (!decorative && altText) { + serialized.accessibilityData = { + type: "Figure", + alt: altText + }; + } + if (this.annotationElementId) { + const changes = this.#hasElementChanged(serialized); + if (changes.isSame) { + return null; + } + if (changes.isSameAltText) { + delete serialized.accessibilityData; + } else { + serialized.accessibilityData.structParent = this._initialData.structParent ?? -1; + } + serialized.id = this.annotationElementId; + delete serialized.bitmapId; + return serialized; + } + if (context === null) { + return serialized; + } + context.stamps ||= new Map(); + const area = this.#isSvg ? (serialized.rect[2] - serialized.rect[0]) * (serialized.rect[3] - serialized.rect[1]) : null; + if (!context.stamps.has(this.#bitmapId)) { + context.stamps.set(this.#bitmapId, { + area, + serialized + }); + serialized.bitmap = this.#serializeBitmap(false); + } else if (this.#isSvg) { + const prevData = context.stamps.get(this.#bitmapId); + if (area > prevData.area) { + prevData.area = area; + prevData.serialized.bitmap.close(); + prevData.serialized.bitmap = this.#serializeBitmap(false); + } + } + return serialized; + } + #hasElementChanged(serialized) { + const { + pageIndex, + accessibilityData: { + altText + } + } = this._initialData; + const isSamePageIndex = serialized.pageIndex === pageIndex; + const isSameAltText = (serialized.accessibilityData?.alt || "") === altText; + return { + isSame: !this.hasEditedComment && !this._hasBeenMoved && !this._hasBeenResized && isSamePageIndex && isSameAltText, + isSameAltText + }; + } + renderAnnotationElement(annotation) { + if (this.deleted) { + annotation.hide(); + return null; + } + annotation.updateEdited({ + rect: this.getPDFRect(), + popup: this.comment + }); + return null; + } +} + +;// ./src/display/editor/annotation_editor_layer.js + + + + + + + + +class AnnotationEditorLayer { + #accessibilityManager; + #allowClick = false; + #annotationLayer = null; + #clickAC = null; + #editorFocusTimeoutId = null; + #editors = new Map(); + #hadPointerDown = false; + #isDisabling = false; + #isEnabling = false; + #drawingAC = null; + #focusedElement = null; + #textLayer = null; + #textSelectionAC = null; + #textLayerDblClickAC = null; + #lastPointerDownTimestamp = -1; + #uiManager; + static _initialized = false; + static #editorTypes = new Map([FreeTextEditor, InkEditor, StampEditor, HighlightEditor, SignatureEditor].map(type => [type._editorType, type])); + constructor({ + uiManager, + pageIndex, + div, + structTreeLayer, + accessibilityManager, + annotationLayer, + drawLayer, + textLayer, + viewport, + l10n + }) { + const editorTypes = [...AnnotationEditorLayer.#editorTypes.values()]; + if (!AnnotationEditorLayer._initialized) { + AnnotationEditorLayer._initialized = true; + for (const editorType of editorTypes) { + editorType.initialize(l10n, uiManager); + } + } + uiManager.registerEditorTypes(editorTypes); + this.#uiManager = uiManager; + this.pageIndex = pageIndex; + this.div = div; + this.#accessibilityManager = accessibilityManager; + this.#annotationLayer = annotationLayer; + this.viewport = viewport; + this.#textLayer = textLayer; + this.drawLayer = drawLayer; + this._structTree = structTreeLayer; + this.#uiManager.addLayer(this); + } + get isEmpty() { + return this.#editors.size === 0; + } + get isInvisible() { + return this.isEmpty && this.#uiManager.getMode() === AnnotationEditorType.NONE; + } + updateToolbar(options) { + this.#uiManager.updateToolbar(options); + } + updateMode(mode = this.#uiManager.getMode()) { + this.#cleanup(); + switch (mode) { + case AnnotationEditorType.NONE: + this.div.classList.toggle("nonEditing", true); + this.disableTextSelection(); + this.togglePointerEvents(false); + this.toggleAnnotationLayerPointerEvents(true); + this.disableClick(); + return; + case AnnotationEditorType.INK: + this.disableTextSelection(); + this.togglePointerEvents(true); + this.enableClick(); + break; + case AnnotationEditorType.HIGHLIGHT: + this.enableTextSelection(); + this.togglePointerEvents(false); + this.disableClick(); + break; + default: + this.disableTextSelection(); + this.togglePointerEvents(true); + this.enableClick(); + } + this.toggleAnnotationLayerPointerEvents(false); + const { + classList + } = this.div; + classList.toggle("nonEditing", false); + if (mode === AnnotationEditorType.POPUP) { + classList.toggle("commentEditing", true); + } else { + classList.toggle("commentEditing", false); + for (const editorType of AnnotationEditorLayer.#editorTypes.values()) { + classList.toggle(`${editorType._type}Editing`, mode === editorType._editorType); + } + } + this.div.hidden = false; + } + hasTextLayer(textLayer) { + return textLayer === this.#textLayer?.div; + } + setEditingState(isEditing) { + this.#uiManager.setEditingState(isEditing); + } + addCommands(params) { + this.#uiManager.addCommands(params); + } + cleanUndoStack(type) { + this.#uiManager.cleanUndoStack(type); + } + toggleDrawing(enabled = false) { + this.div.classList.toggle("drawing", !enabled); + } + togglePointerEvents(enabled = false) { + this.div.classList.toggle("disabled", !enabled); + } + toggleAnnotationLayerPointerEvents(enabled = false) { + this.#annotationLayer?.togglePointerEvents(enabled); + } + get #allEditorsIterator() { + return this.#editors.size !== 0 ? this.#editors.values() : this.#uiManager.getEditors(this.pageIndex); + } + async enable() { + this.#isEnabling = true; + this.div.tabIndex = 0; + this.togglePointerEvents(true); + this.div.classList.toggle("nonEditing", false); + this.#textLayerDblClickAC?.abort(); + this.#textLayerDblClickAC = null; + const annotationElementIds = new Set(); + for (const editor of this.#allEditorsIterator) { + editor.enableEditing(); + editor.show(true); + if (editor.annotationElementId) { + this.#uiManager.removeChangedExistingAnnotation(editor); + annotationElementIds.add(editor.annotationElementId); + } + } + const annotationLayer = this.#annotationLayer; + if (annotationLayer) { + for (const editable of annotationLayer.getEditableAnnotations()) { + editable.hide(); + if (this.#uiManager.isDeletedAnnotationElement(editable.data.id)) { + continue; + } + if (annotationElementIds.has(editable.data.id)) { + continue; + } + const editor = await this.deserialize(editable); + if (!editor) { + continue; + } + this.addOrRebuild(editor); + editor.enableEditing(); + } + } + this.#isEnabling = false; + this.#uiManager._eventBus.dispatch("editorsrendered", { + source: this, + pageNumber: this.pageIndex + 1 + }); + } + disable() { + this.#isDisabling = true; + this.div.tabIndex = -1; + this.togglePointerEvents(false); + this.div.classList.toggle("nonEditing", true); + if (this.#textLayer && !this.#textLayerDblClickAC) { + this.#textLayerDblClickAC = new AbortController(); + const signal = this.#uiManager.combinedSignal(this.#textLayerDblClickAC); + this.#textLayer.div.addEventListener("pointerdown", e => { + const DBL_CLICK_THRESHOLD = 500; + const { + clientX, + clientY, + timeStamp + } = e; + const lastPointerDownTimestamp = this.#lastPointerDownTimestamp; + if (timeStamp - lastPointerDownTimestamp > DBL_CLICK_THRESHOLD) { + this.#lastPointerDownTimestamp = timeStamp; + return; + } + this.#lastPointerDownTimestamp = -1; + const { + classList + } = this.div; + classList.toggle("getElements", true); + const elements = document.elementsFromPoint(clientX, clientY); + classList.toggle("getElements", false); + if (!this.div.contains(elements[0])) { + return; + } + let id; + const regex = new RegExp(`^${AnnotationEditorPrefix}[0-9]+$`); + for (const element of elements) { + if (regex.test(element.id)) { + id = element.id; + break; + } + } + if (!id) { + return; + } + const editor = this.#editors.get(id); + if (editor?.annotationElementId === null) { + e.stopPropagation(); + e.preventDefault(); + editor.dblclick(e); + } + }, { + signal, + capture: true + }); + } + const annotationLayer = this.#annotationLayer; + const needFakeAnnotation = []; + if (annotationLayer) { + const changedAnnotations = new Map(); + const resetAnnotations = new Map(); + for (const editor of this.#allEditorsIterator) { + editor.disableEditing(); + if (!editor.annotationElementId) { + needFakeAnnotation.push(editor); + continue; + } + if (editor.serialize() !== null) { + changedAnnotations.set(editor.annotationElementId, editor); + continue; + } else { + resetAnnotations.set(editor.annotationElementId, editor); + } + this.getEditableAnnotation(editor.annotationElementId)?.show(); + editor.remove(); + } + const editables = annotationLayer.getEditableAnnotations(); + for (const editable of editables) { + const { + id + } = editable.data; + if (this.#uiManager.isDeletedAnnotationElement(id)) { + editable.updateEdited({ + deleted: true + }); + continue; + } + let editor = resetAnnotations.get(id); + if (editor) { + editor.resetAnnotationElement(editable); + editor.show(false); + editable.show(); + continue; + } + editor = changedAnnotations.get(id); + if (editor) { + this.#uiManager.addChangedExistingAnnotation(editor); + if (editor.renderAnnotationElement(editable)) { + editor.show(false); + } + } + editable.show(); + } + } + this.#cleanup(); + if (this.isEmpty) { + this.div.hidden = true; + } + const { + classList + } = this.div; + for (const editorType of AnnotationEditorLayer.#editorTypes.values()) { + classList.remove(`${editorType._type}Editing`); + } + this.disableTextSelection(); + this.toggleAnnotationLayerPointerEvents(true); + annotationLayer?.updateFakeAnnotations(needFakeAnnotation); + this.#isDisabling = false; + } + getEditableAnnotation(id) { + return this.#annotationLayer?.getEditableAnnotation(id) || null; + } + setActiveEditor(editor) { + const currentActive = this.#uiManager.getActive(); + if (currentActive === editor) { + return; + } + this.#uiManager.setActiveEditor(editor); + } + enableTextSelection() { + this.div.tabIndex = -1; + if (this.#textLayer?.div && !this.#textSelectionAC) { + this.#textSelectionAC = new AbortController(); + const signal = this.#uiManager.combinedSignal(this.#textSelectionAC); + this.#textLayer.div.addEventListener("pointerdown", this.#textLayerPointerDown.bind(this), { + signal + }); + this.#textLayer.div.classList.add("highlighting"); + } + } + disableTextSelection() { + this.div.tabIndex = 0; + if (this.#textLayer?.div && this.#textSelectionAC) { + this.#textSelectionAC.abort(); + this.#textSelectionAC = null; + this.#textLayer.div.classList.remove("highlighting"); + } + } + #textLayerPointerDown(event) { + this.#uiManager.unselectAll(); + const { + target + } = event; + if (target === this.#textLayer.div || (target.getAttribute("role") === "img" || target.classList.contains("endOfContent")) && this.#textLayer.div.contains(target)) { + const { + isMac + } = util_FeatureTest.platform; + if (event.button !== 0 || event.ctrlKey && isMac) { + return; + } + this.#uiManager.showAllEditors("highlight", true, true); + this.#textLayer.div.classList.add("free"); + this.toggleDrawing(); + HighlightEditor.startHighlighting(this, this.#uiManager.direction === "ltr", { + target: this.#textLayer.div, + x: event.x, + y: event.y + }); + this.#textLayer.div.addEventListener("pointerup", () => { + this.#textLayer.div.classList.remove("free"); + this.toggleDrawing(true); + }, { + once: true, + signal: this.#uiManager._signal + }); + event.preventDefault(); + } + } + enableClick() { + if (this.#clickAC) { + return; + } + this.#clickAC = new AbortController(); + const signal = this.#uiManager.combinedSignal(this.#clickAC); + this.div.addEventListener("pointerdown", this.pointerdown.bind(this), { + signal + }); + const pointerup = this.pointerup.bind(this); + this.div.addEventListener("pointerup", pointerup, { + signal + }); + this.div.addEventListener("pointercancel", pointerup, { + signal + }); + } + disableClick() { + this.#clickAC?.abort(); + this.#clickAC = null; + } + attach(editor) { + this.#editors.set(editor.id, editor); + const { + annotationElementId + } = editor; + if (annotationElementId && this.#uiManager.isDeletedAnnotationElement(annotationElementId)) { + this.#uiManager.removeDeletedAnnotationElement(editor); + } + } + detach(editor) { + this.#editors.delete(editor.id); + this.#accessibilityManager?.removePointerInTextLayer(editor.contentDiv); + if (!this.#isDisabling && editor.annotationElementId) { + this.#uiManager.addDeletedAnnotationElement(editor); + } + } + remove(editor) { + this.detach(editor); + this.#uiManager.removeEditor(editor); + editor.div.remove(); + editor.isAttachedToDOM = false; + } + changeParent(editor) { + if (editor.parent === this) { + return; + } + if (editor.parent && editor.annotationElementId) { + this.#uiManager.addDeletedAnnotationElement(editor.annotationElementId); + AnnotationEditor.deleteAnnotationElement(editor); + editor.annotationElementId = null; + } + this.attach(editor); + editor.parent?.detach(editor); + editor.setParent(this); + if (editor.div && editor.isAttachedToDOM) { + editor.div.remove(); + this.div.append(editor.div); + } + } + add(editor) { + if (editor.parent === this && editor.isAttachedToDOM) { + return; + } + this.changeParent(editor); + this.#uiManager.addEditor(editor); + this.attach(editor); + if (!editor.isAttachedToDOM) { + const div = editor.render(); + this.div.append(div); + editor.isAttachedToDOM = true; + } + editor.fixAndSetPosition(); + editor.onceAdded(!this.#isEnabling); + this.#uiManager.addToAnnotationStorage(editor); + editor._reportTelemetry(editor.telemetryInitialData); + } + moveEditorInDOM(editor) { + if (!editor.isAttachedToDOM) { + return; + } + const { + activeElement + } = document; + if (editor.div.contains(activeElement) && !this.#editorFocusTimeoutId) { + editor._focusEventsAllowed = false; + this.#editorFocusTimeoutId = setTimeout(() => { + this.#editorFocusTimeoutId = null; + if (!editor.div.contains(document.activeElement)) { + editor.div.addEventListener("focusin", () => { + editor._focusEventsAllowed = true; + }, { + once: true, + signal: this.#uiManager._signal + }); + activeElement.focus(); + } else { + editor._focusEventsAllowed = true; + } + }, 0); + } + editor._structTreeParentId = this.#accessibilityManager?.moveElementInDOM(this.div, editor.div, editor.contentDiv, true); + } + addOrRebuild(editor) { + if (editor.needsToBeRebuilt()) { + editor.parent ||= this; + editor.rebuild(); + editor.show(); + } else { + this.add(editor); + } + } + addUndoableEditor(editor) { + const cmd = () => editor._uiManager.rebuild(editor); + const undo = () => { + editor.remove(); + }; + this.addCommands({ + cmd, + undo, + mustExec: false + }); + } + getEditorByUID(uid) { + for (const editor of this.#editors.values()) { + if (editor.uid === uid) { + return editor; + } + } + return null; + } + getNextId() { + return this.#uiManager.getId(); + } + get #currentEditorType() { + return AnnotationEditorLayer.#editorTypes.get(this.#uiManager.getMode()); + } + combinedSignal(ac) { + return this.#uiManager.combinedSignal(ac); + } + #createNewEditor(params) { + const editorType = this.#currentEditorType; + return editorType ? new editorType.prototype.constructor(params) : null; + } + canCreateNewEmptyEditor() { + return this.#currentEditorType?.canCreateNewEmptyEditor(); + } + async pasteEditor(options, params) { + this.updateToolbar(options); + await this.#uiManager.updateMode(options.mode); + const { + offsetX, + offsetY + } = this.#getCenterPoint(); + const id = this.getNextId(); + const editor = this.#createNewEditor({ + parent: this, + id, + x: offsetX, + y: offsetY, + uiManager: this.#uiManager, + isCentered: true, + ...params + }); + if (editor) { + this.add(editor); + } + } + async deserialize(data) { + return (await AnnotationEditorLayer.#editorTypes.get(data.annotationType ?? data.annotationEditorType)?.deserialize(data, this, this.#uiManager)) || null; + } + createAndAddNewEditor(event, isCentered, data = {}) { + const id = this.getNextId(); + const editor = this.#createNewEditor({ + parent: this, + id, + x: event.offsetX, + y: event.offsetY, + uiManager: this.#uiManager, + isCentered, + ...data + }); + if (editor) { + this.add(editor); + } + return editor; + } + get boundingClientRect() { + return this.div.getBoundingClientRect(); + } + #getCenterPoint() { + const { + x, + y, + width, + height + } = this.boundingClientRect; + const tlX = Math.max(0, x); + const tlY = Math.max(0, y); + const brX = Math.min(window.innerWidth, x + width); + const brY = Math.min(window.innerHeight, y + height); + const centerX = (tlX + brX) / 2 - x; + const centerY = (tlY + brY) / 2 - y; + const [offsetX, offsetY] = this.viewport.rotation % 180 === 0 ? [centerX, centerY] : [centerY, centerX]; + return { + offsetX, + offsetY + }; + } + addNewEditor(data = {}) { + this.createAndAddNewEditor(this.#getCenterPoint(), true, data); + } + setSelected(editor) { + this.#uiManager.setSelected(editor); + } + toggleSelected(editor) { + this.#uiManager.toggleSelected(editor); + } + unselect(editor) { + this.#uiManager.unselect(editor); + } + pointerup(event) { + const { + isMac + } = util_FeatureTest.platform; + if (event.button !== 0 || event.ctrlKey && isMac) { + return; + } + if (event.target !== this.div) { + return; + } + if (!this.#hadPointerDown) { + return; + } + this.#hadPointerDown = false; + if (this.#currentEditorType?.isDrawer && this.#currentEditorType.supportMultipleDrawings) { + return; + } + if (!this.#allowClick) { + this.#allowClick = true; + return; + } + const currentMode = this.#uiManager.getMode(); + if (currentMode === AnnotationEditorType.STAMP || currentMode === AnnotationEditorType.SIGNATURE) { + this.#uiManager.unselectAll(); + return; + } + this.createAndAddNewEditor(event, false); + } + pointerdown(event) { + if (this.#uiManager.getMode() === AnnotationEditorType.HIGHLIGHT) { + this.enableTextSelection(); + } + if (this.#hadPointerDown) { + this.#hadPointerDown = false; + return; + } + const { + isMac + } = util_FeatureTest.platform; + if (event.button !== 0 || event.ctrlKey && isMac) { + return; + } + if (event.target !== this.div) { + return; + } + this.#hadPointerDown = true; + if (this.#currentEditorType?.isDrawer) { + this.startDrawingSession(event); + return; + } + const editor = this.#uiManager.getActive(); + this.#allowClick = !editor || editor.isEmpty(); + } + startDrawingSession(event) { + this.div.focus({ + preventScroll: true + }); + if (this.#drawingAC) { + this.#currentEditorType.startDrawing(this, this.#uiManager, false, event); + return; + } + this.#uiManager.setCurrentDrawingSession(this); + this.#drawingAC = new AbortController(); + const signal = this.#uiManager.combinedSignal(this.#drawingAC); + this.div.addEventListener("blur", ({ + relatedTarget + }) => { + if (relatedTarget && !this.div.contains(relatedTarget)) { + this.#focusedElement = null; + this.commitOrRemove(); + } + }, { + signal + }); + this.#currentEditorType.startDrawing(this, this.#uiManager, false, event); + } + pause(on) { + if (on) { + const { + activeElement + } = document; + if (this.div.contains(activeElement)) { + this.#focusedElement = activeElement; + } + return; + } + if (this.#focusedElement) { + setTimeout(() => { + this.#focusedElement?.focus(); + this.#focusedElement = null; + }, 0); + } + } + endDrawingSession(isAborted = false) { + if (!this.#drawingAC) { + return null; + } + this.#uiManager.setCurrentDrawingSession(null); + this.#drawingAC.abort(); + this.#drawingAC = null; + this.#focusedElement = null; + return this.#currentEditorType.endDrawing(isAborted); + } + findNewParent(editor, x, y) { + const layer = this.#uiManager.findParent(x, y); + if (layer === null || layer === this) { + return false; + } + layer.changeParent(editor); + return true; + } + commitOrRemove() { + if (this.#drawingAC) { + this.endDrawingSession(); + return true; + } + return false; + } + onScaleChanging() { + if (!this.#drawingAC) { + return; + } + this.#currentEditorType.onScaleChangingWhenDrawing(this); + } + destroy() { + this.commitOrRemove(); + if (this.#uiManager.getActive()?.parent === this) { + this.#uiManager.commitOrRemove(); + this.#uiManager.setActiveEditor(null); + } + if (this.#editorFocusTimeoutId) { + clearTimeout(this.#editorFocusTimeoutId); + this.#editorFocusTimeoutId = null; + } + for (const editor of this.#editors.values()) { + this.#accessibilityManager?.removePointerInTextLayer(editor.contentDiv); + editor.setParent(null); + editor.isAttachedToDOM = false; + editor.div.remove(); + } + this.div = null; + this.#editors.clear(); + this.#uiManager.removeLayer(this); + } + #cleanup() { + for (const editor of this.#editors.values()) { + if (editor.isEmpty()) { + editor.remove(); + } + } + } + render({ + viewport + }) { + this.viewport = viewport; + setLayerDimensions(this.div, viewport); + for (const editor of this.#uiManager.getEditors(this.pageIndex)) { + this.add(editor); + editor.rebuild(); + } + this.updateMode(); + } + update({ + viewport + }) { + this.#uiManager.commitOrRemove(); + this.#cleanup(); + const oldRotation = this.viewport.rotation; + const rotation = viewport.rotation; + this.viewport = viewport; + setLayerDimensions(this.div, { + rotation + }); + if (oldRotation !== rotation) { + for (const editor of this.#editors.values()) { + editor.rotate(rotation); + } + } + } + get pageDimensions() { + const { + pageWidth, + pageHeight + } = this.viewport.rawDims; + return [pageWidth, pageHeight]; + } + get scale() { + return this.#uiManager.viewParameters.realScale; + } +} + +;// ./src/display/draw_layer.js + + +class DrawLayer { + #parent = null; + #mapping = new Map(); + #toUpdate = new Map(); + static #id = 0; + constructor({ + pageIndex + }) { + this.pageIndex = pageIndex; + } + setParent(parent) { + if (!this.#parent) { + this.#parent = parent; + return; + } + if (this.#parent !== parent) { + if (this.#mapping.size > 0) { + for (const root of this.#mapping.values()) { + root.remove(); + parent.append(root); + } + } + this.#parent = parent; + } + } + static get _svgFactory() { + return shadow(this, "_svgFactory", new DOMSVGFactory()); + } + static #setBox(element, [x, y, width, height]) { + const { + style + } = element; + style.top = `${100 * y}%`; + style.left = `${100 * x}%`; + style.width = `${100 * width}%`; + style.height = `${100 * height}%`; + } + #createSVG() { + const svg = DrawLayer._svgFactory.create(1, 1, true); + this.#parent.append(svg); + svg.setAttribute("aria-hidden", true); + return svg; + } + #createClipPath(defs, pathId) { + const clipPath = DrawLayer._svgFactory.createElement("clipPath"); + defs.append(clipPath); + const clipPathId = `clip_${pathId}`; + clipPath.setAttribute("id", clipPathId); + clipPath.setAttribute("clipPathUnits", "objectBoundingBox"); + const clipPathUse = DrawLayer._svgFactory.createElement("use"); + clipPath.append(clipPathUse); + clipPathUse.setAttribute("href", `#${pathId}`); + clipPathUse.classList.add("clip"); + return clipPathId; + } + #updateProperties(element, properties) { + for (const [key, value] of Object.entries(properties)) { + if (value === null) { + element.removeAttribute(key); + } else { + element.setAttribute(key, value); + } + } + } + draw(properties, isPathUpdatable = false, hasClip = false) { + const id = DrawLayer.#id++; + const root = this.#createSVG(); + const defs = DrawLayer._svgFactory.createElement("defs"); + root.append(defs); + const path = DrawLayer._svgFactory.createElement("path"); + defs.append(path); + const pathId = `path_p${this.pageIndex}_${id}`; + path.setAttribute("id", pathId); + path.setAttribute("vector-effect", "non-scaling-stroke"); + if (isPathUpdatable) { + this.#toUpdate.set(id, path); + } + const clipPathId = hasClip ? this.#createClipPath(defs, pathId) : null; + const use = DrawLayer._svgFactory.createElement("use"); + root.append(use); + use.setAttribute("href", `#${pathId}`); + this.updateProperties(root, properties); + this.#mapping.set(id, root); + return { + id, + clipPathId: `url(#${clipPathId})` + }; + } + drawOutline(properties, mustRemoveSelfIntersections) { + const id = DrawLayer.#id++; + const root = this.#createSVG(); + const defs = DrawLayer._svgFactory.createElement("defs"); + root.append(defs); + const path = DrawLayer._svgFactory.createElement("path"); + defs.append(path); + const pathId = `path_p${this.pageIndex}_${id}`; + path.setAttribute("id", pathId); + path.setAttribute("vector-effect", "non-scaling-stroke"); + let maskId; + if (mustRemoveSelfIntersections) { + const mask = DrawLayer._svgFactory.createElement("mask"); + defs.append(mask); + maskId = `mask_p${this.pageIndex}_${id}`; + mask.setAttribute("id", maskId); + mask.setAttribute("maskUnits", "objectBoundingBox"); + const rect = DrawLayer._svgFactory.createElement("rect"); + mask.append(rect); + rect.setAttribute("width", "1"); + rect.setAttribute("height", "1"); + rect.setAttribute("fill", "white"); + const use = DrawLayer._svgFactory.createElement("use"); + mask.append(use); + use.setAttribute("href", `#${pathId}`); + use.setAttribute("stroke", "none"); + use.setAttribute("fill", "black"); + use.setAttribute("fill-rule", "nonzero"); + use.classList.add("mask"); + } + const use1 = DrawLayer._svgFactory.createElement("use"); + root.append(use1); + use1.setAttribute("href", `#${pathId}`); + if (maskId) { + use1.setAttribute("mask", `url(#${maskId})`); + } + const use2 = use1.cloneNode(); + root.append(use2); + use1.classList.add("mainOutline"); + use2.classList.add("secondaryOutline"); + this.updateProperties(root, properties); + this.#mapping.set(id, root); + return id; + } + finalizeDraw(id, properties) { + this.#toUpdate.delete(id); + this.updateProperties(id, properties); + } + updateProperties(elementOrId, properties) { + if (!properties) { + return; + } + const { + root, + bbox, + rootClass, + path + } = properties; + const element = typeof elementOrId === "number" ? this.#mapping.get(elementOrId) : elementOrId; + if (!element) { + return; + } + if (root) { + this.#updateProperties(element, root); + } + if (bbox) { + DrawLayer.#setBox(element, bbox); + } + if (rootClass) { + const { + classList + } = element; + for (const [className, value] of Object.entries(rootClass)) { + classList.toggle(className, value); + } + } + if (path) { + const defs = element.firstChild; + const pathElement = defs.firstChild; + this.#updateProperties(pathElement, path); + } + } + updateParent(id, layer) { + if (layer === this) { + return; + } + const root = this.#mapping.get(id); + if (!root) { + return; + } + layer.#parent.append(root); + this.#mapping.delete(id); + layer.#mapping.set(id, root); + } + remove(id) { + this.#toUpdate.delete(id); + if (this.#parent === null) { + return; + } + this.#mapping.get(id).remove(); + this.#mapping.delete(id); + } + destroy() { + this.#parent = null; + for (const root of this.#mapping.values()) { + root.remove(); + } + this.#mapping.clear(); + this.#toUpdate.clear(); + } +} + +;// ./src/pdf.js + + + + + + + + + + + + + + + + +{ + globalThis._pdfjsTestingUtils = { + HighlightOutliner: HighlightOutliner + }; +} +globalThis.pdfjsLib = { + AbortException: AbortException, + AnnotationEditorLayer: AnnotationEditorLayer, + AnnotationEditorParamsType: AnnotationEditorParamsType, + AnnotationEditorType: AnnotationEditorType, + AnnotationEditorUIManager: AnnotationEditorUIManager, + AnnotationLayer: AnnotationLayer, + AnnotationMode: AnnotationMode, + AnnotationType: AnnotationType, + applyOpacity: applyOpacity, + build: build, + ColorPicker: ColorPicker, + createValidAbsoluteUrl: createValidAbsoluteUrl, + CSSConstants: CSSConstants, + DOMSVGFactory: DOMSVGFactory, + DrawLayer: DrawLayer, + FeatureTest: util_FeatureTest, + fetchData: fetchData, + findContrastColor: findContrastColor, + getDocument: getDocument, + getFilenameFromUrl: getFilenameFromUrl, + getPdfFilenameFromUrl: getPdfFilenameFromUrl, + getRGB: getRGB, + getUuid: getUuid, + getXfaPageViewport: getXfaPageViewport, + GlobalWorkerOptions: GlobalWorkerOptions, + ImageKind: util_ImageKind, + InvalidPDFException: InvalidPDFException, + isDataScheme: isDataScheme, + isPdfFile: isPdfFile, + isValidExplicitDest: isValidExplicitDest, + MathClamp: MathClamp, + noContextMenu: noContextMenu, + normalizeUnicode: normalizeUnicode, + OPS: OPS, + OutputScale: OutputScale, + PasswordResponses: PasswordResponses, + PDFDataRangeTransport: PDFDataRangeTransport, + PDFDateString: PDFDateString, + PDFWorker: PDFWorker, + PermissionFlag: PermissionFlag, + PixelsPerInch: PixelsPerInch, + RenderingCancelledException: RenderingCancelledException, + renderRichText: renderRichText, + ResponseException: ResponseException, + setLayerDimensions: setLayerDimensions, + shadow: shadow, + SignatureExtractor: SignatureExtractor, + stopEvent: stopEvent, + SupportedImageMimeTypes: SupportedImageMimeTypes, + TextLayer: TextLayer, + TouchManager: TouchManager, + updateUrlHash: updateUrlHash, + Util: Util, + VerbosityLevel: VerbosityLevel, + version: version, + XfaLayer: XfaLayer +}; + +export { AbortException, AnnotationEditorLayer, AnnotationEditorParamsType, AnnotationEditorType, AnnotationEditorUIManager, AnnotationLayer, AnnotationMode, AnnotationType, CSSConstants, ColorPicker, DOMSVGFactory, DrawLayer, util_FeatureTest as FeatureTest, GlobalWorkerOptions, util_ImageKind as ImageKind, InvalidPDFException, MathClamp, OPS, OutputScale, PDFDataRangeTransport, PDFDateString, PDFWorker, PasswordResponses, PermissionFlag, PixelsPerInch, RenderingCancelledException, ResponseException, SignatureExtractor, SupportedImageMimeTypes, TextLayer, TouchManager, Util, VerbosityLevel, XfaLayer, applyOpacity, build, createValidAbsoluteUrl, fetchData, findContrastColor, getDocument, getFilenameFromUrl, getPdfFilenameFromUrl, getRGB, getUuid, getXfaPageViewport, isDataScheme, isPdfFile, isValidExplicitDest, noContextMenu, normalizeUnicode, renderRichText, setLayerDimensions, shadow, stopEvent, updateUrlHash, version }; + +//# sourceMappingURL=pdf.mjs.map \ No newline at end of file diff --git a/fs-framework/fs-preview/src/main/resources/static/lib/pdfjs/build/pdf.mjs.map b/fs-framework/fs-preview/src/main/resources/static/lib/pdfjs/build/pdf.mjs.map new file mode 100644 index 0000000000000000000000000000000000000000..4212cc9ccb276aeb4e4c44ee385b29fd06d219e0 --- /dev/null +++ b/fs-framework/fs-preview/src/main/resources/static/lib/pdfjs/build/pdf.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"pdf.mjs","mappings":"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AC,EAC7E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAC7E,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACzE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,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","sources":["webpack://pdf.js/webpack/bootstrap","webpack://pdf.js/webpack/runtime/define property getters","webpack://pdf.js/webpack/runtime/hasOwnProperty shorthand","webpack://pdf.js/./src/shared/util.js","webpack://pdf.js/./src/display/xfa_text.js","webpack://pdf.js/./src/display/xfa_layer.js","webpack://pdf.js/./src/display/display_utils.js","webpack://pdf.js/./src/display/editor/toolbar.js","webpack://pdf.js/./src/display/editor/tools.js","webpack://pdf.js/./src/display/editor/alt_text.js","webpack://pdf.js/./src/display/editor/comment.js","webpack://pdf.js/./src/display/touch_manager.js","webpack://pdf.js/./src/display/editor/editor.js","webpack://pdf.js/./src/shared/murmurhash3.js","webpack://pdf.js/./src/display/annotation_storage.js","webpack://pdf.js/./src/display/font_loader.js","webpack://pdf.js/./src/shared/obj-bin-transform.js","webpack://pdf.js/./src/display/api_utils.js","webpack://pdf.js/./src/shared/message_handler.js","webpack://pdf.js/./src/display/canvas_factory.js","webpack://pdf.js/./src/display/cmap_reader_factory.js","webpack://pdf.js/./src/display/filter_factory.js","webpack://pdf.js/./src/display/standard_fontdata_factory.js","webpack://pdf.js/./src/display/wasm_factory.js","webpack://pdf.js/./src/display/node_utils.js","webpack://pdf.js/./src/display/canvas_dependency_tracker.js","webpack://pdf.js/./src/display/pattern_helper.js","webpack://pdf.js/./src/shared/image_utils.js","webpack://pdf.js/./src/display/canvas.js","webpack://pdf.js/./src/display/worker_options.js","webpack://pdf.js/./src/display/metadata.js","webpack://pdf.js/./src/display/optional_content_config.js","webpack://pdf.js/./src/display/transport_stream.js","webpack://pdf.js/./src/display/content_disposition.js","webpack://pdf.js/./src/display/network_utils.js","webpack://pdf.js/./src/display/fetch_stream.js","webpack://pdf.js/./src/display/network.js","webpack://pdf.js/./src/display/node_stream.js","webpack://pdf.js/./src/display/pdf_objects.js","webpack://pdf.js/./src/display/text_layer.js","webpack://pdf.js/./src/display/api.js","webpack://pdf.js/./src/display/editor/color_picker.js","webpack://pdf.js/./src/shared/scripting_utils.js","webpack://pdf.js/./src/display/svg_factory.js","webpack://pdf.js/./src/display/annotation_layer.js","webpack://pdf.js/./src/display/editor/freetext.js","webpack://pdf.js/./src/display/editor/drawers/outline.js","webpack://pdf.js/./src/display/editor/drawers/freedraw.js","webpack://pdf.js/./src/display/editor/drawers/highlight.js","webpack://pdf.js/./src/display/editor/highlight.js","webpack://pdf.js/./src/display/editor/draw.js","webpack://pdf.js/./src/display/editor/drawers/inkdraw.js","webpack://pdf.js/./src/display/editor/ink.js","webpack://pdf.js/./src/display/editor/drawers/contour.js","webpack://pdf.js/./src/display/editor/drawers/signaturedraw.js","webpack://pdf.js/./src/display/editor/signature.js","webpack://pdf.js/./src/display/editor/stamp.js","webpack://pdf.js/./src/display/editor/annotation_editor_layer.js","webpack://pdf.js/./src/display/draw_layer.js","webpack://pdf.js/./src/pdf.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* globals process */\n\n// NW.js / Electron is a browser context, but copies some Node.js objects; see\n// http://docs.nwjs.io/en/latest/For%20Users/Advanced/JavaScript%20Contexts%20in%20NW.js/#access-nodejs-and-nwjs-api-in-browser-context\n// https://www.electronjs.org/docs/api/process#processversionselectron-readonly\n// https://www.electronjs.org/docs/api/process#processtype-readonly\nconst isNodeJS =\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n typeof process === \"object\" &&\n process + \"\" === \"[object process]\" &&\n !process.versions.nw &&\n !(process.versions.electron && process.type && process.type !== \"browser\");\n\nconst FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];\n\n// Represent the percentage of the height of a single-line field over\n// the font size. Acrobat seems to use this value.\nconst LINE_FACTOR = 1.35;\nconst LINE_DESCENT_FACTOR = 0.35;\nconst BASELINE_FACTOR = LINE_DESCENT_FACTOR / LINE_FACTOR;\n\n/**\n * Refer to the `WorkerTransport.getRenderingIntent`-method in the API, to see\n * how these flags are being used:\n * - ANY, DISPLAY, and PRINT are the normal rendering intents, note the\n * `PDFPageProxy.{render, getOperatorList, getAnnotations}`-methods.\n * - SAVE is used, on the worker-thread, when saving modified annotations.\n * - ANNOTATIONS_FORMS, ANNOTATIONS_STORAGE, ANNOTATIONS_DISABLE control which\n * annotations are rendered onto the canvas (i.e. by being included in the\n * operatorList), note the `PDFPageProxy.{render, getOperatorList}`-methods\n * and their `annotationMode`-option.\n * - IS_EDITING is used when editing is active in the viewer.\n * - OPLIST is used with the `PDFPageProxy.getOperatorList`-method, note the\n * `OperatorList`-constructor (on the worker-thread).\n */\nconst RenderingIntentFlag = {\n ANY: 0x01,\n DISPLAY: 0x02,\n PRINT: 0x04,\n SAVE: 0x08,\n ANNOTATIONS_FORMS: 0x10,\n ANNOTATIONS_STORAGE: 0x20,\n ANNOTATIONS_DISABLE: 0x40,\n IS_EDITING: 0x80,\n OPLIST: 0x100,\n};\n\nconst AnnotationMode = {\n DISABLE: 0,\n ENABLE: 1,\n ENABLE_FORMS: 2,\n ENABLE_STORAGE: 3,\n};\n\nconst AnnotationEditorPrefix = \"pdfjs_internal_editor_\";\n\nconst AnnotationEditorType = {\n DISABLE: -1,\n NONE: 0,\n FREETEXT: 3,\n HIGHLIGHT: 9,\n STAMP: 13,\n INK: 15,\n POPUP: 16,\n SIGNATURE: 101,\n COMMENT: 102,\n};\n\nconst AnnotationEditorParamsType = {\n RESIZE: 1,\n CREATE: 2,\n FREETEXT_SIZE: 11,\n FREETEXT_COLOR: 12,\n FREETEXT_OPACITY: 13,\n INK_COLOR: 21,\n INK_THICKNESS: 22,\n INK_OPACITY: 23,\n HIGHLIGHT_COLOR: 31,\n HIGHLIGHT_THICKNESS: 32,\n HIGHLIGHT_FREE: 33,\n HIGHLIGHT_SHOW_ALL: 34,\n DRAW_STEP: 41,\n};\n\n// Permission flags from Table 22, Section 7.6.3.2 of the PDF specification.\nconst PermissionFlag = {\n PRINT: 0x04,\n MODIFY_CONTENTS: 0x08,\n COPY: 0x10,\n MODIFY_ANNOTATIONS: 0x20,\n FILL_INTERACTIVE_FORMS: 0x100,\n COPY_FOR_ACCESSIBILITY: 0x200,\n ASSEMBLE: 0x400,\n PRINT_HIGH_QUALITY: 0x800,\n};\n\nconst MeshFigureType = {\n TRIANGLES: 1,\n LATTICE: 2,\n PATCH: 3,\n};\n\nconst TextRenderingMode = {\n FILL: 0,\n STROKE: 1,\n FILL_STROKE: 2,\n INVISIBLE: 3,\n FILL_ADD_TO_PATH: 4,\n STROKE_ADD_TO_PATH: 5,\n FILL_STROKE_ADD_TO_PATH: 6,\n ADD_TO_PATH: 7,\n FILL_STROKE_MASK: 3,\n ADD_TO_PATH_FLAG: 4,\n};\n\nconst ImageKind = {\n GRAYSCALE_1BPP: 1,\n RGB_24BPP: 2,\n RGBA_32BPP: 3,\n};\n\nconst AnnotationType = {\n TEXT: 1,\n LINK: 2,\n FREETEXT: 3,\n LINE: 4,\n SQUARE: 5,\n CIRCLE: 6,\n POLYGON: 7,\n POLYLINE: 8,\n HIGHLIGHT: 9,\n UNDERLINE: 10,\n SQUIGGLY: 11,\n STRIKEOUT: 12,\n STAMP: 13,\n CARET: 14,\n INK: 15,\n POPUP: 16,\n FILEATTACHMENT: 17,\n SOUND: 18,\n MOVIE: 19,\n WIDGET: 20,\n SCREEN: 21,\n PRINTERMARK: 22,\n TRAPNET: 23,\n WATERMARK: 24,\n THREED: 25,\n REDACT: 26,\n};\n\nconst AnnotationReplyType = {\n GROUP: \"Group\",\n REPLY: \"R\",\n};\n\nconst AnnotationFlag = {\n INVISIBLE: 0x01,\n HIDDEN: 0x02,\n PRINT: 0x04,\n NOZOOM: 0x08,\n NOROTATE: 0x10,\n NOVIEW: 0x20,\n READONLY: 0x40,\n LOCKED: 0x80,\n TOGGLENOVIEW: 0x100,\n LOCKEDCONTENTS: 0x200,\n};\n\nconst AnnotationFieldFlag = {\n READONLY: 0x0000001,\n REQUIRED: 0x0000002,\n NOEXPORT: 0x0000004,\n MULTILINE: 0x0001000,\n PASSWORD: 0x0002000,\n NOTOGGLETOOFF: 0x0004000,\n RADIO: 0x0008000,\n PUSHBUTTON: 0x0010000,\n COMBO: 0x0020000,\n EDIT: 0x0040000,\n SORT: 0x0080000,\n FILESELECT: 0x0100000,\n MULTISELECT: 0x0200000,\n DONOTSPELLCHECK: 0x0400000,\n DONOTSCROLL: 0x0800000,\n COMB: 0x1000000,\n RICHTEXT: 0x2000000,\n RADIOSINUNISON: 0x2000000,\n COMMITONSELCHANGE: 0x4000000,\n};\n\nconst AnnotationBorderStyleType = {\n SOLID: 1,\n DASHED: 2,\n BEVELED: 3,\n INSET: 4,\n UNDERLINE: 5,\n};\n\nconst AnnotationActionEventType = {\n E: \"Mouse Enter\",\n X: \"Mouse Exit\",\n D: \"Mouse Down\",\n U: \"Mouse Up\",\n Fo: \"Focus\",\n Bl: \"Blur\",\n PO: \"PageOpen\",\n PC: \"PageClose\",\n PV: \"PageVisible\",\n PI: \"PageInvisible\",\n K: \"Keystroke\",\n F: \"Format\",\n V: \"Validate\",\n C: \"Calculate\",\n};\n\nconst DocumentActionEventType = {\n WC: \"WillClose\",\n WS: \"WillSave\",\n DS: \"DidSave\",\n WP: \"WillPrint\",\n DP: \"DidPrint\",\n};\n\nconst PageActionEventType = {\n O: \"PageOpen\",\n C: \"PageClose\",\n};\n\nconst VerbosityLevel = {\n ERRORS: 0,\n WARNINGS: 1,\n INFOS: 5,\n};\n\n// All the possible operations for an operator list.\nconst OPS = {\n // Intentionally start from 1 so it is easy to spot bad operators that will be\n // 0's.\n // PLEASE NOTE: We purposely keep any removed operators commented out, since\n // re-numbering the list would risk breaking third-party users.\n dependency: 1,\n setLineWidth: 2,\n setLineCap: 3,\n setLineJoin: 4,\n setMiterLimit: 5,\n setDash: 6,\n setRenderingIntent: 7,\n setFlatness: 8,\n setGState: 9,\n save: 10,\n restore: 11,\n transform: 12,\n moveTo: 13,\n lineTo: 14,\n curveTo: 15,\n curveTo2: 16,\n curveTo3: 17,\n closePath: 18,\n rectangle: 19,\n stroke: 20,\n closeStroke: 21,\n fill: 22,\n eoFill: 23,\n fillStroke: 24,\n eoFillStroke: 25,\n closeFillStroke: 26,\n closeEOFillStroke: 27,\n endPath: 28,\n clip: 29,\n eoClip: 30,\n beginText: 31,\n endText: 32,\n setCharSpacing: 33,\n setWordSpacing: 34,\n setHScale: 35,\n setLeading: 36,\n setFont: 37,\n setTextRenderingMode: 38,\n setTextRise: 39,\n moveText: 40,\n setLeadingMoveText: 41,\n setTextMatrix: 42,\n nextLine: 43,\n showText: 44,\n showSpacedText: 45,\n nextLineShowText: 46,\n nextLineSetSpacingShowText: 47,\n setCharWidth: 48,\n setCharWidthAndBounds: 49,\n setStrokeColorSpace: 50,\n setFillColorSpace: 51,\n setStrokeColor: 52,\n setStrokeColorN: 53,\n setFillColor: 54,\n setFillColorN: 55,\n setStrokeGray: 56,\n setFillGray: 57,\n setStrokeRGBColor: 58,\n setFillRGBColor: 59,\n setStrokeCMYKColor: 60,\n setFillCMYKColor: 61,\n shadingFill: 62,\n beginInlineImage: 63,\n beginImageData: 64,\n endInlineImage: 65,\n paintXObject: 66,\n markPoint: 67,\n markPointProps: 68,\n beginMarkedContent: 69,\n beginMarkedContentProps: 70,\n endMarkedContent: 71,\n beginCompat: 72,\n endCompat: 73,\n paintFormXObjectBegin: 74,\n paintFormXObjectEnd: 75,\n beginGroup: 76,\n endGroup: 77,\n // beginAnnotations: 78,\n // endAnnotations: 79,\n beginAnnotation: 80,\n endAnnotation: 81,\n // paintJpegXObject: 82,\n paintImageMaskXObject: 83,\n paintImageMaskXObjectGroup: 84,\n paintImageXObject: 85,\n paintInlineImageXObject: 86,\n paintInlineImageXObjectGroup: 87,\n paintImageXObjectRepeat: 88,\n paintImageMaskXObjectRepeat: 89,\n paintSolidColorImageMask: 90,\n constructPath: 91,\n setStrokeTransparent: 92,\n setFillTransparent: 93,\n rawFillPath: 94,\n};\n\n// In order to have a switch statement that is fast (i.e. which use a jump\n// table), we need to have the OPS in a contiguous range.\nconst DrawOPS = {\n moveTo: 0,\n lineTo: 1,\n curveTo: 2,\n quadraticCurveTo: 3,\n closePath: 4,\n};\n\nconst PasswordResponses = {\n NEED_PASSWORD: 1,\n INCORRECT_PASSWORD: 2,\n};\n\nlet verbosity = VerbosityLevel.WARNINGS;\n\nfunction setVerbosityLevel(level) {\n if (Number.isInteger(level)) {\n verbosity = level;\n }\n}\n\nfunction getVerbosityLevel() {\n return verbosity;\n}\n\n// A notice for devs. These are good for things that are helpful to devs, such\n// as warning that Workers were disabled, which is important to devs but not\n// end users.\nfunction info(msg) {\n if (verbosity >= VerbosityLevel.INFOS) {\n // eslint-disable-next-line no-console\n console.info(`Info: ${msg}`);\n }\n}\n\n// Non-fatal warnings.\nfunction warn(msg) {\n if (verbosity >= VerbosityLevel.WARNINGS) {\n // eslint-disable-next-line no-console\n console.warn(`Warning: ${msg}`);\n }\n}\n\nfunction unreachable(msg) {\n throw new Error(msg);\n}\n\nfunction assert(cond, msg) {\n if (!cond) {\n unreachable(msg);\n }\n}\n\n// Checks if URLs use one of the allowed protocols, e.g. to avoid XSS.\nfunction _isValidProtocol(url) {\n switch (url?.protocol) {\n case \"http:\":\n case \"https:\":\n case \"ftp:\":\n case \"mailto:\":\n case \"tel:\":\n return true;\n default:\n return false;\n }\n}\n\n/**\n * Attempts to create a valid absolute URL.\n *\n * @param {URL|string} url - An absolute, or relative, URL.\n * @param {URL|string} [baseUrl] - An absolute URL.\n * @param {Object} [options]\n * @returns Either a valid {URL}, or `null` otherwise.\n */\nfunction createValidAbsoluteUrl(url, baseUrl = null, options = null) {\n if (!url) {\n return null;\n }\n if (options && typeof url === \"string\") {\n // Let URLs beginning with \"www.\" default to using the \"http://\" protocol.\n if (options.addDefaultProtocol && url.startsWith(\"www.\")) {\n const dots = url.match(/\\./g);\n // Avoid accidentally matching a *relative* URL pointing to a file named\n // e.g. \"www.pdf\" or similar.\n if (dots?.length >= 2) {\n url = `http://${url}`;\n }\n }\n\n // According to ISO 32000-1:2008, section 12.6.4.7, URIs should be encoded\n // in 7-bit ASCII. Some bad PDFs use UTF-8 encoding; see bug 1122280.\n if (options.tryConvertEncoding) {\n try {\n url = stringToUTF8String(url);\n } catch {}\n }\n }\n\n const absoluteUrl = baseUrl ? URL.parse(url, baseUrl) : URL.parse(url);\n return _isValidProtocol(absoluteUrl) ? absoluteUrl : null;\n}\n\n/**\n * Remove, or replace, the hash property of the URL.\n *\n * @param {URL|string} url - The absolute, or relative, URL.\n * @param {string} hash - The hash property (use an empty string to remove it).\n * @param {boolean} [allowRel] - Allow relative URLs.\n * @returns {string} The resulting URL string.\n */\nfunction updateUrlHash(url, hash, allowRel = false) {\n const res = URL.parse(url);\n if (res) {\n res.hash = hash;\n return res.href;\n }\n // Support well-formed relative URLs, necessary for `web/app.js` in GENERIC\n // builds, by optionally falling back to string parsing.\n if (allowRel && createValidAbsoluteUrl(url, \"http://example.com\")) {\n return url.split(\"#\", 1)[0] + `${hash ? `#${hash}` : \"\"}`;\n }\n return \"\";\n}\n\nfunction shadow(obj, prop, value, nonSerializable = false) {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n assert(\n prop in obj,\n `shadow: Property \"${prop && prop.toString()}\" not found in object.`\n );\n }\n Object.defineProperty(obj, prop, {\n value,\n enumerable: !nonSerializable,\n configurable: true,\n writable: false,\n });\n return value;\n}\n\n/**\n * @type {any}\n */\nconst BaseException = (function BaseExceptionClosure() {\n // eslint-disable-next-line no-shadow\n function BaseException(message, name) {\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n this.constructor === BaseException\n ) {\n unreachable(\"Cannot initialize BaseException.\");\n }\n this.message = message;\n this.name = name;\n }\n BaseException.prototype = new Error();\n BaseException.constructor = BaseException;\n\n return BaseException;\n})();\n\nclass PasswordException extends BaseException {\n constructor(msg, code) {\n super(msg, \"PasswordException\");\n this.code = code;\n }\n}\n\nclass UnknownErrorException extends BaseException {\n constructor(msg, details) {\n super(msg, \"UnknownErrorException\");\n this.details = details;\n }\n}\n\nclass InvalidPDFException extends BaseException {\n constructor(msg) {\n super(msg, \"InvalidPDFException\");\n }\n}\n\nclass ResponseException extends BaseException {\n constructor(msg, status, missing) {\n super(msg, \"ResponseException\");\n this.status = status;\n this.missing = missing;\n }\n}\n\n/**\n * Error caused during parsing PDF data.\n */\nclass FormatError extends BaseException {\n constructor(msg) {\n super(msg, \"FormatError\");\n }\n}\n\n/**\n * Error used to indicate task cancellation.\n */\nclass AbortException extends BaseException {\n constructor(msg) {\n super(msg, \"AbortException\");\n }\n}\n\nfunction bytesToString(bytes) {\n if (typeof bytes !== \"object\" || bytes?.length === undefined) {\n unreachable(\"Invalid argument for bytesToString\");\n }\n const length = bytes.length;\n const MAX_ARGUMENT_COUNT = 8192;\n if (length < MAX_ARGUMENT_COUNT) {\n return String.fromCharCode.apply(null, bytes);\n }\n const strBuf = [];\n for (let i = 0; i < length; i += MAX_ARGUMENT_COUNT) {\n const chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length);\n const chunk = bytes.subarray(i, chunkEnd);\n strBuf.push(String.fromCharCode.apply(null, chunk));\n }\n return strBuf.join(\"\");\n}\n\nfunction stringToBytes(str) {\n if (typeof str !== \"string\") {\n unreachable(\"Invalid argument for stringToBytes\");\n }\n const length = str.length;\n const bytes = new Uint8Array(length);\n for (let i = 0; i < length; ++i) {\n bytes[i] = str.charCodeAt(i) & 0xff;\n }\n return bytes;\n}\n\nfunction string32(value) {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n assert(\n typeof value === \"number\" && Math.abs(value) < 2 ** 32,\n `string32: Unexpected input \"${value}\".`\n );\n }\n return String.fromCharCode(\n (value >> 24) & 0xff,\n (value >> 16) & 0xff,\n (value >> 8) & 0xff,\n value & 0xff\n );\n}\n\nfunction objectSize(obj) {\n return Object.keys(obj).length;\n}\n\n// Checks the endianness of the platform.\nfunction isLittleEndian() {\n const buffer8 = new Uint8Array(4);\n buffer8[0] = 1;\n const view32 = new Uint32Array(buffer8.buffer, 0, 1);\n return view32[0] === 1;\n}\n\n// Checks if it's possible to eval JS expressions.\nfunction isEvalSupported() {\n try {\n new Function(\"\"); // eslint-disable-line no-new, no-new-func\n return true;\n } catch {\n return false;\n }\n}\n\nclass FeatureTest {\n static get isLittleEndian() {\n return shadow(this, \"isLittleEndian\", isLittleEndian());\n }\n\n static get isEvalSupported() {\n return shadow(this, \"isEvalSupported\", isEvalSupported());\n }\n\n static get isOffscreenCanvasSupported() {\n return shadow(\n this,\n \"isOffscreenCanvasSupported\",\n typeof OffscreenCanvas !== \"undefined\"\n );\n }\n\n static get isImageDecoderSupported() {\n return shadow(\n this,\n \"isImageDecoderSupported\",\n typeof ImageDecoder !== \"undefined\"\n );\n }\n\n static get isFloat16ArraySupported() {\n return shadow(\n this,\n \"isFloat16ArraySupported\",\n typeof Float16Array !== \"undefined\"\n );\n }\n\n static get isSanitizerSupported() {\n return shadow(\n this,\n \"isSanitizerSupported\",\n // eslint-disable-next-line no-undef\n typeof Sanitizer !== \"undefined\"\n );\n }\n\n static get platform() {\n const { platform, userAgent } = navigator;\n\n return shadow(this, \"platform\", {\n isAndroid: userAgent.includes(\"Android\"),\n isLinux: platform.includes(\"Linux\"),\n isMac: platform.includes(\"Mac\"),\n isWindows: platform.includes(\"Win\"),\n isFirefox:\n (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n userAgent.includes(\"Firefox\"),\n });\n }\n\n static get isCSSRoundSupported() {\n return shadow(\n this,\n \"isCSSRoundSupported\",\n globalThis.CSS?.supports?.(\"width: round(1.5px, 1px)\")\n );\n }\n}\n\nconst hexNumbers = Array.from(Array(256).keys(), n =>\n n.toString(16).padStart(2, \"0\")\n);\n\nclass Util {\n static makeHexColor(r, g, b) {\n return `#${hexNumbers[r]}${hexNumbers[g]}${hexNumbers[b]}`;\n }\n\n static domMatrixToTransform(dm) {\n return [dm.a, dm.b, dm.c, dm.d, dm.e, dm.f];\n }\n\n // Apply a scaling matrix to some min/max values.\n // If a scaling factor is negative then min and max must be\n // swapped.\n static scaleMinMax(transform, minMax) {\n let temp;\n if (transform[0]) {\n if (transform[0] < 0) {\n temp = minMax[0];\n minMax[0] = minMax[2];\n minMax[2] = temp;\n }\n minMax[0] *= transform[0];\n minMax[2] *= transform[0];\n\n if (transform[3] < 0) {\n temp = minMax[1];\n minMax[1] = minMax[3];\n minMax[3] = temp;\n }\n minMax[1] *= transform[3];\n minMax[3] *= transform[3];\n } else {\n temp = minMax[0];\n minMax[0] = minMax[1];\n minMax[1] = temp;\n temp = minMax[2];\n minMax[2] = minMax[3];\n minMax[3] = temp;\n\n if (transform[1] < 0) {\n temp = minMax[1];\n minMax[1] = minMax[3];\n minMax[3] = temp;\n }\n minMax[1] *= transform[1];\n minMax[3] *= transform[1];\n\n if (transform[2] < 0) {\n temp = minMax[0];\n minMax[0] = minMax[2];\n minMax[2] = temp;\n }\n minMax[0] *= transform[2];\n minMax[2] *= transform[2];\n }\n minMax[0] += transform[4];\n minMax[1] += transform[5];\n minMax[2] += transform[4];\n minMax[3] += transform[5];\n }\n\n // Concatenates two transformation matrices together and returns the result.\n static transform(m1, m2) {\n return [\n m1[0] * m2[0] + m1[2] * m2[1],\n m1[1] * m2[0] + m1[3] * m2[1],\n m1[0] * m2[2] + m1[2] * m2[3],\n m1[1] * m2[2] + m1[3] * m2[3],\n m1[0] * m2[4] + m1[2] * m2[5] + m1[4],\n m1[1] * m2[4] + m1[3] * m2[5] + m1[5],\n ];\n }\n\n // Multiplies m (an array-based transform) by md (a DOMMatrix transform).\n static multiplyByDOMMatrix(m, md) {\n return [\n m[0] * md.a + m[2] * md.b,\n m[1] * md.a + m[3] * md.b,\n m[0] * md.c + m[2] * md.d,\n m[1] * md.c + m[3] * md.d,\n m[0] * md.e + m[2] * md.f + m[4],\n m[1] * md.e + m[3] * md.f + m[5],\n ];\n }\n\n // For 2d affine transforms\n static applyTransform(p, m, pos = 0) {\n const p0 = p[pos];\n const p1 = p[pos + 1];\n p[pos] = p0 * m[0] + p1 * m[2] + m[4];\n p[pos + 1] = p0 * m[1] + p1 * m[3] + m[5];\n }\n\n static applyTransformToBezier(p, transform, pos = 0) {\n const m0 = transform[0];\n const m1 = transform[1];\n const m2 = transform[2];\n const m3 = transform[3];\n const m4 = transform[4];\n const m5 = transform[5];\n for (let i = 0; i < 6; i += 2) {\n const pI = p[pos + i];\n const pI1 = p[pos + i + 1];\n p[pos + i] = pI * m0 + pI1 * m2 + m4;\n p[pos + i + 1] = pI * m1 + pI1 * m3 + m5;\n }\n }\n\n static applyInverseTransform(p, m) {\n const p0 = p[0];\n const p1 = p[1];\n const d = m[0] * m[3] - m[1] * m[2];\n p[0] = (p0 * m[3] - p1 * m[2] + m[2] * m[5] - m[4] * m[3]) / d;\n p[1] = (-p0 * m[1] + p1 * m[0] + m[4] * m[1] - m[5] * m[0]) / d;\n }\n\n // Applies the transform to the rectangle and finds the minimum axially\n // aligned bounding box.\n static axialAlignedBoundingBox(rect, transform, output) {\n const m0 = transform[0];\n const m1 = transform[1];\n const m2 = transform[2];\n const m3 = transform[3];\n const m4 = transform[4];\n const m5 = transform[5];\n const r0 = rect[0];\n const r1 = rect[1];\n const r2 = rect[2];\n const r3 = rect[3];\n\n let a0 = m0 * r0 + m4;\n let a2 = a0;\n let a1 = m0 * r2 + m4;\n let a3 = a1;\n let b0 = m3 * r1 + m5;\n let b2 = b0;\n let b1 = m3 * r3 + m5;\n let b3 = b1;\n\n if (m1 !== 0 || m2 !== 0) {\n // Non-scaling matrix: shouldn't be frequent.\n const m1r0 = m1 * r0;\n const m1r2 = m1 * r2;\n const m2r1 = m2 * r1;\n const m2r3 = m2 * r3;\n a0 += m2r1;\n a3 += m2r1;\n a1 += m2r3;\n a2 += m2r3;\n b0 += m1r0;\n b3 += m1r0;\n b1 += m1r2;\n b2 += m1r2;\n }\n\n output[0] = Math.min(output[0], a0, a1, a2, a3);\n output[1] = Math.min(output[1], b0, b1, b2, b3);\n output[2] = Math.max(output[2], a0, a1, a2, a3);\n output[3] = Math.max(output[3], b0, b1, b2, b3);\n }\n\n static inverseTransform(m) {\n const d = m[0] * m[3] - m[1] * m[2];\n return [\n m[3] / d,\n -m[1] / d,\n -m[2] / d,\n m[0] / d,\n (m[2] * m[5] - m[4] * m[3]) / d,\n (m[4] * m[1] - m[5] * m[0]) / d,\n ];\n }\n\n // This calculation uses Singular Value Decomposition.\n // The SVD can be represented with formula A = USV. We are interested in the\n // matrix S here because it represents the scale values.\n static singularValueDecompose2dScale(matrix, output) {\n const m0 = matrix[0];\n const m1 = matrix[1];\n const m2 = matrix[2];\n const m3 = matrix[3];\n // Multiply matrix m with its transpose.\n const a = m0 ** 2 + m1 ** 2;\n const b = m0 * m2 + m1 * m3;\n const c = m2 ** 2 + m3 ** 2;\n\n // Solve the second degree polynomial to get roots.\n const first = (a + c) / 2;\n const second = Math.sqrt(first ** 2 - (a * c - b ** 2));\n output[0] = Math.sqrt(first + second || 1);\n output[1] = Math.sqrt(first - second || 1);\n }\n\n // Normalize rectangle rect=[x1, y1, x2, y2] so that (x1,y1) < (x2,y2)\n // For coordinate systems whose origin lies in the bottom-left, this\n // means normalization to (BL,TR) ordering. For systems with origin in the\n // top-left, this means (TL,BR) ordering.\n static normalizeRect(rect) {\n const r = rect.slice(0); // clone rect\n if (rect[0] > rect[2]) {\n r[0] = rect[2];\n r[2] = rect[0];\n }\n if (rect[1] > rect[3]) {\n r[1] = rect[3];\n r[3] = rect[1];\n }\n return r;\n }\n\n // Returns a rectangle [x1, y1, x2, y2] corresponding to the\n // intersection of rect1 and rect2. If no intersection, returns 'null'\n // The rectangle coordinates of rect1, rect2 should be [x1, y1, x2, y2]\n static intersect(rect1, rect2) {\n const xLow = Math.max(\n Math.min(rect1[0], rect1[2]),\n Math.min(rect2[0], rect2[2])\n );\n const xHigh = Math.min(\n Math.max(rect1[0], rect1[2]),\n Math.max(rect2[0], rect2[2])\n );\n if (xLow > xHigh) {\n return null;\n }\n const yLow = Math.max(\n Math.min(rect1[1], rect1[3]),\n Math.min(rect2[1], rect2[3])\n );\n const yHigh = Math.min(\n Math.max(rect1[1], rect1[3]),\n Math.max(rect2[1], rect2[3])\n );\n if (yLow > yHigh) {\n return null;\n }\n\n return [xLow, yLow, xHigh, yHigh];\n }\n\n static pointBoundingBox(x, y, minMax) {\n minMax[0] = Math.min(minMax[0], x);\n minMax[1] = Math.min(minMax[1], y);\n minMax[2] = Math.max(minMax[2], x);\n minMax[3] = Math.max(minMax[3], y);\n }\n\n static rectBoundingBox(x0, y0, x1, y1, minMax) {\n minMax[0] = Math.min(minMax[0], x0, x1);\n minMax[1] = Math.min(minMax[1], y0, y1);\n minMax[2] = Math.max(minMax[2], x0, x1);\n minMax[3] = Math.max(minMax[3], y0, y1);\n }\n\n static #getExtremumOnCurve(x0, x1, x2, x3, y0, y1, y2, y3, t, minMax) {\n if (t <= 0 || t >= 1) {\n return;\n }\n const mt = 1 - t;\n const tt = t * t;\n const ttt = tt * t;\n const x = mt * (mt * (mt * x0 + 3 * t * x1) + 3 * tt * x2) + ttt * x3;\n const y = mt * (mt * (mt * y0 + 3 * t * y1) + 3 * tt * y2) + ttt * y3;\n minMax[0] = Math.min(minMax[0], x);\n minMax[1] = Math.min(minMax[1], y);\n minMax[2] = Math.max(minMax[2], x);\n minMax[3] = Math.max(minMax[3], y);\n }\n\n static #getExtremum(x0, x1, x2, x3, y0, y1, y2, y3, a, b, c, minMax) {\n if (Math.abs(a) < 1e-12) {\n if (Math.abs(b) >= 1e-12) {\n this.#getExtremumOnCurve(\n x0,\n x1,\n x2,\n x3,\n y0,\n y1,\n y2,\n y3,\n -c / b,\n minMax\n );\n }\n return;\n }\n\n const delta = b ** 2 - 4 * c * a;\n if (delta < 0) {\n return;\n }\n const sqrtDelta = Math.sqrt(delta);\n const a2 = 2 * a;\n this.#getExtremumOnCurve(\n x0,\n x1,\n x2,\n x3,\n y0,\n y1,\n y2,\n y3,\n (-b + sqrtDelta) / a2,\n minMax\n );\n this.#getExtremumOnCurve(\n x0,\n x1,\n x2,\n x3,\n y0,\n y1,\n y2,\n y3,\n (-b - sqrtDelta) / a2,\n minMax\n );\n }\n\n // From https://github.com/adobe-webplatform/Snap.svg/blob/b365287722a72526000ac4bfcf0ce4cac2faa015/src/path.js#L852\n static bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3, minMax) {\n minMax[0] = Math.min(minMax[0], x0, x3);\n minMax[1] = Math.min(minMax[1], y0, y3);\n minMax[2] = Math.max(minMax[2], x0, x3);\n minMax[3] = Math.max(minMax[3], y0, y3);\n\n this.#getExtremum(\n x0,\n x1,\n x2,\n x3,\n y0,\n y1,\n y2,\n y3,\n 3 * (-x0 + 3 * (x1 - x2) + x3),\n 6 * (x0 - 2 * x1 + x2),\n 3 * (x1 - x0),\n minMax\n );\n this.#getExtremum(\n x0,\n x1,\n x2,\n x3,\n y0,\n y1,\n y2,\n y3,\n 3 * (-y0 + 3 * (y1 - y2) + y3),\n 6 * (y0 - 2 * y1 + y2),\n 3 * (y1 - y0),\n minMax\n );\n }\n}\n\nconst PDFStringTranslateTable = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2d8,\n 0x2c7, 0x2c6, 0x2d9, 0x2dd, 0x2db, 0x2da, 0x2dc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192,\n 0x2044, 0x2039, 0x203a, 0x2212, 0x2030, 0x201e, 0x201c, 0x201d, 0x2018,\n 0x2019, 0x201a, 0x2122, 0xfb01, 0xfb02, 0x141, 0x152, 0x160, 0x178, 0x17d,\n 0x131, 0x142, 0x153, 0x161, 0x17e, 0, 0x20ac,\n];\n\nfunction stringToPDFString(str, keepEscapeSequence = false) {\n // See section 7.9.2.2 Text String Type.\n // The string can contain some language codes bracketed with 0x1b,\n // so we must remove them.\n if (str[0] >= \"\\xEF\") {\n let encoding;\n if (str[0] === \"\\xFE\" && str[1] === \"\\xFF\") {\n encoding = \"utf-16be\";\n if (str.length % 2 === 1) {\n str = str.slice(0, -1);\n }\n } else if (str[0] === \"\\xFF\" && str[1] === \"\\xFE\") {\n encoding = \"utf-16le\";\n if (str.length % 2 === 1) {\n str = str.slice(0, -1);\n }\n } else if (str[0] === \"\\xEF\" && str[1] === \"\\xBB\" && str[2] === \"\\xBF\") {\n encoding = \"utf-8\";\n }\n\n if (encoding) {\n try {\n const decoder = new TextDecoder(encoding, { fatal: true });\n const buffer = stringToBytes(str);\n const decoded = decoder.decode(buffer);\n if (keepEscapeSequence || !decoded.includes(\"\\x1b\")) {\n return decoded;\n }\n return decoded.replaceAll(/\\x1b[^\\x1b]*(?:\\x1b|$)/g, \"\");\n } catch (ex) {\n warn(`stringToPDFString: \"${ex}\".`);\n }\n }\n }\n // ISO Latin 1\n const strBuf = [];\n for (let i = 0, ii = str.length; i < ii; i++) {\n const charCode = str.charCodeAt(i);\n if (!keepEscapeSequence && charCode === 0x1b) {\n // eslint-disable-next-line no-empty\n while (++i < ii && str.charCodeAt(i) !== 0x1b) {}\n continue;\n }\n const code = PDFStringTranslateTable[charCode];\n strBuf.push(code ? String.fromCharCode(code) : str.charAt(i));\n }\n return strBuf.join(\"\");\n}\n\nfunction stringToUTF8String(str) {\n return decodeURIComponent(escape(str));\n}\n\nfunction utf8StringToString(str) {\n return unescape(encodeURIComponent(str));\n}\n\nfunction isArrayEqual(arr1, arr2) {\n if (arr1.length !== arr2.length) {\n return false;\n }\n for (let i = 0, ii = arr1.length; i < ii; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n return true;\n}\n\nfunction getModificationDate(date = new Date()) {\n if (!(date instanceof Date)) {\n date = new Date(date);\n }\n const buffer = [\n date.getUTCFullYear().toString(),\n (date.getUTCMonth() + 1).toString().padStart(2, \"0\"),\n date.getUTCDate().toString().padStart(2, \"0\"),\n date.getUTCHours().toString().padStart(2, \"0\"),\n date.getUTCMinutes().toString().padStart(2, \"0\"),\n date.getUTCSeconds().toString().padStart(2, \"0\"),\n ];\n\n return buffer.join(\"\");\n}\n\nlet NormalizeRegex = null;\nlet NormalizationMap = null;\nfunction normalizeUnicode(str) {\n if (!NormalizeRegex) {\n // In order to generate the following regex:\n // - create a PDF containing all the chars in the range 0000-FFFF with\n // a NFKC which is different of the char.\n // - copy and paste all those chars and get the ones where NFKC is\n // required.\n // It appears that most the chars here contain some ligatures.\n NormalizeRegex =\n /([\\u00a0\\u00b5\\u037e\\u0eb3\\u2000-\\u200a\\u202f\\u2126\\ufb00-\\ufb04\\ufb06\\ufb20-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufba1\\ufba4-\\ufba9\\ufbae-\\ufbb1\\ufbd3-\\ufbdc\\ufbde-\\ufbe7\\ufbea-\\ufbf8\\ufbfc-\\ufbfd\\ufc00-\\ufc5d\\ufc64-\\ufcf1\\ufcf5-\\ufd3d\\ufd88\\ufdf4\\ufdfa-\\ufdfb\\ufe71\\ufe77\\ufe79\\ufe7b\\ufe7d]+)|(\\ufb05+)/gu;\n NormalizationMap = new Map([[\"ſt\", \"ſt\"]]);\n }\n return str.replaceAll(NormalizeRegex, (_, p1, p2) =>\n p1 ? p1.normalize(\"NFKC\") : NormalizationMap.get(p2)\n );\n}\n\nfunction getUuid() {\n if (\n (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n typeof crypto.randomUUID === \"function\"\n ) {\n return crypto.randomUUID();\n }\n const buf = new Uint8Array(32);\n crypto.getRandomValues(buf);\n return bytesToString(buf);\n}\n\nconst AnnotationPrefix = \"pdfjs_internal_id_\";\n\nfunction _isValidExplicitDest(validRef, validName, dest) {\n if (!Array.isArray(dest) || dest.length < 2) {\n return false;\n }\n const [page, zoom, ...args] = dest;\n if (!validRef(page) && !Number.isInteger(page)) {\n return false;\n }\n if (!validName(zoom)) {\n return false;\n }\n const argsLen = args.length;\n let allowNull = true;\n switch (zoom.name) {\n case \"XYZ\":\n if (argsLen < 2 || argsLen > 3) {\n return false;\n }\n break;\n case \"Fit\":\n case \"FitB\":\n return argsLen === 0;\n case \"FitH\":\n case \"FitBH\":\n case \"FitV\":\n case \"FitBV\":\n if (argsLen > 1) {\n return false;\n }\n break;\n case \"FitR\":\n if (argsLen !== 4) {\n return false;\n }\n allowNull = false;\n break;\n default:\n return false;\n }\n for (const arg of args) {\n if (typeof arg === \"number\" || (allowNull && arg === null)) {\n continue;\n }\n return false;\n }\n return true;\n}\n\n// TODO: Replace all occurrences of this function with `Math.clamp` once\n// https://github.com/tc39/proposal-math-clamp/ is generally available.\nfunction MathClamp(v, min, max) {\n return Math.min(Math.max(v, min), max);\n}\n\n// TODO: Remove this once `Uint8Array.prototype.toHex` is generally available.\nfunction toHexUtil(arr) {\n if (Uint8Array.prototype.toHex) {\n return arr.toHex();\n }\n return Array.from(arr, num => hexNumbers[num]).join(\"\");\n}\n\n// TODO: Remove this once `Uint8Array.prototype.toBase64` is generally\n// available.\nfunction toBase64Util(arr) {\n if (Uint8Array.prototype.toBase64) {\n return arr.toBase64();\n }\n return btoa(bytesToString(arr));\n}\n\n// TODO: Remove this once `Uint8Array.fromBase64` is generally available.\nfunction fromBase64Util(str) {\n if (Uint8Array.fromBase64) {\n return Uint8Array.fromBase64(str);\n }\n return stringToBytes(atob(str));\n}\n\n// TODO: Remove this once https://bugzilla.mozilla.org/show_bug.cgi?id=1928493\n// is fixed.\nif (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"SKIP_BABEL\")) &&\n typeof Promise.try !== \"function\"\n) {\n Promise.try = function (fn, ...args) {\n return new Promise(resolve => {\n resolve(fn(...args));\n });\n };\n}\n\n// TODO: Remove this once the `javascript.options.experimental.math_sumprecise`\n// preference is removed from Firefox.\nif (typeof Math.sumPrecise !== \"function\") {\n // Note that this isn't a \"proper\" polyfill, but since we're only using it to\n // replace `Array.prototype.reduce()` invocations it should be fine.\n Math.sumPrecise = function (numbers) {\n return numbers.reduce((a, b) => a + b, 0);\n };\n}\n\nif (\n typeof PDFJSDev !== \"undefined\" &&\n !PDFJSDev.test(\"SKIP_BABEL\") &&\n typeof AbortSignal.any !== \"function\"\n) {\n AbortSignal.any = function (iterable) {\n const ac = new AbortController();\n const { signal } = ac;\n\n // Return immediately if any of the signals are already aborted.\n for (const s of iterable) {\n if (s.aborted) {\n ac.abort(s.reason);\n return signal;\n }\n }\n // Register \"abort\" listeners for all signals.\n for (const s of iterable) {\n s.addEventListener(\n \"abort\",\n () => {\n ac.abort(s.reason);\n },\n { signal } // Automatically remove the listener.\n );\n }\n\n return signal;\n };\n}\n\nexport {\n _isValidExplicitDest,\n AbortException,\n AnnotationActionEventType,\n AnnotationBorderStyleType,\n AnnotationEditorParamsType,\n AnnotationEditorPrefix,\n AnnotationEditorType,\n AnnotationFieldFlag,\n AnnotationFlag,\n AnnotationMode,\n AnnotationPrefix,\n AnnotationReplyType,\n AnnotationType,\n assert,\n BaseException,\n BASELINE_FACTOR,\n bytesToString,\n createValidAbsoluteUrl,\n DocumentActionEventType,\n DrawOPS,\n FeatureTest,\n FONT_IDENTITY_MATRIX,\n FormatError,\n fromBase64Util,\n getModificationDate,\n getUuid,\n getVerbosityLevel,\n hexNumbers,\n ImageKind,\n info,\n InvalidPDFException,\n isArrayEqual,\n isNodeJS,\n LINE_DESCENT_FACTOR,\n LINE_FACTOR,\n MathClamp,\n MeshFigureType,\n normalizeUnicode,\n objectSize,\n OPS,\n PageActionEventType,\n PasswordException,\n PasswordResponses,\n PermissionFlag,\n RenderingIntentFlag,\n ResponseException,\n setVerbosityLevel,\n shadow,\n string32,\n stringToBytes,\n stringToPDFString,\n stringToUTF8String,\n TextRenderingMode,\n toBase64Util,\n toHexUtil,\n UnknownErrorException,\n unreachable,\n updateUrlHash,\n utf8StringToString,\n Util,\n VerbosityLevel,\n warn,\n};\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./api\").TextContent} TextContent */\n\nclass XfaText {\n /**\n * Walk an XFA tree and create an array of text nodes that is compatible\n * with a regular PDFs TextContent. Currently, only TextItem.str is supported,\n * all other fields and styles haven't been implemented.\n *\n * @param {Object} xfa - An XFA fake DOM object.\n *\n * @returns {TextContent}\n */\n static textContent(xfa) {\n const items = [];\n const output = {\n items,\n styles: Object.create(null),\n };\n function walk(node) {\n if (!node) {\n return;\n }\n let str = null;\n const name = node.name;\n if (name === \"#text\") {\n str = node.value;\n } else if (!XfaText.shouldBuildText(name)) {\n return;\n } else if (node?.attributes?.textContent) {\n str = node.attributes.textContent;\n } else if (node.value) {\n str = node.value;\n }\n if (str !== null) {\n items.push({\n str,\n });\n }\n if (!node.children) {\n return;\n }\n for (const child of node.children) {\n walk(child);\n }\n }\n walk(xfa);\n return output;\n }\n\n /**\n * @param {string} name - DOM node name. (lower case)\n *\n * @returns {boolean} true if the DOM node should have a corresponding text\n * node.\n */\n static shouldBuildText(name) {\n return !(\n name === \"textarea\" ||\n name === \"input\" ||\n name === \"option\" ||\n name === \"select\"\n );\n }\n}\n\nexport { XfaText };\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./annotation_storage\").AnnotationStorage} AnnotationStorage */\n/** @typedef {import(\"./display_utils\").PageViewport} PageViewport */\n/** @typedef {import(\"../../web/interfaces\").IPDFLinkService} IPDFLinkService */\n\nimport { XfaText } from \"./xfa_text.js\";\n\n/**\n * @typedef {Object} XfaLayerParameters\n * @property {PageViewport} viewport\n * @property {HTMLDivElement} div\n * @property {Object} xfaHtml\n * @property {AnnotationStorage} [annotationStorage]\n * @property {IPDFLinkService} linkService\n * @property {string} [intent] - (default value is 'display').\n */\n\nclass XfaLayer {\n static setupStorage(html, id, element, storage, intent) {\n const storedData = storage.getValue(id, { value: null });\n switch (element.name) {\n case \"textarea\":\n if (storedData.value !== null) {\n html.textContent = storedData.value;\n }\n if (intent === \"print\") {\n break;\n }\n html.addEventListener(\"input\", event => {\n storage.setValue(id, { value: event.target.value });\n });\n break;\n case \"input\":\n if (\n element.attributes.type === \"radio\" ||\n element.attributes.type === \"checkbox\"\n ) {\n if (storedData.value === element.attributes.xfaOn) {\n html.setAttribute(\"checked\", true);\n } else if (storedData.value === element.attributes.xfaOff) {\n // The checked attribute may have been set when opening the file,\n // unset through the UI and we're here because of printing.\n html.removeAttribute(\"checked\");\n }\n if (intent === \"print\") {\n break;\n }\n html.addEventListener(\"change\", event => {\n storage.setValue(id, {\n value: event.target.checked\n ? event.target.getAttribute(\"xfaOn\")\n : event.target.getAttribute(\"xfaOff\"),\n });\n });\n } else {\n if (storedData.value !== null) {\n html.setAttribute(\"value\", storedData.value);\n }\n if (intent === \"print\") {\n break;\n }\n html.addEventListener(\"input\", event => {\n storage.setValue(id, { value: event.target.value });\n });\n }\n break;\n case \"select\":\n if (storedData.value !== null) {\n html.setAttribute(\"value\", storedData.value);\n for (const option of element.children) {\n if (option.attributes.value === storedData.value) {\n option.attributes.selected = true;\n } else if (option.attributes.hasOwnProperty(\"selected\")) {\n delete option.attributes.selected;\n }\n }\n }\n html.addEventListener(\"input\", event => {\n const options = event.target.options;\n const value =\n options.selectedIndex === -1\n ? \"\"\n : options[options.selectedIndex].value;\n storage.setValue(id, { value });\n });\n break;\n }\n }\n\n static setAttributes({ html, element, storage = null, intent, linkService }) {\n const { attributes } = element;\n const isHTMLAnchorElement = html instanceof HTMLAnchorElement;\n\n if (attributes.type === \"radio\") {\n // Avoid to have a radio group when printing with the same as one\n // already displayed.\n attributes.name = `${attributes.name}-${intent}`;\n }\n for (const [key, value] of Object.entries(attributes)) {\n if (value === null || value === undefined) {\n continue;\n }\n\n switch (key) {\n case \"class\":\n if (value.length) {\n html.setAttribute(key, value.join(\" \"));\n }\n break;\n case \"dataId\":\n // We don't need to add dataId in the html object but it can\n // be useful to know its value when writing printing tests:\n // in this case, don't skip dataId to have its value.\n break;\n case \"id\":\n html.setAttribute(\"data-element-id\", value);\n break;\n case \"style\":\n Object.assign(html.style, value);\n break;\n case \"textContent\":\n html.textContent = value;\n break;\n default:\n if (!isHTMLAnchorElement || (key !== \"href\" && key !== \"newWindow\")) {\n html.setAttribute(key, value);\n }\n }\n }\n\n if (isHTMLAnchorElement) {\n linkService.addLinkAttributes(\n html,\n attributes.href,\n attributes.newWindow\n );\n }\n\n // Set the value after the others to be sure to overwrite any other values.\n if (storage && attributes.dataId) {\n this.setupStorage(html, attributes.dataId, element, storage);\n }\n }\n\n /**\n * Render the XFA layer.\n *\n * @param {XfaLayerParameters} parameters\n */\n static render(parameters) {\n const storage = parameters.annotationStorage;\n const linkService = parameters.linkService;\n const root = parameters.xfaHtml;\n const intent = parameters.intent || \"display\";\n const rootHtml = document.createElement(root.name);\n if (root.attributes) {\n this.setAttributes({\n html: rootHtml,\n element: root,\n intent,\n linkService,\n });\n }\n\n const isNotForRichText = intent !== \"richText\";\n const rootDiv = parameters.div;\n rootDiv.append(rootHtml);\n\n if (parameters.viewport) {\n const transform = `matrix(${parameters.viewport.transform.join(\",\")})`;\n rootDiv.style.transform = transform;\n }\n\n // Set defaults.\n if (isNotForRichText) {\n rootDiv.setAttribute(\"class\", \"xfaLayer xfaFont\");\n }\n\n // Text nodes used for the text highlighter.\n const textDivs = [];\n\n // In the rich text context, it's possible to just have a text node without\n // a root element, so we handle this case here (see issue 17215).\n if (root.children.length === 0) {\n if (root.value) {\n const node = document.createTextNode(root.value);\n rootHtml.append(node);\n if (isNotForRichText && XfaText.shouldBuildText(root.name)) {\n textDivs.push(node);\n }\n }\n return { textDivs };\n }\n\n const stack = [[root, -1, rootHtml]];\n\n while (stack.length > 0) {\n const [parent, i, html] = stack.at(-1);\n if (i + 1 === parent.children.length) {\n stack.pop();\n continue;\n }\n\n const child = parent.children[++stack.at(-1)[1]];\n if (child === null) {\n continue;\n }\n\n const { name } = child;\n if (name === \"#text\") {\n const node = document.createTextNode(child.value);\n textDivs.push(node);\n html.append(node);\n continue;\n }\n\n const childHtml = child?.attributes?.xmlns\n ? document.createElementNS(child.attributes.xmlns, name)\n : document.createElement(name);\n\n html.append(childHtml);\n if (child.attributes) {\n this.setAttributes({\n html: childHtml,\n element: child,\n storage,\n intent,\n linkService,\n });\n }\n\n if (child.children?.length > 0) {\n stack.push([child, -1, childHtml]);\n } else if (child.value) {\n const node = document.createTextNode(child.value);\n if (isNotForRichText && XfaText.shouldBuildText(name)) {\n textDivs.push(node);\n }\n childHtml.append(node);\n }\n }\n\n /**\n * TODO: re-enable that stuff once we've JS implementation.\n * See https://bugzilla.mozilla.org/show_bug.cgi?id=1719465.\n *\n * for (const el of rootDiv.querySelectorAll(\n * \".xfaDisabled input, .xfaDisabled textarea\"\n * )) {\n * el.setAttribute(\"disabled\", true);\n * }\n * for (const el of rootDiv.querySelectorAll(\n * \".xfaReadOnly input, .xfaReadOnly textarea\"\n * )) {\n * el.setAttribute(\"readOnly\", true);\n * }\n */\n\n for (const el of rootDiv.querySelectorAll(\n \".xfaNonInteractive input, .xfaNonInteractive textarea\"\n )) {\n el.setAttribute(\"readOnly\", true);\n }\n\n return {\n textDivs,\n };\n }\n\n /**\n * Update the XFA layer.\n *\n * @param {XfaLayerParameters} parameters\n */\n static update(parameters) {\n const transform = `matrix(${parameters.viewport.transform.join(\",\")})`;\n parameters.div.style.transform = transform;\n parameters.div.hidden = false;\n }\n}\n\nexport { XfaLayer };\n","/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n BaseException,\n DrawOPS,\n FeatureTest,\n shadow,\n Util,\n warn,\n} from \"../shared/util.js\";\nimport { XfaLayer } from \"./xfa_layer.js\";\n\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\n\nclass PixelsPerInch {\n static CSS = 96.0;\n\n static PDF = 72.0;\n\n static PDF_TO_CSS_UNITS = this.CSS / this.PDF;\n}\n\nasync function fetchData(url, type = \"text\") {\n if (\n (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n isValidFetchUrl(url, document.baseURI)\n ) {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(response.statusText);\n }\n switch (type) {\n case \"arraybuffer\":\n return response.arrayBuffer();\n case \"blob\":\n return response.blob();\n case \"json\":\n return response.json();\n }\n return response.text();\n }\n\n // The Fetch API is not supported.\n return new Promise((resolve, reject) => {\n const request = new XMLHttpRequest();\n request.open(\"GET\", url, /* async = */ true);\n request.responseType = type;\n\n request.onreadystatechange = () => {\n if (request.readyState !== XMLHttpRequest.DONE) {\n return;\n }\n if (request.status === 200 || request.status === 0) {\n switch (type) {\n case \"arraybuffer\":\n case \"blob\":\n case \"json\":\n resolve(request.response);\n return;\n }\n resolve(request.responseText);\n return;\n }\n reject(new Error(request.statusText));\n };\n\n request.send(null);\n });\n}\n\n/**\n * @typedef {Object} PageViewportParameters\n * @property {Array} viewBox - The xMin, yMin, xMax and\n * yMax coordinates.\n * @property {number} userUnit - The size of units.\n * @property {number} scale - The scale of the viewport.\n * @property {number} rotation - The rotation, in degrees, of the viewport.\n * @property {number} [offsetX] - The horizontal, i.e. x-axis, offset. The\n * default value is `0`.\n * @property {number} [offsetY] - The vertical, i.e. y-axis, offset. The\n * default value is `0`.\n * @property {boolean} [dontFlip] - If true, the y-axis will not be flipped.\n * The default value is `false`.\n */\n\n/**\n * @typedef {Object} PageViewportCloneParameters\n * @property {number} [scale] - The scale, overriding the one in the cloned\n * viewport. The default value is `this.scale`.\n * @property {number} [rotation] - The rotation, in degrees, overriding the one\n * in the cloned viewport. The default value is `this.rotation`.\n * @property {number} [offsetX] - The horizontal, i.e. x-axis, offset.\n * The default value is `this.offsetX`.\n * @property {number} [offsetY] - The vertical, i.e. y-axis, offset.\n * The default value is `this.offsetY`.\n * @property {boolean} [dontFlip] - If true, the x-axis will not be flipped.\n * The default value is `false`.\n */\n\n/**\n * PDF page viewport created based on scale, rotation and offset.\n */\nclass PageViewport {\n /**\n * @param {PageViewportParameters}\n */\n constructor({\n viewBox,\n userUnit,\n scale,\n rotation,\n offsetX = 0,\n offsetY = 0,\n dontFlip = false,\n }) {\n this.viewBox = viewBox;\n this.userUnit = userUnit;\n this.scale = scale;\n this.rotation = rotation;\n this.offsetX = offsetX;\n this.offsetY = offsetY;\n\n scale *= userUnit; // Take the userUnit into account.\n\n // creating transform to convert pdf coordinate system to the normal\n // canvas like coordinates taking in account scale and rotation\n const centerX = (viewBox[2] + viewBox[0]) / 2;\n const centerY = (viewBox[3] + viewBox[1]) / 2;\n let rotateA, rotateB, rotateC, rotateD;\n // Normalize the rotation, by clamping it to the [0, 360) range.\n rotation %= 360;\n if (rotation < 0) {\n rotation += 360;\n }\n switch (rotation) {\n case 180:\n rotateA = -1;\n rotateB = 0;\n rotateC = 0;\n rotateD = 1;\n break;\n case 90:\n rotateA = 0;\n rotateB = 1;\n rotateC = 1;\n rotateD = 0;\n break;\n case 270:\n rotateA = 0;\n rotateB = -1;\n rotateC = -1;\n rotateD = 0;\n break;\n case 0:\n rotateA = 1;\n rotateB = 0;\n rotateC = 0;\n rotateD = -1;\n break;\n default:\n throw new Error(\n \"PageViewport: Invalid rotation, must be a multiple of 90 degrees.\"\n );\n }\n\n if (dontFlip) {\n rotateC = -rotateC;\n rotateD = -rotateD;\n }\n\n let offsetCanvasX, offsetCanvasY;\n let width, height;\n if (rotateA === 0) {\n offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;\n offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY;\n width = (viewBox[3] - viewBox[1]) * scale;\n height = (viewBox[2] - viewBox[0]) * scale;\n } else {\n offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;\n offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;\n width = (viewBox[2] - viewBox[0]) * scale;\n height = (viewBox[3] - viewBox[1]) * scale;\n }\n // creating transform for the following operations:\n // translate(-centerX, -centerY), rotate and flip vertically,\n // scale, and translate(offsetCanvasX, offsetCanvasY)\n this.transform = [\n rotateA * scale,\n rotateB * scale,\n rotateC * scale,\n rotateD * scale,\n offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY,\n offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY,\n ];\n\n this.width = width;\n this.height = height;\n }\n\n /**\n * The original, un-scaled, viewport dimensions.\n * @type {Object}\n */\n get rawDims() {\n const dims = this.viewBox;\n\n return shadow(this, \"rawDims\", {\n pageWidth: dims[2] - dims[0],\n pageHeight: dims[3] - dims[1],\n pageX: dims[0],\n pageY: dims[1],\n });\n }\n\n /**\n * Clones viewport, with optional additional properties.\n * @param {PageViewportCloneParameters} [params]\n * @returns {PageViewport} Cloned viewport.\n */\n clone({\n scale = this.scale,\n rotation = this.rotation,\n offsetX = this.offsetX,\n offsetY = this.offsetY,\n dontFlip = false,\n } = {}) {\n return new PageViewport({\n viewBox: this.viewBox.slice(),\n userUnit: this.userUnit,\n scale,\n rotation,\n offsetX,\n offsetY,\n dontFlip,\n });\n }\n\n /**\n * Converts PDF point to the viewport coordinates. For examples, useful for\n * converting PDF location into canvas pixel coordinates.\n * @param {number} x - The x-coordinate.\n * @param {number} y - The y-coordinate.\n * @returns {Array} Array containing `x`- and `y`-coordinates of the\n * point in the viewport coordinate space.\n * @see {@link convertToPdfPoint}\n * @see {@link convertToViewportRectangle}\n */\n convertToViewportPoint(x, y) {\n const p = [x, y];\n Util.applyTransform(p, this.transform);\n return p;\n }\n\n /**\n * Converts PDF rectangle to the viewport coordinates.\n * @param {Array} rect - The xMin, yMin, xMax and yMax coordinates.\n * @returns {Array} Array containing corresponding coordinates of the\n * rectangle in the viewport coordinate space.\n * @see {@link convertToViewportPoint}\n */\n convertToViewportRectangle(rect) {\n const topLeft = [rect[0], rect[1]];\n Util.applyTransform(topLeft, this.transform);\n const bottomRight = [rect[2], rect[3]];\n Util.applyTransform(bottomRight, this.transform);\n return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]];\n }\n\n /**\n * Converts viewport coordinates to the PDF location. For examples, useful\n * for converting canvas pixel location into PDF one.\n * @param {number} x - The x-coordinate.\n * @param {number} y - The y-coordinate.\n * @returns {Array} Array containing `x`- and `y`-coordinates of the\n * point in the PDF coordinate space.\n * @see {@link convertToViewportPoint}\n */\n convertToPdfPoint(x, y) {\n const p = [x, y];\n Util.applyInverseTransform(p, this.transform);\n return p;\n }\n}\n\nclass RenderingCancelledException extends BaseException {\n constructor(msg, extraDelay = 0) {\n super(msg, \"RenderingCancelledException\");\n this.extraDelay = extraDelay;\n }\n}\n\nfunction isDataScheme(url) {\n const ii = url.length;\n let i = 0;\n while (i < ii && url[i].trim() === \"\") {\n i++;\n }\n return url.substring(i, i + 5).toLowerCase() === \"data:\";\n}\n\nfunction isPdfFile(filename) {\n return typeof filename === \"string\" && /\\.pdf$/i.test(filename);\n}\n\n/**\n * Gets the filename from a given URL.\n * @param {string} url\n * @returns {string}\n */\nfunction getFilenameFromUrl(url) {\n [url] = url.split(/[#?]/, 1);\n return url.substring(url.lastIndexOf(\"/\") + 1);\n}\n\n/**\n * Returns the filename or guessed filename from the url (see issue 3455).\n * @param {string} url - The original PDF location.\n * @param {string} defaultFilename - The value returned if the filename is\n * unknown, or the protocol is unsupported.\n * @returns {string} Guessed PDF filename.\n */\nfunction getPdfFilenameFromUrl(url, defaultFilename = \"document.pdf\") {\n if (typeof url !== \"string\") {\n return defaultFilename;\n }\n if (isDataScheme(url)) {\n warn('getPdfFilenameFromUrl: ignore \"data:\"-URL for performance reasons.');\n return defaultFilename;\n }\n\n const getURL = urlString => {\n try {\n return new URL(urlString);\n } catch {\n try {\n return new URL(decodeURIComponent(urlString));\n } catch {\n try {\n // Attempt to parse the URL using the document's base URI.\n return new URL(urlString, \"https://foo.bar\");\n } catch {\n try {\n return new URL(decodeURIComponent(urlString), \"https://foo.bar\");\n } catch {\n return null;\n }\n }\n }\n }\n };\n\n const newURL = getURL(url);\n if (!newURL) {\n // If the URL is invalid, return the default filename.\n return defaultFilename;\n }\n\n const decode = name => {\n try {\n let decoded = decodeURIComponent(name);\n if (decoded.includes(\"/\")) {\n decoded = decoded.split(\"/\").at(-1);\n if (decoded.test(/^\\.pdf$/i)) {\n return decoded;\n }\n return name;\n }\n return decoded;\n } catch {\n return name;\n }\n };\n\n const pdfRegex = /\\.pdf$/i;\n const filename = newURL.pathname.split(\"/\").at(-1);\n if (pdfRegex.test(filename)) {\n return decode(filename);\n }\n\n if (newURL.searchParams.size > 0) {\n const values = Array.from(newURL.searchParams.values()).reverse();\n for (const value of values) {\n if (pdfRegex.test(value)) {\n // If any of the search parameters ends with \".pdf\", return it.\n return decode(value);\n }\n }\n const keys = Array.from(newURL.searchParams.keys()).reverse();\n for (const key of keys) {\n if (pdfRegex.test(key)) {\n // If any of the search parameter keys ends with \".pdf\", return it.\n return decode(key);\n }\n }\n }\n\n if (newURL.hash) {\n const reFilename = /[^/?#=]+\\.pdf\\b(?!.*\\.pdf\\b)/i;\n const hashFilename = reFilename.exec(newURL.hash);\n if (hashFilename) {\n return decode(hashFilename[0]);\n }\n }\n\n return defaultFilename;\n}\n\nclass StatTimer {\n started = Object.create(null);\n\n times = [];\n\n time(name) {\n if (name in this.started) {\n warn(`Timer is already running for ${name}`);\n }\n this.started[name] = Date.now();\n }\n\n timeEnd(name) {\n if (!(name in this.started)) {\n warn(`Timer has not been started for ${name}`);\n }\n this.times.push({\n name,\n start: this.started[name],\n end: Date.now(),\n });\n // Remove timer from started so it can be called again.\n delete this.started[name];\n }\n\n toString() {\n // Find the longest name for padding purposes.\n const outBuf = [];\n let longest = 0;\n for (const { name } of this.times) {\n longest = Math.max(name.length, longest);\n }\n for (const { name, start, end } of this.times) {\n outBuf.push(`${name.padEnd(longest)} ${end - start}ms\\n`);\n }\n return outBuf.join(\"\");\n }\n}\n\nfunction isValidFetchUrl(url, baseUrl) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: isValidFetchUrl\");\n }\n const res = baseUrl ? URL.parse(url, baseUrl) : URL.parse(url);\n // The Fetch API only supports the http/https protocols, and not file/ftp.\n return res?.protocol === \"http:\" || res?.protocol === \"https:\";\n}\n\n/**\n * Event handler to suppress context menu.\n */\nfunction noContextMenu(e) {\n e.preventDefault();\n}\n\nfunction stopEvent(e) {\n e.preventDefault();\n e.stopPropagation();\n}\n\n// Deprecated API function -- display regardless of the `verbosity` setting.\nfunction deprecated(details) {\n // eslint-disable-next-line no-console\n console.log(\"Deprecated API usage: \" + details);\n}\n\nclass PDFDateString {\n static #regex;\n\n /**\n * Convert a PDF date string to a JavaScript `Date` object.\n *\n * The PDF date string format is described in section 7.9.4 of the official\n * PDF 32000-1:2008 specification. However, in the PDF 1.7 reference (sixth\n * edition) Adobe describes the same format including a trailing apostrophe.\n * This syntax in incorrect, but Adobe Acrobat creates PDF files that contain\n * them. We ignore all apostrophes as they are not necessary for date parsing.\n *\n * Moreover, Adobe Acrobat doesn't handle changing the date to universal time\n * and doesn't use the user's time zone (effectively ignoring the HH' and mm'\n * parts of the date string).\n *\n * @param {string} input\n * @returns {Date|null}\n */\n static toDateObject(input) {\n if (input instanceof Date) {\n return input;\n }\n if (!input || typeof input !== \"string\") {\n return null;\n }\n\n // Lazily initialize the regular expression.\n this.#regex ||= new RegExp(\n \"^D:\" + // Prefix (required)\n \"(\\\\d{4})\" + // Year (required)\n \"(\\\\d{2})?\" + // Month (optional)\n \"(\\\\d{2})?\" + // Day (optional)\n \"(\\\\d{2})?\" + // Hour (optional)\n \"(\\\\d{2})?\" + // Minute (optional)\n \"(\\\\d{2})?\" + // Second (optional)\n \"([Z|+|-])?\" + // Universal time relation (optional)\n \"(\\\\d{2})?\" + // Offset hour (optional)\n \"'?\" + // Splitting apostrophe (optional)\n \"(\\\\d{2})?\" + // Offset minute (optional)\n \"'?\" // Trailing apostrophe (optional)\n );\n\n // Optional fields that don't satisfy the requirements from the regular\n // expression (such as incorrect digit counts or numbers that are out of\n // range) will fall back the defaults from the specification.\n const matches = this.#regex.exec(input);\n if (!matches) {\n return null;\n }\n\n // JavaScript's `Date` object expects the month to be between 0 and 11\n // instead of 1 and 12, so we have to correct for that.\n const year = parseInt(matches[1], 10);\n let month = parseInt(matches[2], 10);\n month = month >= 1 && month <= 12 ? month - 1 : 0;\n let day = parseInt(matches[3], 10);\n day = day >= 1 && day <= 31 ? day : 1;\n let hour = parseInt(matches[4], 10);\n hour = hour >= 0 && hour <= 23 ? hour : 0;\n let minute = parseInt(matches[5], 10);\n minute = minute >= 0 && minute <= 59 ? minute : 0;\n let second = parseInt(matches[6], 10);\n second = second >= 0 && second <= 59 ? second : 0;\n const universalTimeRelation = matches[7] || \"Z\";\n let offsetHour = parseInt(matches[8], 10);\n offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0;\n let offsetMinute = parseInt(matches[9], 10) || 0;\n offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0;\n\n // Universal time relation 'Z' means that the local time is equal to the\n // universal time, whereas the relations '+'/'-' indicate that the local\n // time is later respectively earlier than the universal time. Every date\n // is normalized to universal time.\n if (universalTimeRelation === \"-\") {\n hour += offsetHour;\n minute += offsetMinute;\n } else if (universalTimeRelation === \"+\") {\n hour -= offsetHour;\n minute -= offsetMinute;\n }\n\n return new Date(Date.UTC(year, month, day, hour, minute, second));\n }\n}\n\n/**\n * NOTE: This is (mostly) intended to support printing of XFA forms.\n */\nfunction getXfaPageViewport(xfaPage, { scale = 1, rotation = 0 }) {\n const { width, height } = xfaPage.attributes.style;\n const viewBox = [0, 0, parseInt(width), parseInt(height)];\n\n return new PageViewport({\n viewBox,\n userUnit: 1,\n scale,\n rotation,\n });\n}\n\nfunction getRGB(color) {\n if (color.startsWith(\"#\")) {\n const colorRGB = parseInt(color.slice(1), 16);\n return [\n (colorRGB & 0xff0000) >> 16,\n (colorRGB & 0x00ff00) >> 8,\n colorRGB & 0x0000ff,\n ];\n }\n\n if (color.startsWith(\"rgb(\")) {\n // getComputedStyle(...).color returns a `rgb(R, G, B)` color.\n return color\n .slice(/* \"rgb(\".length */ 4, -1) // Strip out \"rgb(\" and \")\".\n .split(\",\")\n .map(x => parseInt(x));\n }\n\n if (color.startsWith(\"rgba(\")) {\n return color\n .slice(/* \"rgba(\".length */ 5, -1) // Strip out \"rgba(\" and \")\".\n .split(\",\")\n .map(x => parseInt(x))\n .slice(0, 3);\n }\n\n warn(`Not a valid color format: \"${color}\"`);\n return [0, 0, 0];\n}\n\nfunction getColorValues(colors) {\n const span = document.createElement(\"span\");\n span.style.visibility = \"hidden\";\n // NOTE: The following does *not* affect `forced-colors: active` mode.\n span.style.colorScheme = \"only light\";\n document.body.append(span);\n for (const name of colors.keys()) {\n span.style.color = name;\n const computedColor = window.getComputedStyle(span).color;\n colors.set(name, getRGB(computedColor));\n }\n span.remove();\n}\n\nfunction getCurrentTransform(ctx) {\n const { a, b, c, d, e, f } = ctx.getTransform();\n return [a, b, c, d, e, f];\n}\n\nfunction getCurrentTransformInverse(ctx) {\n const { a, b, c, d, e, f } = ctx.getTransform().invertSelf();\n return [a, b, c, d, e, f];\n}\n\n/**\n * @param {HTMLDivElement} div\n * @param {PageViewport} viewport\n * @param {boolean} mustFlip\n * @param {boolean} mustRotate\n */\nfunction setLayerDimensions(\n div,\n viewport,\n mustFlip = false,\n mustRotate = true\n) {\n if (viewport instanceof PageViewport) {\n const { pageWidth, pageHeight } = viewport.rawDims;\n const { style } = div;\n const useRound = FeatureTest.isCSSRoundSupported;\n\n const w = `var(--total-scale-factor) * ${pageWidth}px`,\n h = `var(--total-scale-factor) * ${pageHeight}px`;\n const widthStr = useRound\n ? `round(down, ${w}, var(--scale-round-x))`\n : `calc(${w})`,\n heightStr = useRound\n ? `round(down, ${h}, var(--scale-round-y))`\n : `calc(${h})`;\n\n if (!mustFlip || viewport.rotation % 180 === 0) {\n style.width = widthStr;\n style.height = heightStr;\n } else {\n style.width = heightStr;\n style.height = widthStr;\n }\n }\n\n if (mustRotate) {\n div.setAttribute(\"data-main-rotation\", viewport.rotation);\n }\n}\n\n/**\n * Scale factors for the canvas, necessary with HiDPI displays.\n */\nclass OutputScale {\n constructor() {\n const { pixelRatio } = OutputScale;\n\n /**\n * @type {number} Horizontal scale.\n */\n this.sx = pixelRatio;\n\n /**\n * @type {number} Vertical scale.\n */\n this.sy = pixelRatio;\n }\n\n /**\n * @type {boolean} Returns `true` when scaling is required, `false` otherwise.\n */\n get scaled() {\n return this.sx !== 1 || this.sy !== 1;\n }\n\n /**\n * @type {boolean} Returns `true` when scaling is symmetric,\n * `false` otherwise.\n */\n get symmetric() {\n return this.sx === this.sy;\n }\n\n /**\n * @returns {boolean} Returns `true` if scaling was limited,\n * `false` otherwise.\n */\n limitCanvas(width, height, maxPixels, maxDim, capAreaFactor = -1) {\n let maxAreaScale = Infinity,\n maxWidthScale = Infinity,\n maxHeightScale = Infinity;\n\n maxPixels = OutputScale.capPixels(maxPixels, capAreaFactor);\n if (maxPixels > 0) {\n maxAreaScale = Math.sqrt(maxPixels / (width * height));\n }\n if (maxDim !== -1) {\n maxWidthScale = maxDim / width;\n maxHeightScale = maxDim / height;\n }\n const maxScale = Math.min(maxAreaScale, maxWidthScale, maxHeightScale);\n\n if (this.sx > maxScale || this.sy > maxScale) {\n this.sx = maxScale;\n this.sy = maxScale;\n return true;\n }\n return false;\n }\n\n static get pixelRatio() {\n return globalThis.devicePixelRatio || 1;\n }\n\n static capPixels(maxPixels, capAreaFactor) {\n if (capAreaFactor >= 0) {\n const winPixels = Math.ceil(\n (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")\n ? window.innerWidth * window.innerHeight\n : window.screen.availWidth * window.screen.availHeight) *\n this.pixelRatio ** 2 *\n (1 + capAreaFactor / 100)\n );\n return maxPixels > 0 ? Math.min(maxPixels, winPixels) : winPixels;\n }\n return maxPixels;\n }\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types\n// to know which types are supported by the browser.\nconst SupportedImageMimeTypes = [\n \"image/apng\",\n \"image/avif\",\n \"image/bmp\",\n \"image/gif\",\n \"image/jpeg\",\n \"image/png\",\n \"image/svg+xml\",\n \"image/webp\",\n \"image/x-icon\",\n];\n\nclass ColorScheme {\n static get isDarkMode() {\n return shadow(\n this,\n \"isDarkMode\",\n !!window?.matchMedia?.(\"(prefers-color-scheme: dark)\").matches\n );\n }\n}\n\nclass CSSConstants {\n static get commentForegroundColor() {\n const element = document.createElement(\"span\");\n element.classList.add(\"comment\", \"sidebar\");\n const { style } = element;\n style.width = style.height = \"0\";\n style.display = \"none\";\n style.color = \"var(--comment-fg-color)\";\n document.body.append(element);\n const { color } = window.getComputedStyle(element);\n element.remove();\n return shadow(this, \"commentForegroundColor\", getRGB(color));\n }\n}\n\nfunction applyOpacity(r, g, b, opacity) {\n opacity = Math.min(Math.max(opacity ?? 1, 0), 1);\n const white = 255 * (1 - opacity);\n r = Math.round(r * opacity + white);\n g = Math.round(g * opacity + white);\n b = Math.round(b * opacity + white);\n return [r, g, b];\n}\n\nfunction RGBToHSL(rgb, output) {\n const r = rgb[0] / 255;\n const g = rgb[1] / 255;\n const b = rgb[2] / 255;\n\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n\n if (max === min) {\n // achromatic\n output[0] = output[1] = 0; // hue and saturation are 0\n } else {\n const d = max - min;\n output[1] = l < 0.5 ? d / (max + min) : d / (2 - max - min);\n // hue\n switch (max) {\n case r:\n output[0] = ((g - b) / d + (g < b ? 6 : 0)) * 60;\n break;\n case g:\n output[0] = ((b - r) / d + 2) * 60;\n break;\n case b:\n output[0] = ((r - g) / d + 4) * 60;\n break;\n }\n }\n output[2] = l;\n}\n\nfunction HSLToRGB(hsl, output) {\n const h = hsl[0];\n const s = hsl[1];\n const l = hsl[2];\n const c = (1 - Math.abs(2 * l - 1)) * s; // chroma\n const x = c * (1 - Math.abs(((h / 60) % 2) - 1));\n const m = l - c / 2;\n\n switch (Math.floor(h / 60)) {\n case 0:\n output[0] = c + m;\n output[1] = x + m;\n output[2] = m;\n break;\n case 1:\n output[0] = x + m;\n output[1] = c + m;\n output[2] = m;\n break;\n case 2:\n output[0] = m;\n output[1] = c + m;\n output[2] = x + m;\n break;\n case 3:\n output[0] = m;\n output[1] = x + m;\n output[2] = c + m;\n break;\n case 4:\n output[0] = x + m;\n output[1] = m;\n output[2] = c + m;\n break;\n case 5:\n case 6:\n output[0] = c + m;\n output[1] = m;\n output[2] = x + m;\n break;\n }\n}\n\nfunction computeLuminance(x) {\n return x <= 0.03928 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4;\n}\n\nfunction contrastRatio(hsl1, hsl2, output) {\n HSLToRGB(hsl1, output);\n output.map(computeLuminance);\n const lum1 = 0.2126 * output[0] + 0.7152 * output[1] + 0.0722 * output[2];\n HSLToRGB(hsl2, output);\n output.map(computeLuminance);\n const lum2 = 0.2126 * output[0] + 0.7152 * output[1] + 0.0722 * output[2];\n return lum1 > lum2\n ? (lum1 + 0.05) / (lum2 + 0.05)\n : (lum2 + 0.05) / (lum1 + 0.05);\n}\n\n// Cache for the findContrastColor function, to improve performance.\nconst contrastCache = new Map();\n\n/**\n * Find a color that has sufficient contrast against a fixed color.\n * The luminance (in HSL color space) of the base color is adjusted\n * until the contrast ratio between the base color and the fixed color\n * is at least the minimum contrast ratio required by WCAG 2.1.\n * @param {Array} baseColor\n * @param {Array} fixedColor\n * @returns {string}\n */\nfunction findContrastColor(baseColor, fixedColor) {\n const key =\n baseColor[0] +\n baseColor[1] * 0x100 +\n baseColor[2] * 0x10000 +\n fixedColor[0] * 0x1000000 +\n fixedColor[1] * 0x100000000 +\n fixedColor[2] * 0x10000000000;\n let cachedValue = contrastCache.get(key);\n if (cachedValue) {\n return cachedValue;\n }\n const array = new Float32Array(9);\n const output = array.subarray(0, 3);\n const baseHSL = array.subarray(3, 6);\n RGBToHSL(baseColor, baseHSL);\n const fixedHSL = array.subarray(6, 9);\n RGBToHSL(fixedColor, fixedHSL);\n const isFixedColorDark = fixedHSL[2] < 0.5;\n\n // Use the contrast ratio requirements from WCAG 2.1.\n // https://www.w3.org/TR/WCAG21/#contrast-minimum\n // https://www.w3.org/TR/WCAG21/#contrast-enhanced\n const minContrast = isFixedColorDark ? 12 : 4.5;\n\n baseHSL[2] = isFixedColorDark\n ? Math.sqrt(baseHSL[2])\n : 1 - Math.sqrt(1 - baseHSL[2]);\n\n if (contrastRatio(baseHSL, fixedHSL, output) < minContrast) {\n let start, end;\n if (isFixedColorDark) {\n start = baseHSL[2];\n end = 1;\n } else {\n start = 0;\n end = baseHSL[2];\n }\n const PRECISION = 0.005;\n while (end - start > PRECISION) {\n const mid = (baseHSL[2] = (start + end) / 2);\n if (\n isFixedColorDark ===\n contrastRatio(baseHSL, fixedHSL, output) < minContrast\n ) {\n start = mid;\n } else {\n end = mid;\n }\n }\n baseHSL[2] = isFixedColorDark ? end : start;\n }\n\n HSLToRGB(baseHSL, output);\n cachedValue = Util.makeHexColor(\n Math.round(output[0] * 255),\n Math.round(output[1] * 255),\n Math.round(output[2] * 255)\n );\n contrastCache.set(key, cachedValue);\n return cachedValue;\n}\n\nfunction renderRichText({ html, dir, className }, container) {\n const fragment = document.createDocumentFragment();\n if (typeof html === \"string\") {\n const p = document.createElement(\"p\");\n p.dir = dir || \"auto\";\n const lines = html.split(/(?:\\r\\n?|\\n)/);\n for (let i = 0, ii = lines.length; i < ii; ++i) {\n const line = lines[i];\n p.append(document.createTextNode(line));\n if (i < ii - 1) {\n p.append(document.createElement(\"br\"));\n }\n }\n fragment.append(p);\n } else {\n XfaLayer.render({\n xfaHtml: html,\n div: fragment,\n intent: \"richText\",\n });\n }\n fragment.firstChild.classList.add(\"richText\", className);\n container.append(fragment);\n}\n\nfunction makePathFromDrawOPS(data) {\n // Using a SVG string is slightly slower than using the following loop.\n const path = new Path2D();\n if (!data) {\n return path;\n }\n for (let i = 0, ii = data.length; i < ii; ) {\n switch (data[i++]) {\n case DrawOPS.moveTo:\n path.moveTo(data[i++], data[i++]);\n break;\n case DrawOPS.lineTo:\n path.lineTo(data[i++], data[i++]);\n break;\n case DrawOPS.curveTo:\n path.bezierCurveTo(\n data[i++],\n data[i++],\n data[i++],\n data[i++],\n data[i++],\n data[i++]\n );\n break;\n case DrawOPS.quadraticCurveTo:\n path.quadraticCurveTo(data[i++], data[i++], data[i++], data[i++]);\n break;\n case DrawOPS.closePath:\n path.closePath();\n break;\n default:\n warn(`Unrecognized drawing path operator: ${data[i - 1]}`);\n break;\n }\n }\n return path;\n}\n\nexport {\n applyOpacity,\n ColorScheme,\n CSSConstants,\n deprecated,\n fetchData,\n findContrastColor,\n getColorValues,\n getCurrentTransform,\n getCurrentTransformInverse,\n getFilenameFromUrl,\n getPdfFilenameFromUrl,\n getRGB,\n getXfaPageViewport,\n isDataScheme,\n isPdfFile,\n isValidFetchUrl,\n makePathFromDrawOPS,\n noContextMenu,\n OutputScale,\n PageViewport,\n PDFDateString,\n PixelsPerInch,\n RenderingCancelledException,\n renderRichText,\n setLayerDimensions,\n StatTimer,\n stopEvent,\n SupportedImageMimeTypes,\n SVG_NS,\n};\n","/* Copyright 2023 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { noContextMenu, stopEvent } from \"../display_utils.js\";\n\nclass EditorToolbar {\n #toolbar = null;\n\n #colorPicker = null;\n\n #editor;\n\n #buttons = null;\n\n #altText = null;\n\n #comment = null;\n\n #commentButtonDivider = null;\n\n #signatureDescriptionButton = null;\n\n static #l10nRemove = null;\n\n constructor(editor) {\n this.#editor = editor;\n\n EditorToolbar.#l10nRemove ||= Object.freeze({\n freetext: \"pdfjs-editor-remove-freetext-button\",\n highlight: \"pdfjs-editor-remove-highlight-button\",\n ink: \"pdfjs-editor-remove-ink-button\",\n stamp: \"pdfjs-editor-remove-stamp-button\",\n signature: \"pdfjs-editor-remove-signature-button\",\n });\n }\n\n render() {\n const editToolbar = (this.#toolbar = document.createElement(\"div\"));\n editToolbar.classList.add(\"editToolbar\", \"hidden\");\n editToolbar.setAttribute(\"role\", \"toolbar\");\n\n const signal = this.#editor._uiManager._signal;\n if (signal instanceof AbortSignal && !signal.aborted) {\n editToolbar.addEventListener(\"contextmenu\", noContextMenu, { signal });\n editToolbar.addEventListener(\"pointerdown\", EditorToolbar.#pointerDown, {\n signal,\n });\n }\n\n const buttons = (this.#buttons = document.createElement(\"div\"));\n buttons.className = \"buttons\";\n editToolbar.append(buttons);\n\n const position = this.#editor.toolbarPosition;\n if (position) {\n const { style } = editToolbar;\n const x =\n this.#editor._uiManager.direction === \"ltr\"\n ? 1 - position[0]\n : position[0];\n style.insetInlineEnd = `${100 * x}%`;\n style.top = `calc(${\n 100 * position[1]\n }% + var(--editor-toolbar-vert-offset))`;\n }\n\n return editToolbar;\n }\n\n get div() {\n return this.#toolbar;\n }\n\n static #pointerDown(e) {\n e.stopPropagation();\n }\n\n #focusIn(e) {\n this.#editor._focusEventsAllowed = false;\n stopEvent(e);\n }\n\n #focusOut(e) {\n this.#editor._focusEventsAllowed = true;\n stopEvent(e);\n }\n\n #addListenersToElement(element) {\n // If we're clicking on a button with the keyboard or with\n // the mouse, we don't want to trigger any focus events on\n // the editor.\n const signal = this.#editor._uiManager._signal;\n if (!(signal instanceof AbortSignal) || signal.aborted) {\n return false;\n }\n element.addEventListener(\"focusin\", this.#focusIn.bind(this), {\n capture: true,\n signal,\n });\n element.addEventListener(\"focusout\", this.#focusOut.bind(this), {\n capture: true,\n signal,\n });\n element.addEventListener(\"contextmenu\", noContextMenu, { signal });\n return true;\n }\n\n hide() {\n this.#toolbar.classList.add(\"hidden\");\n this.#colorPicker?.hideDropdown();\n }\n\n show() {\n this.#toolbar.classList.remove(\"hidden\");\n this.#altText?.shown();\n this.#comment?.shown();\n }\n\n addDeleteButton() {\n const { editorType, _uiManager } = this.#editor;\n\n const button = document.createElement(\"button\");\n button.classList.add(\"basic\", \"deleteButton\");\n button.tabIndex = 0;\n button.setAttribute(\"data-l10n-id\", EditorToolbar.#l10nRemove[editorType]);\n if (this.#addListenersToElement(button)) {\n button.addEventListener(\n \"click\",\n e => {\n _uiManager.delete();\n },\n { signal: _uiManager._signal }\n );\n }\n this.#buttons.append(button);\n }\n\n get #divider() {\n const divider = document.createElement(\"div\");\n divider.className = \"divider\";\n return divider;\n }\n\n async addAltText(altText) {\n const button = await altText.render();\n this.#addListenersToElement(button);\n this.#buttons.append(button, this.#divider);\n this.#altText = altText;\n }\n\n addComment(comment, beforeElement = null) {\n if (this.#comment) {\n return;\n }\n const button = comment.renderForToolbar();\n if (!button) {\n return;\n }\n this.#addListenersToElement(button);\n const divider = (this.#commentButtonDivider = this.#divider);\n if (!beforeElement) {\n this.#buttons.append(button, divider);\n } else {\n this.#buttons.insertBefore(button, beforeElement);\n this.#buttons.insertBefore(divider, beforeElement);\n }\n this.#comment = comment;\n comment.toolbar = this;\n }\n\n addColorPicker(colorPicker) {\n if (this.#colorPicker) {\n return;\n }\n this.#colorPicker = colorPicker;\n const button = colorPicker.renderButton();\n this.#addListenersToElement(button);\n this.#buttons.append(button, this.#divider);\n }\n\n async addEditSignatureButton(signatureManager) {\n const button = (this.#signatureDescriptionButton =\n await signatureManager.renderEditButton(this.#editor));\n this.#addListenersToElement(button);\n this.#buttons.append(button, this.#divider);\n }\n\n removeButton(name) {\n switch (name) {\n case \"comment\":\n this.#comment?.removeToolbarCommentButton();\n this.#comment = null;\n this.#commentButtonDivider?.remove();\n this.#commentButtonDivider = null;\n break;\n }\n }\n\n async addButton(name, tool) {\n switch (name) {\n case \"colorPicker\":\n if (tool) {\n this.addColorPicker(tool);\n }\n break;\n case \"altText\":\n if (tool) {\n await this.addAltText(tool);\n }\n break;\n case \"editSignature\":\n if (tool) {\n await this.addEditSignatureButton(tool);\n }\n break;\n case \"delete\":\n this.addDeleteButton();\n break;\n case \"comment\":\n if (tool) {\n this.addComment(tool);\n }\n break;\n }\n }\n\n async addButtonBefore(name, tool, beforeSelector) {\n if (!tool && name === \"comment\") {\n return;\n }\n const beforeElement = this.#buttons.querySelector(beforeSelector);\n if (!beforeElement) {\n return;\n }\n if (name === \"comment\") {\n this.addComment(tool, beforeElement);\n }\n }\n\n updateEditSignatureButton(description) {\n if (this.#signatureDescriptionButton) {\n this.#signatureDescriptionButton.title = description;\n }\n }\n\n remove() {\n this.#toolbar.remove();\n this.#colorPicker?.destroy();\n this.#colorPicker = null;\n }\n}\n\nclass FloatingToolbar {\n #buttons = null;\n\n #toolbar = null;\n\n #uiManager;\n\n constructor(uiManager) {\n this.#uiManager = uiManager;\n }\n\n #render() {\n const editToolbar = (this.#toolbar = document.createElement(\"div\"));\n editToolbar.className = \"editToolbar\";\n editToolbar.setAttribute(\"role\", \"toolbar\");\n\n const signal = this.#uiManager._signal;\n if (signal instanceof AbortSignal && !signal.aborted) {\n editToolbar.addEventListener(\"contextmenu\", noContextMenu, {\n signal,\n });\n }\n\n const buttons = (this.#buttons = document.createElement(\"div\"));\n buttons.className = \"buttons\";\n editToolbar.append(buttons);\n\n if (this.#uiManager.hasCommentManager()) {\n this.#makeButton(\n \"commentButton\",\n `pdfjs-comment-floating-button`,\n \"pdfjs-comment-floating-button-label\",\n () => {\n this.#uiManager.commentSelection(\"floating_button\");\n }\n );\n }\n\n this.#makeButton(\n \"highlightButton\",\n `pdfjs-highlight-floating-button1`,\n \"pdfjs-highlight-floating-button-label\",\n () => {\n this.#uiManager.highlightSelection(\"floating_button\");\n }\n );\n\n return editToolbar;\n }\n\n #getLastPoint(boxes, isLTR) {\n let lastY = 0;\n let lastX = 0;\n for (const box of boxes) {\n const y = box.y + box.height;\n if (y < lastY) {\n continue;\n }\n const x = box.x + (isLTR ? box.width : 0);\n if (y > lastY) {\n lastX = x;\n lastY = y;\n continue;\n }\n if (isLTR) {\n if (x > lastX) {\n lastX = x;\n }\n } else if (x < lastX) {\n lastX = x;\n }\n }\n return [isLTR ? 1 - lastX : lastX, lastY];\n }\n\n show(parent, boxes, isLTR) {\n const [x, y] = this.#getLastPoint(boxes, isLTR);\n const { style } = (this.#toolbar ||= this.#render());\n parent.append(this.#toolbar);\n style.insetInlineEnd = `${100 * x}%`;\n style.top = `calc(${100 * y}% + var(--editor-toolbar-vert-offset))`;\n }\n\n hide() {\n this.#toolbar.remove();\n }\n\n #makeButton(buttonClass, l10nId, labelL10nId, clickHandler) {\n const button = document.createElement(\"button\");\n button.classList.add(\"basic\", buttonClass);\n button.tabIndex = 0;\n button.setAttribute(\"data-l10n-id\", l10nId);\n const span = document.createElement(\"span\");\n button.append(span);\n span.className = \"visuallyHidden\";\n span.setAttribute(\"data-l10n-id\", labelL10nId);\n const signal = this.#uiManager._signal;\n if (signal instanceof AbortSignal && !signal.aborted) {\n button.addEventListener(\"contextmenu\", noContextMenu, { signal });\n button.addEventListener(\"click\", clickHandler, { signal });\n }\n this.#buttons.append(button);\n }\n}\n\nexport { EditorToolbar, FloatingToolbar };\n","/* Copyright 2022 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./editor.js\").AnnotationEditor} AnnotationEditor */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./annotation_editor_layer.js\").AnnotationEditorLayer} AnnotationEditorLayer */\n\nimport {\n AnnotationEditorParamsType,\n AnnotationEditorPrefix,\n AnnotationEditorType,\n FeatureTest,\n getUuid,\n shadow,\n Util,\n warn,\n} from \"../../shared/util.js\";\nimport {\n fetchData,\n getColorValues,\n getRGB,\n PixelsPerInch,\n stopEvent,\n} from \"../display_utils.js\";\nimport { FloatingToolbar } from \"./toolbar.js\";\n\nfunction bindEvents(obj, element, names) {\n for (const name of names) {\n element.addEventListener(name, obj[name].bind(obj));\n }\n}\n\n/**\n * Class to store current pointers used by the editor to be able to handle\n * multiple pointers (e.g. two fingers, a pen, a mouse, ...).\n */\nclass CurrentPointers {\n // To manage the pointer events.\n\n // The pointerId and pointerIds are used to keep track of\n // the pointers with a same type (e.g. two fingers).\n static #pointerId = NaN;\n\n static #pointerIds = null;\n\n // Track the timestamp to know if the touchmove event is used.\n static #moveTimestamp = NaN;\n\n // The pointerType is used to know if we are using a mouse, a pen or a touch.\n static #pointerType = null;\n\n static initializeAndAddPointerId(pointerId) {\n // Store pointer ids. For example, the user is using a second finger.\n (CurrentPointers.#pointerIds ||= new Set()).add(pointerId);\n }\n\n static setPointer(pointerType, pointerId) {\n CurrentPointers.#pointerId ||= pointerId;\n CurrentPointers.#pointerType ??= pointerType;\n }\n\n static setTimeStamp(timeStamp) {\n CurrentPointers.#moveTimestamp = timeStamp;\n }\n\n static isSamePointerId(pointerId) {\n return CurrentPointers.#pointerId === pointerId;\n }\n\n // Check if it's the same pointer id, otherwise remove it from the set.\n static isSamePointerIdOrRemove(pointerId) {\n if (CurrentPointers.#pointerId === pointerId) {\n return true;\n }\n\n CurrentPointers.#pointerIds?.delete(pointerId);\n return false;\n }\n\n static isSamePointerType(pointerType) {\n return CurrentPointers.#pointerType === pointerType;\n }\n\n static isInitializedAndDifferentPointerType(pointerType) {\n return (\n CurrentPointers.#pointerType !== null &&\n !CurrentPointers.isSamePointerType(pointerType)\n );\n }\n\n static isSameTimeStamp(timeStamp) {\n return CurrentPointers.#moveTimestamp === timeStamp;\n }\n\n static isUsingMultiplePointers() {\n // Check if the user is using multiple fingers\n return CurrentPointers.#pointerIds?.size >= 1;\n }\n\n static clearPointerType() {\n CurrentPointers.#pointerType = null;\n }\n\n static clearPointerIds() {\n CurrentPointers.#pointerId = NaN;\n CurrentPointers.#pointerIds = null;\n }\n\n static clearTimeStamp() {\n CurrentPointers.#moveTimestamp = NaN;\n }\n}\n\n/**\n * Class to create some unique ids for the different editors.\n */\nclass IdManager {\n #id = 0;\n\n constructor() {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n Object.defineProperty(this, \"reset\", {\n value: () => (this.#id = 0),\n });\n Object.defineProperty(this, \"getNextId\", {\n value: () => this.#id,\n });\n }\n }\n\n /**\n * Get a unique id.\n * @returns {string}\n */\n get id() {\n return `${AnnotationEditorPrefix}${this.#id++}`;\n }\n}\n\n/**\n * Class to manage the images used by the editors.\n * The main idea is to try to minimize the memory used by the images.\n * The images are cached and reused when possible\n * We use a refCounter to know when an image is not used anymore but we need to\n * be able to restore an image after a remove+undo, so we keep a file reference\n * or an url one.\n */\nclass ImageManager {\n #baseId = getUuid();\n\n #id = 0;\n\n #cache = null;\n\n static get _isSVGFittingCanvas() {\n // By default, Firefox doesn't rescale without preserving the aspect ratio\n // when drawing an SVG image on a canvas, see https://bugzilla.mozilla.org/1547776.\n // The \"workaround\" is to append \"svgView(preserveAspectRatio(none))\" to the\n // url, but according to comment #15, it seems that it leads to unexpected\n // behavior in Safari.\n const svg = `data:image/svg+xml;charset=UTF-8,`;\n const canvas = new OffscreenCanvas(1, 3);\n const ctx = canvas.getContext(\"2d\", { willReadFrequently: true });\n const image = new Image();\n image.src = svg;\n const promise = image.decode().then(() => {\n ctx.drawImage(image, 0, 0, 1, 1, 0, 0, 1, 3);\n return new Uint32Array(ctx.getImageData(0, 0, 1, 1).data.buffer)[0] === 0;\n });\n\n return shadow(this, \"_isSVGFittingCanvas\", promise);\n }\n\n async #get(key, rawData) {\n this.#cache ||= new Map();\n let data = this.#cache.get(key);\n if (data === null) {\n // We already tried to load the image but it failed.\n return null;\n }\n if (data?.bitmap) {\n data.refCounter += 1;\n return data;\n }\n try {\n data ||= {\n bitmap: null,\n id: `image_${this.#baseId}_${this.#id++}`,\n refCounter: 0,\n isSvg: false,\n };\n let image;\n if (typeof rawData === \"string\") {\n data.url = rawData;\n image = await fetchData(rawData, \"blob\");\n } else if (rawData instanceof File) {\n image = data.file = rawData;\n } else if (rawData instanceof Blob) {\n image = rawData;\n }\n\n if (image.type === \"image/svg+xml\") {\n // Unfortunately, createImageBitmap doesn't work with SVG images.\n // (see https://bugzilla.mozilla.org/1841972).\n const mustRemoveAspectRatioPromise = ImageManager._isSVGFittingCanvas;\n const fileReader = new FileReader();\n const imageElement = new Image();\n const imagePromise = new Promise((resolve, reject) => {\n imageElement.onload = () => {\n data.bitmap = imageElement;\n data.isSvg = true;\n resolve();\n };\n fileReader.onload = async () => {\n const url = (data.svgUrl = fileReader.result);\n // We need to set the preserveAspectRatio to none in order to let\n // the image fits the canvas when resizing.\n imageElement.src = (await mustRemoveAspectRatioPromise)\n ? `${url}#svgView(preserveAspectRatio(none))`\n : url;\n };\n imageElement.onerror = fileReader.onerror = reject;\n });\n fileReader.readAsDataURL(image);\n await imagePromise;\n } else {\n data.bitmap = await createImageBitmap(image);\n }\n data.refCounter = 1;\n } catch (e) {\n warn(e);\n data = null;\n }\n this.#cache.set(key, data);\n if (data) {\n this.#cache.set(data.id, data);\n }\n return data;\n }\n\n async getFromFile(file) {\n const { lastModified, name, size, type } = file;\n return this.#get(`${lastModified}_${name}_${size}_${type}`, file);\n }\n\n async getFromUrl(url) {\n return this.#get(url, url);\n }\n\n async getFromBlob(id, blobPromise) {\n const blob = await blobPromise;\n return this.#get(id, blob);\n }\n\n async getFromId(id) {\n this.#cache ||= new Map();\n const data = this.#cache.get(id);\n if (!data) {\n return null;\n }\n if (data.bitmap) {\n data.refCounter += 1;\n return data;\n }\n\n if (data.file) {\n return this.getFromFile(data.file);\n }\n if (data.blobPromise) {\n const { blobPromise } = data;\n delete data.blobPromise;\n return this.getFromBlob(data.id, blobPromise);\n }\n return this.getFromUrl(data.url);\n }\n\n getFromCanvas(id, canvas) {\n this.#cache ||= new Map();\n let data = this.#cache.get(id);\n if (data?.bitmap) {\n data.refCounter += 1;\n return data;\n }\n const offscreen = new OffscreenCanvas(canvas.width, canvas.height);\n const ctx = offscreen.getContext(\"2d\");\n ctx.drawImage(canvas, 0, 0);\n data = {\n bitmap: offscreen.transferToImageBitmap(),\n id: `image_${this.#baseId}_${this.#id++}`,\n refCounter: 1,\n isSvg: false,\n };\n this.#cache.set(id, data);\n this.#cache.set(data.id, data);\n return data;\n }\n\n getSvgUrl(id) {\n const data = this.#cache.get(id);\n if (!data?.isSvg) {\n return null;\n }\n return data.svgUrl;\n }\n\n deleteId(id) {\n this.#cache ||= new Map();\n const data = this.#cache.get(id);\n if (!data) {\n return;\n }\n data.refCounter -= 1;\n if (data.refCounter !== 0) {\n return;\n }\n const { bitmap } = data;\n if (!data.url && !data.file) {\n // The image has no way to be restored (ctrl+z) so we must fix that.\n const canvas = new OffscreenCanvas(bitmap.width, bitmap.height);\n const ctx = canvas.getContext(\"bitmaprenderer\");\n ctx.transferFromImageBitmap(bitmap);\n data.blobPromise = canvas.convertToBlob();\n }\n\n bitmap.close?.();\n data.bitmap = null;\n }\n\n // We can use the id only if it belongs this manager.\n // We must take care of having the right manager because we can copy/paste\n // some images from other documents, hence it'd be a pity to use an id from an\n // other manager.\n isValidId(id) {\n return id.startsWith(`image_${this.#baseId}_`);\n }\n}\n\n/**\n * Class to handle undo/redo.\n * Commands are just saved in a buffer.\n * If we hit some memory issues we could likely use a circular buffer.\n * It has to be used as a singleton.\n */\nclass CommandManager {\n #commands = [];\n\n #locked = false;\n\n #maxSize;\n\n #position = -1;\n\n constructor(maxSize = 128) {\n this.#maxSize = maxSize;\n }\n\n /**\n * @typedef {Object} addOptions\n * @property {function} cmd\n * @property {function} undo\n * @property {function} [post]\n * @property {boolean} mustExec\n * @property {number} type\n * @property {boolean} overwriteIfSameType\n * @property {boolean} keepUndo\n */\n\n /**\n * Add a new couple of commands to be used in case of redo/undo.\n * @param {addOptions} options\n */\n add({\n cmd,\n undo,\n post,\n mustExec,\n type = NaN,\n overwriteIfSameType = false,\n keepUndo = false,\n }) {\n if (mustExec) {\n cmd();\n }\n\n if (this.#locked) {\n return;\n }\n\n const save = { cmd, undo, post, type };\n if (this.#position === -1) {\n if (this.#commands.length > 0) {\n // All the commands have been undone and then a new one is added\n // hence we clear the queue.\n this.#commands.length = 0;\n }\n this.#position = 0;\n this.#commands.push(save);\n return;\n }\n\n if (overwriteIfSameType && this.#commands[this.#position].type === type) {\n // For example when we change a color we don't want to\n // be able to undo all the steps, hence we only want to\n // keep the last undoable action in this sequence of actions.\n if (keepUndo) {\n save.undo = this.#commands[this.#position].undo;\n }\n this.#commands[this.#position] = save;\n return;\n }\n\n const next = this.#position + 1;\n if (next === this.#maxSize) {\n this.#commands.splice(0, 1);\n } else {\n this.#position = next;\n if (next < this.#commands.length) {\n this.#commands.splice(next);\n }\n }\n\n this.#commands.push(save);\n }\n\n /**\n * Undo the last command.\n */\n undo() {\n if (this.#position === -1) {\n // Nothing to undo.\n return;\n }\n\n // Avoid to insert something during the undo execution.\n this.#locked = true;\n const { undo, post } = this.#commands[this.#position];\n undo();\n post?.();\n this.#locked = false;\n\n this.#position -= 1;\n }\n\n /**\n * Redo the last command.\n */\n redo() {\n if (this.#position < this.#commands.length - 1) {\n this.#position += 1;\n\n // Avoid to insert something during the redo execution.\n this.#locked = true;\n const { cmd, post } = this.#commands[this.#position];\n cmd();\n post?.();\n this.#locked = false;\n }\n }\n\n /**\n * Check if there is something to undo.\n * @returns {boolean}\n */\n hasSomethingToUndo() {\n return this.#position !== -1;\n }\n\n /**\n * Check if there is something to redo.\n * @returns {boolean}\n */\n hasSomethingToRedo() {\n return this.#position < this.#commands.length - 1;\n }\n\n cleanType(type) {\n if (this.#position === -1) {\n return;\n }\n for (let i = this.#position; i >= 0; i--) {\n if (this.#commands[i].type !== type) {\n this.#commands.splice(i + 1, this.#position - i);\n this.#position = i;\n return;\n }\n }\n this.#commands.length = 0;\n this.#position = -1;\n }\n\n destroy() {\n this.#commands = null;\n }\n}\n\n/**\n * Class to handle the different keyboards shortcuts we can have on mac or\n * non-mac OSes.\n */\nclass KeyboardManager {\n /**\n * Create a new keyboard manager class.\n * @param {Array} callbacks - an array containing an array of shortcuts\n * and a callback to call.\n * A shortcut is a string like `ctrl+c` or `mac+ctrl+c` for mac OS.\n */\n constructor(callbacks) {\n this.buffer = [];\n this.callbacks = new Map();\n this.allKeys = new Set();\n\n const { isMac } = FeatureTest.platform;\n for (const [keys, callback, options = {}] of callbacks) {\n for (const key of keys) {\n const isMacKey = key.startsWith(\"mac+\");\n if (isMac && isMacKey) {\n this.callbacks.set(key.slice(4), { callback, options });\n this.allKeys.add(key.split(\"+\").at(-1));\n } else if (!isMac && !isMacKey) {\n this.callbacks.set(key, { callback, options });\n this.allKeys.add(key.split(\"+\").at(-1));\n }\n }\n }\n }\n\n /**\n * Serialize an event into a string in order to match a\n * potential key for a callback.\n * @param {KeyboardEvent} event\n * @returns {string}\n */\n #serialize(event) {\n if (event.altKey) {\n this.buffer.push(\"alt\");\n }\n if (event.ctrlKey) {\n this.buffer.push(\"ctrl\");\n }\n if (event.metaKey) {\n this.buffer.push(\"meta\");\n }\n if (event.shiftKey) {\n this.buffer.push(\"shift\");\n }\n this.buffer.push(event.key);\n const str = this.buffer.join(\"+\");\n this.buffer.length = 0;\n\n return str;\n }\n\n /**\n * Execute a callback, if any, for a given keyboard event.\n * The self is used as `this` in the callback.\n * @param {Object} self\n * @param {KeyboardEvent} event\n * @returns\n */\n exec(self, event) {\n if (!this.allKeys.has(event.key)) {\n return;\n }\n const info = this.callbacks.get(this.#serialize(event));\n if (!info) {\n return;\n }\n const {\n callback,\n options: { bubbles = false, args = [], checker = null },\n } = info;\n\n if (checker && !checker(self, event)) {\n return;\n }\n callback.bind(self, ...args, event)();\n\n // For example, ctrl+s in a FreeText must be handled by the viewer, hence\n // the event must bubble.\n if (!bubbles) {\n stopEvent(event);\n }\n }\n}\n\nclass ColorManager {\n static _colorsMapping = new Map([\n [\"CanvasText\", [0, 0, 0]],\n [\"Canvas\", [255, 255, 255]],\n ]);\n\n get _colors() {\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"LIB\") &&\n typeof document === \"undefined\"\n ) {\n return shadow(this, \"_colors\", ColorManager._colorsMapping);\n }\n\n const colors = new Map([\n [\"CanvasText\", null],\n [\"Canvas\", null],\n ]);\n getColorValues(colors);\n return shadow(this, \"_colors\", colors);\n }\n\n /**\n * In High Contrast Mode, the color on the screen is not always the\n * real color used in the pdf.\n * For example in some cases white can appear to be black but when saving\n * we want to have white.\n * @param {string} color\n * @returns {Array}\n */\n convert(color) {\n const rgb = getRGB(color);\n if (!window.matchMedia(\"(forced-colors: active)\").matches) {\n return rgb;\n }\n\n for (const [name, RGB] of this._colors) {\n if (RGB.every((x, i) => x === rgb[i])) {\n return ColorManager._colorsMapping.get(name);\n }\n }\n return rgb;\n }\n\n /**\n * An input element must have its color value as a hex string\n * and not as color name.\n * So this function converts a name into an hex string.\n * @param {string} name\n * @returns {string}\n */\n getHexCode(name) {\n const rgb = this._colors.get(name);\n if (!rgb) {\n return name;\n }\n return Util.makeHexColor(...rgb);\n }\n}\n\n/**\n * A pdf has several pages and each of them when it will rendered\n * will have an AnnotationEditorLayer which will contain the some\n * new Annotations associated to an editor in order to modify them.\n *\n * This class is used to manage all the different layers, editors and\n * some action like copy/paste, undo/redo, ...\n */\nclass AnnotationEditorUIManager {\n #abortController = new AbortController();\n\n #activeEditor = null;\n\n #allEditableAnnotations = null;\n\n #allEditors = new Map();\n\n #allLayers = new Map();\n\n #altTextManager = null;\n\n #annotationStorage = null;\n\n #changedExistingAnnotations = null;\n\n #commandManager = new CommandManager();\n\n #commentManager = null;\n\n #copyPasteAC = null;\n\n #currentDrawingSession = null;\n\n #currentPageIndex = 0;\n\n #deletedAnnotationsElementIds = new Set();\n\n #draggingEditors = null;\n\n #editorTypes = null;\n\n #editorsToRescale = new Set();\n\n _editorUndoBar = null;\n\n #enableHighlightFloatingButton = false;\n\n #enableUpdatedAddImage = false;\n\n #enableNewAltTextWhenAddingImage = false;\n\n #filterFactory = null;\n\n #focusMainContainerTimeoutId = null;\n\n #focusManagerAC = null;\n\n #highlightColors = null;\n\n #highlightWhenShiftUp = false;\n\n #floatingToolbar = null;\n\n #idManager = new IdManager();\n\n #isEnabled = false;\n\n #isPointerDown = false;\n\n #isWaiting = false;\n\n #keyboardManagerAC = null;\n\n #lastActiveElement = null;\n\n #mainHighlightColorPicker = null;\n\n #missingCanvases = null;\n\n #mlManager = null;\n\n #mode = AnnotationEditorType.NONE;\n\n #selectedEditors = new Set();\n\n #selectedTextNode = null;\n\n #signatureManager = null;\n\n #pageColors = null;\n\n #showAllStates = null;\n\n #pdfDocument = null;\n\n #previousStates = {\n isEditing: false,\n isEmpty: true,\n hasSomethingToUndo: false,\n hasSomethingToRedo: false,\n hasSelectedEditor: false,\n hasSelectedText: false,\n };\n\n #translation = [0, 0];\n\n #translationTimeoutId = null;\n\n #container = null;\n\n #viewer = null;\n\n #viewerAlert = null;\n\n #updateModeCapability = null;\n\n static TRANSLATE_SMALL = 1; // page units.\n\n static TRANSLATE_BIG = 10; // page units.\n\n static get _keyboardManager() {\n const proto = AnnotationEditorUIManager.prototype;\n\n /**\n * If the focused element is an input, we don't want to handle the arrow.\n * For example, sliders can be controlled with the arrow keys.\n */\n const arrowChecker = self =>\n self.#container.contains(document.activeElement) &&\n document.activeElement.tagName !== \"BUTTON\" &&\n self.hasSomethingToControl();\n\n const textInputChecker = (_self, { target: el }) => {\n if (el instanceof HTMLInputElement) {\n const { type } = el;\n return type !== \"text\" && type !== \"number\";\n }\n return true;\n };\n\n const small = this.TRANSLATE_SMALL;\n const big = this.TRANSLATE_BIG;\n\n return shadow(\n this,\n \"_keyboardManager\",\n new KeyboardManager([\n [\n [\"ctrl+a\", \"mac+meta+a\"],\n proto.selectAll,\n { checker: textInputChecker },\n ],\n [[\"ctrl+z\", \"mac+meta+z\"], proto.undo, { checker: textInputChecker }],\n [\n // On mac, depending of the OS version, the event.key is either \"z\" or\n // \"Z\" when the user presses \"meta+shift+z\".\n [\n \"ctrl+y\",\n \"ctrl+shift+z\",\n \"mac+meta+shift+z\",\n \"ctrl+shift+Z\",\n \"mac+meta+shift+Z\",\n ],\n proto.redo,\n { checker: textInputChecker },\n ],\n [\n [\n \"Backspace\",\n \"alt+Backspace\",\n \"ctrl+Backspace\",\n \"shift+Backspace\",\n \"mac+Backspace\",\n \"mac+alt+Backspace\",\n \"mac+ctrl+Backspace\",\n \"Delete\",\n \"ctrl+Delete\",\n \"shift+Delete\",\n \"mac+Delete\",\n ],\n proto.delete,\n { checker: textInputChecker },\n ],\n [\n [\"Enter\", \"mac+Enter\"],\n proto.addNewEditorFromKeyboard,\n {\n // Those shortcuts can be used in the toolbar for some other actions\n // like zooming, hence we need to check if the container has the\n // focus.\n checker: (self, { target: el }) =>\n !(el instanceof HTMLButtonElement) &&\n self.#container.contains(el) &&\n !self.isEnterHandled,\n },\n ],\n [\n [\" \", \"mac+ \"],\n proto.addNewEditorFromKeyboard,\n {\n // Those shortcuts can be used in the toolbar for some other actions\n // like zooming, hence we need to check if the container has the\n // focus.\n checker: (self, { target: el }) =>\n !(el instanceof HTMLButtonElement) &&\n self.#container.contains(document.activeElement),\n },\n ],\n [[\"Escape\", \"mac+Escape\"], proto.unselectAll],\n [\n [\"ArrowLeft\", \"mac+ArrowLeft\"],\n proto.translateSelectedEditors,\n { args: [-small, 0], checker: arrowChecker },\n ],\n [\n [\"ctrl+ArrowLeft\", \"mac+shift+ArrowLeft\"],\n proto.translateSelectedEditors,\n { args: [-big, 0], checker: arrowChecker },\n ],\n [\n [\"ArrowRight\", \"mac+ArrowRight\"],\n proto.translateSelectedEditors,\n { args: [small, 0], checker: arrowChecker },\n ],\n [\n [\"ctrl+ArrowRight\", \"mac+shift+ArrowRight\"],\n proto.translateSelectedEditors,\n { args: [big, 0], checker: arrowChecker },\n ],\n [\n [\"ArrowUp\", \"mac+ArrowUp\"],\n proto.translateSelectedEditors,\n { args: [0, -small], checker: arrowChecker },\n ],\n [\n [\"ctrl+ArrowUp\", \"mac+shift+ArrowUp\"],\n proto.translateSelectedEditors,\n { args: [0, -big], checker: arrowChecker },\n ],\n [\n [\"ArrowDown\", \"mac+ArrowDown\"],\n proto.translateSelectedEditors,\n { args: [0, small], checker: arrowChecker },\n ],\n [\n [\"ctrl+ArrowDown\", \"mac+shift+ArrowDown\"],\n proto.translateSelectedEditors,\n { args: [0, big], checker: arrowChecker },\n ],\n ])\n );\n }\n\n constructor(\n container,\n viewer,\n viewerAlert,\n altTextManager,\n commentManager,\n signatureManager,\n eventBus,\n pdfDocument,\n pageColors,\n highlightColors,\n enableHighlightFloatingButton,\n enableUpdatedAddImage,\n enableNewAltTextWhenAddingImage,\n mlManager,\n editorUndoBar,\n supportsPinchToZoom\n ) {\n const signal = (this._signal = this.#abortController.signal);\n this.#container = container;\n this.#viewer = viewer;\n this.#viewerAlert = viewerAlert;\n this.#altTextManager = altTextManager;\n this.#commentManager = commentManager;\n this.#signatureManager = signatureManager;\n this.#pdfDocument = pdfDocument;\n this._eventBus = eventBus;\n eventBus._on(\"editingaction\", this.onEditingAction.bind(this), { signal });\n eventBus._on(\"pagechanging\", this.onPageChanging.bind(this), { signal });\n eventBus._on(\"scalechanging\", this.onScaleChanging.bind(this), { signal });\n eventBus._on(\"rotationchanging\", this.onRotationChanging.bind(this), {\n signal,\n });\n eventBus._on(\"setpreference\", this.onSetPreference.bind(this), { signal });\n eventBus._on(\n \"switchannotationeditorparams\",\n evt => this.updateParams(evt.type, evt.value),\n { signal }\n );\n window.addEventListener(\n \"pointerdown\",\n () => {\n this.#isPointerDown = true;\n },\n { capture: true, signal }\n );\n window.addEventListener(\n \"pointerup\",\n () => {\n this.#isPointerDown = false;\n },\n { capture: true, signal }\n );\n this.#addSelectionListener();\n this.#addDragAndDropListeners();\n this.#addKeyboardManager();\n this.#annotationStorage = pdfDocument.annotationStorage;\n this.#filterFactory = pdfDocument.filterFactory;\n this.#pageColors = pageColors;\n this.#highlightColors = highlightColors || null;\n this.#enableHighlightFloatingButton = enableHighlightFloatingButton;\n this.#enableUpdatedAddImage = enableUpdatedAddImage;\n this.#enableNewAltTextWhenAddingImage = enableNewAltTextWhenAddingImage;\n this.#mlManager = mlManager || null;\n this.viewParameters = {\n realScale: PixelsPerInch.PDF_TO_CSS_UNITS,\n rotation: 0,\n };\n this.isShiftKeyDown = false;\n this._editorUndoBar = editorUndoBar || null;\n this._supportsPinchToZoom = supportsPinchToZoom !== false;\n commentManager?.setSidebarUiManager(this);\n\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n Object.defineProperty(this, \"reset\", {\n value: () => {\n this.selectAll();\n this.delete();\n this.#idManager.reset();\n },\n });\n Object.defineProperty(this, \"getNextEditorId\", {\n value: () => this.#idManager.getNextId(),\n });\n }\n }\n\n destroy() {\n this.#updateModeCapability?.resolve();\n this.#updateModeCapability = null;\n\n this.#abortController?.abort();\n this.#abortController = null;\n this._signal = null;\n\n for (const layer of this.#allLayers.values()) {\n layer.destroy();\n }\n this.#allLayers.clear();\n this.#allEditors.clear();\n this.#editorsToRescale.clear();\n this.#missingCanvases?.clear();\n this.#activeEditor = null;\n this.#selectedEditors.clear();\n this.#commandManager.destroy();\n this.#altTextManager?.destroy();\n this.#commentManager?.destroy();\n this.#signatureManager?.destroy();\n this.#floatingToolbar?.hide();\n this.#floatingToolbar = null;\n this.#mainHighlightColorPicker?.destroy();\n this.#mainHighlightColorPicker = null;\n this.#allEditableAnnotations = null;\n if (this.#focusMainContainerTimeoutId) {\n clearTimeout(this.#focusMainContainerTimeoutId);\n this.#focusMainContainerTimeoutId = null;\n }\n if (this.#translationTimeoutId) {\n clearTimeout(this.#translationTimeoutId);\n this.#translationTimeoutId = null;\n }\n this._editorUndoBar?.destroy();\n this.#pdfDocument = null;\n }\n\n combinedSignal(ac) {\n return AbortSignal.any([this._signal, ac.signal]);\n }\n\n get mlManager() {\n return this.#mlManager;\n }\n\n get useNewAltTextFlow() {\n return this.#enableUpdatedAddImage;\n }\n\n get useNewAltTextWhenAddingImage() {\n return this.#enableNewAltTextWhenAddingImage;\n }\n\n get hcmFilter() {\n return shadow(\n this,\n \"hcmFilter\",\n this.#pageColors\n ? this.#filterFactory.addHCMFilter(\n this.#pageColors.foreground,\n this.#pageColors.background\n )\n : \"none\"\n );\n }\n\n get direction() {\n return shadow(\n this,\n \"direction\",\n getComputedStyle(this.#container).direction\n );\n }\n\n get _highlightColors() {\n return shadow(\n this,\n \"_highlightColors\",\n this.#highlightColors\n ? new Map(\n this.#highlightColors.split(\",\").map(pair => {\n pair = pair.split(\"=\").map(x => x.trim());\n pair[1] = pair[1].toUpperCase();\n return pair;\n })\n )\n : null\n );\n }\n\n get highlightColors() {\n const { _highlightColors } = this;\n if (!_highlightColors) {\n return shadow(this, \"highlightColors\", null);\n }\n const map = new Map();\n const hasHCM = !!this.#pageColors;\n for (const [name, color] of _highlightColors) {\n const isNameForHCM = name.endsWith(\"_HCM\");\n if (hasHCM && isNameForHCM) {\n map.set(name.replace(\"_HCM\", \"\"), color);\n continue;\n }\n if (!hasHCM && !isNameForHCM) {\n map.set(name, color);\n }\n }\n return shadow(this, \"highlightColors\", map);\n }\n\n get highlightColorNames() {\n return shadow(\n this,\n \"highlightColorNames\",\n this.highlightColors\n ? new Map(Array.from(this.highlightColors, e => e.reverse()))\n : null\n );\n }\n\n getNonHCMColor(color) {\n if (!this._highlightColors) {\n return color;\n }\n const colorName = this.highlightColorNames.get(color);\n return this._highlightColors.get(colorName) || color;\n }\n\n getNonHCMColorName(color) {\n return this.highlightColorNames.get(color) || color;\n }\n\n /**\n * Set the current drawing session.\n * @param {AnnotationEditorLayer} layer\n */\n setCurrentDrawingSession(layer) {\n if (layer) {\n this.unselectAll();\n this.disableUserSelect(true);\n } else {\n this.disableUserSelect(false);\n }\n this.#currentDrawingSession = layer;\n }\n\n setMainHighlightColorPicker(colorPicker) {\n this.#mainHighlightColorPicker = colorPicker;\n }\n\n editAltText(editor, firstTime = false) {\n this.#altTextManager?.editAltText(this, editor, firstTime);\n }\n\n hasCommentManager() {\n return !!this.#commentManager;\n }\n\n editComment(editor, posX, posY, options) {\n this.#commentManager?.showDialog(this, editor, posX, posY, options);\n }\n\n selectComment(pageIndex, uid) {\n const layer = this.#allLayers.get(pageIndex);\n const editor = layer?.getEditorByUID(uid);\n editor?.toggleComment(/* isSelected */ true, /* visibility */ true);\n }\n\n updateComment(editor) {\n this.#commentManager?.updateComment(editor.getData());\n }\n\n updatePopupColor(editor) {\n this.#commentManager?.updatePopupColor(editor);\n }\n\n removeComment(editor) {\n this.#commentManager?.removeComments([editor.uid]);\n }\n\n toggleComment(editor, isSelected, visibility = undefined) {\n this.#commentManager?.toggleCommentPopup(editor, isSelected, visibility);\n }\n\n makeCommentColor(color, opacity) {\n return (\n (color && this.#commentManager?.makeCommentColor(color, opacity)) || null\n );\n }\n\n getCommentDialogElement() {\n return this.#commentManager?.dialogElement || null;\n }\n\n async waitForEditorsRendered(pageNumber) {\n if (this.#allLayers.has(pageNumber - 1)) {\n return;\n }\n const { resolve, promise } = Promise.withResolvers();\n const onEditorsRendered = evt => {\n if (evt.pageNumber === pageNumber) {\n this._eventBus._off(\"editorsrendered\", onEditorsRendered);\n resolve();\n }\n };\n this._eventBus.on(\"editorsrendered\", onEditorsRendered);\n await promise;\n }\n\n getSignature(editor) {\n this.#signatureManager?.getSignature({ uiManager: this, editor });\n }\n\n get signatureManager() {\n return this.#signatureManager;\n }\n\n switchToMode(mode, callback) {\n // Switching to a mode can be asynchronous.\n this._eventBus.on(\"annotationeditormodechanged\", callback, {\n once: true,\n signal: this._signal,\n });\n this._eventBus.dispatch(\"showannotationeditorui\", {\n source: this,\n mode,\n });\n }\n\n setPreference(name, value) {\n this._eventBus.dispatch(\"setpreference\", {\n source: this,\n name,\n value,\n });\n }\n\n onSetPreference({ name, value }) {\n switch (name) {\n case \"enableNewAltTextWhenAddingImage\":\n this.#enableNewAltTextWhenAddingImage = value;\n break;\n }\n }\n\n onPageChanging({ pageNumber }) {\n this.#currentPageIndex = pageNumber - 1;\n }\n\n focusMainContainer() {\n this.#container.focus();\n }\n\n findParent(x, y) {\n for (const layer of this.#allLayers.values()) {\n const {\n x: layerX,\n y: layerY,\n width,\n height,\n } = layer.div.getBoundingClientRect();\n if (\n x >= layerX &&\n x <= layerX + width &&\n y >= layerY &&\n y <= layerY + height\n ) {\n return layer;\n }\n }\n return null;\n }\n\n disableUserSelect(value = false) {\n this.#viewer.classList.toggle(\"noUserSelect\", value);\n }\n\n addShouldRescale(editor) {\n this.#editorsToRescale.add(editor);\n }\n\n removeShouldRescale(editor) {\n this.#editorsToRescale.delete(editor);\n }\n\n onScaleChanging({ scale }) {\n this.commitOrRemove();\n this.viewParameters.realScale = scale * PixelsPerInch.PDF_TO_CSS_UNITS;\n for (const editor of this.#editorsToRescale) {\n editor.onScaleChanging();\n }\n this.#currentDrawingSession?.onScaleChanging();\n }\n\n onRotationChanging({ pagesRotation }) {\n this.commitOrRemove();\n this.viewParameters.rotation = pagesRotation;\n }\n\n #getAnchorElementForSelection({ anchorNode }) {\n return anchorNode.nodeType === Node.TEXT_NODE\n ? anchorNode.parentElement\n : anchorNode;\n }\n\n #getLayerForTextLayer(textLayer) {\n const { currentLayer } = this;\n if (currentLayer.hasTextLayer(textLayer)) {\n return currentLayer;\n }\n for (const layer of this.#allLayers.values()) {\n if (layer.hasTextLayer(textLayer)) {\n return layer;\n }\n }\n return null;\n }\n\n highlightSelection(methodOfCreation = \"\", comment = false) {\n const selection = document.getSelection();\n if (!selection || selection.isCollapsed) {\n return;\n }\n const { anchorNode, anchorOffset, focusNode, focusOffset } = selection;\n const text = selection.toString();\n const anchorElement = this.#getAnchorElementForSelection(selection);\n const textLayer = anchorElement.closest(\".textLayer\");\n const boxes = this.getSelectionBoxes(textLayer);\n if (!boxes) {\n return;\n }\n selection.empty();\n\n const layer = this.#getLayerForTextLayer(textLayer);\n const isNoneMode = this.#mode === AnnotationEditorType.NONE;\n const callback = () => {\n const editor = layer?.createAndAddNewEditor({ x: 0, y: 0 }, false, {\n methodOfCreation,\n boxes,\n anchorNode,\n anchorOffset,\n focusNode,\n focusOffset,\n text,\n });\n if (isNoneMode) {\n this.showAllEditors(\"highlight\", true, /* updateButton = */ true);\n }\n if (comment) {\n editor?.editComment();\n }\n };\n if (isNoneMode) {\n this.switchToMode(AnnotationEditorType.HIGHLIGHT, callback);\n return;\n }\n callback();\n }\n\n commentSelection(methodOfCreation = \"\") {\n this.highlightSelection(methodOfCreation, /* comment */ true);\n }\n\n #displayFloatingToolbar() {\n const selection = document.getSelection();\n if (!selection || selection.isCollapsed) {\n return;\n }\n const anchorElement = this.#getAnchorElementForSelection(selection);\n const textLayer = anchorElement.closest(\".textLayer\");\n const boxes = this.getSelectionBoxes(textLayer);\n if (!boxes) {\n return;\n }\n this.#floatingToolbar ||= new FloatingToolbar(this);\n this.#floatingToolbar.show(textLayer, boxes, this.direction === \"ltr\");\n }\n\n /**\n * Some annotations may have been modified in the annotation layer\n * (e.g. comments added or modified).\n * So this function retrieves the data from the storage and removes\n * them from the storage in order to be able to save them later.\n * @param {string} annotationId\n * @returns {Object|null} The data associated to the annotation or null.\n */\n getAndRemoveDataFromAnnotationStorage(annotationId) {\n if (!this.#annotationStorage) {\n return null;\n }\n const key = `${AnnotationEditorPrefix}${annotationId}`;\n const storedValue = this.#annotationStorage.getRawValue(key);\n if (storedValue) {\n this.#annotationStorage.remove(key);\n }\n return storedValue;\n }\n\n /**\n * Add an editor in the annotation storage.\n * @param {AnnotationEditor} editor\n */\n addToAnnotationStorage(editor) {\n if (\n !editor.isEmpty() &&\n this.#annotationStorage &&\n !this.#annotationStorage.has(editor.id)\n ) {\n this.#annotationStorage.setValue(editor.id, editor);\n }\n }\n\n a11yAlert(messageId, args = null) {\n const viewerAlert = this.#viewerAlert;\n if (!viewerAlert) {\n return;\n }\n viewerAlert.setAttribute(\"data-l10n-id\", messageId);\n if (args) {\n viewerAlert.setAttribute(\"data-l10n-args\", JSON.stringify(args));\n } else {\n viewerAlert.removeAttribute(\"data-l10n-args\");\n }\n }\n\n #selectionChange() {\n const selection = document.getSelection();\n if (!selection || selection.isCollapsed) {\n if (this.#selectedTextNode) {\n this.#floatingToolbar?.hide();\n this.#selectedTextNode = null;\n this.#dispatchUpdateStates({\n hasSelectedText: false,\n });\n }\n return;\n }\n const { anchorNode } = selection;\n if (anchorNode === this.#selectedTextNode) {\n return;\n }\n\n const anchorElement = this.#getAnchorElementForSelection(selection);\n const textLayer = anchorElement.closest(\".textLayer\");\n if (!textLayer) {\n if (this.#selectedTextNode) {\n this.#floatingToolbar?.hide();\n this.#selectedTextNode = null;\n this.#dispatchUpdateStates({\n hasSelectedText: false,\n });\n }\n return;\n }\n\n this.#floatingToolbar?.hide();\n this.#selectedTextNode = anchorNode;\n this.#dispatchUpdateStates({\n hasSelectedText: true,\n });\n\n if (\n this.#mode !== AnnotationEditorType.HIGHLIGHT &&\n this.#mode !== AnnotationEditorType.NONE\n ) {\n return;\n }\n\n if (this.#mode === AnnotationEditorType.HIGHLIGHT) {\n this.showAllEditors(\"highlight\", true, /* updateButton = */ true);\n }\n\n this.#highlightWhenShiftUp = this.isShiftKeyDown;\n if (!this.isShiftKeyDown) {\n const activeLayer =\n this.#mode === AnnotationEditorType.HIGHLIGHT\n ? this.#getLayerForTextLayer(textLayer)\n : null;\n activeLayer?.toggleDrawing();\n\n if (this.#isPointerDown) {\n const ac = new AbortController();\n const signal = this.combinedSignal(ac);\n\n const pointerup = e => {\n if (e.type === \"pointerup\" && e.button !== 0) {\n // Do nothing on right click.\n return;\n }\n ac.abort();\n activeLayer?.toggleDrawing(true);\n if (e.type === \"pointerup\") {\n this.#onSelectEnd(\"main_toolbar\");\n }\n };\n window.addEventListener(\"pointerup\", pointerup, { signal });\n window.addEventListener(\"blur\", pointerup, { signal });\n } else {\n // Here neither the shift key nor the pointer is down and we've\n // something in the selection: we can be in the case where the user is\n // using a screen reader (see bug 1976597).\n activeLayer?.toggleDrawing(true);\n this.#onSelectEnd(\"main_toolbar\");\n }\n }\n }\n\n #onSelectEnd(methodOfCreation = \"\") {\n if (this.#mode === AnnotationEditorType.HIGHLIGHT) {\n this.highlightSelection(methodOfCreation);\n } else if (this.#enableHighlightFloatingButton) {\n this.#displayFloatingToolbar();\n }\n }\n\n #addSelectionListener() {\n document.addEventListener(\n \"selectionchange\",\n this.#selectionChange.bind(this),\n { signal: this._signal }\n );\n }\n\n #addFocusManager() {\n if (this.#focusManagerAC) {\n return;\n }\n this.#focusManagerAC = new AbortController();\n const signal = this.combinedSignal(this.#focusManagerAC);\n\n window.addEventListener(\"focus\", this.focus.bind(this), { signal });\n window.addEventListener(\"blur\", this.blur.bind(this), { signal });\n }\n\n #removeFocusManager() {\n this.#focusManagerAC?.abort();\n this.#focusManagerAC = null;\n }\n\n blur() {\n this.isShiftKeyDown = false;\n if (this.#highlightWhenShiftUp) {\n this.#highlightWhenShiftUp = false;\n this.#onSelectEnd(\"main_toolbar\");\n }\n if (!this.hasSelection) {\n return;\n }\n // When several editors are selected and the window loses focus, we want to\n // keep the last active element in order to be able to focus it again when\n // the window gets the focus back but we don't want to trigger any focus\n // callbacks else only one editor will be selected.\n const { activeElement } = document;\n for (const editor of this.#selectedEditors) {\n if (editor.div.contains(activeElement)) {\n this.#lastActiveElement = [editor, activeElement];\n editor._focusEventsAllowed = false;\n break;\n }\n }\n }\n\n focus() {\n if (!this.#lastActiveElement) {\n return;\n }\n const [lastEditor, lastActiveElement] = this.#lastActiveElement;\n this.#lastActiveElement = null;\n lastActiveElement.addEventListener(\n \"focusin\",\n () => {\n lastEditor._focusEventsAllowed = true;\n },\n { once: true, signal: this._signal }\n );\n lastActiveElement.focus();\n }\n\n #addKeyboardManager() {\n if (this.#keyboardManagerAC) {\n return;\n }\n this.#keyboardManagerAC = new AbortController();\n const signal = this.combinedSignal(this.#keyboardManagerAC);\n\n // The keyboard events are caught at the container level in order to be able\n // to execute some callbacks even if the current page doesn't have focus.\n window.addEventListener(\"keydown\", this.keydown.bind(this), { signal });\n window.addEventListener(\"keyup\", this.keyup.bind(this), { signal });\n }\n\n #removeKeyboardManager() {\n this.#keyboardManagerAC?.abort();\n this.#keyboardManagerAC = null;\n }\n\n #addCopyPasteListeners() {\n if (this.#copyPasteAC) {\n return;\n }\n this.#copyPasteAC = new AbortController();\n const signal = this.combinedSignal(this.#copyPasteAC);\n\n document.addEventListener(\"copy\", this.copy.bind(this), { signal });\n document.addEventListener(\"cut\", this.cut.bind(this), { signal });\n document.addEventListener(\"paste\", this.paste.bind(this), { signal });\n }\n\n #removeCopyPasteListeners() {\n this.#copyPasteAC?.abort();\n this.#copyPasteAC = null;\n }\n\n #addDragAndDropListeners() {\n const signal = this._signal;\n document.addEventListener(\"dragover\", this.dragOver.bind(this), { signal });\n document.addEventListener(\"drop\", this.drop.bind(this), { signal });\n }\n\n addEditListeners() {\n this.#addKeyboardManager();\n this.setEditingState(true);\n }\n\n removeEditListeners() {\n this.#removeKeyboardManager();\n this.setEditingState(false);\n }\n\n dragOver(event) {\n for (const { type } of event.dataTransfer.items) {\n for (const editorType of this.#editorTypes) {\n if (editorType.isHandlingMimeForPasting(type)) {\n event.dataTransfer.dropEffect = \"copy\";\n event.preventDefault();\n return;\n }\n }\n }\n }\n\n /**\n * Drop callback.\n * @param {DragEvent} event\n */\n drop(event) {\n for (const item of event.dataTransfer.items) {\n for (const editorType of this.#editorTypes) {\n if (editorType.isHandlingMimeForPasting(item.type)) {\n editorType.paste(item, this.currentLayer);\n event.preventDefault();\n return;\n }\n }\n }\n }\n\n /**\n * Copy callback.\n * @param {ClipboardEvent} event\n */\n copy(event) {\n event.preventDefault();\n\n // An editor is being edited so just commit it.\n this.#activeEditor?.commitOrRemove();\n\n if (!this.hasSelection) {\n return;\n }\n\n const editors = [];\n for (const editor of this.#selectedEditors) {\n const serialized = editor.serialize(/* isForCopying = */ true);\n if (serialized) {\n editors.push(serialized);\n }\n }\n if (editors.length === 0) {\n return;\n }\n\n event.clipboardData.setData(\"application/pdfjs\", JSON.stringify(editors));\n }\n\n /**\n * Cut callback.\n * @param {ClipboardEvent} event\n */\n cut(event) {\n this.copy(event);\n this.delete();\n }\n\n /**\n * Paste callback.\n * @param {ClipboardEvent} event\n */\n async paste(event) {\n event.preventDefault();\n const { clipboardData } = event;\n for (const item of clipboardData.items) {\n for (const editorType of this.#editorTypes) {\n if (editorType.isHandlingMimeForPasting(item.type)) {\n editorType.paste(item, this.currentLayer);\n return;\n }\n }\n }\n\n let data = clipboardData.getData(\"application/pdfjs\");\n if (!data) {\n return;\n }\n\n try {\n data = JSON.parse(data);\n } catch (ex) {\n warn(`paste: \"${ex.message}\".`);\n return;\n }\n\n if (!Array.isArray(data)) {\n return;\n }\n\n this.unselectAll();\n const layer = this.currentLayer;\n\n try {\n const newEditors = [];\n for (const editor of data) {\n const deserializedEditor = await layer.deserialize(editor);\n if (!deserializedEditor) {\n return;\n }\n newEditors.push(deserializedEditor);\n }\n\n const cmd = () => {\n for (const editor of newEditors) {\n this.#addEditorToLayer(editor);\n }\n this.#selectEditors(newEditors);\n };\n const undo = () => {\n for (const editor of newEditors) {\n editor.remove();\n }\n };\n this.addCommands({ cmd, undo, mustExec: true });\n } catch (ex) {\n warn(`paste: \"${ex.message}\".`);\n }\n }\n\n /**\n * Keydown callback.\n * @param {KeyboardEvent} event\n */\n keydown(event) {\n if (!this.isShiftKeyDown && event.key === \"Shift\") {\n this.isShiftKeyDown = true;\n }\n if (\n this.#mode !== AnnotationEditorType.NONE &&\n !this.isEditorHandlingKeyboard\n ) {\n AnnotationEditorUIManager._keyboardManager.exec(this, event);\n }\n }\n\n /**\n * Keyup callback.\n * @param {KeyboardEvent} event\n */\n keyup(event) {\n if (this.isShiftKeyDown && event.key === \"Shift\") {\n this.isShiftKeyDown = false;\n if (this.#highlightWhenShiftUp) {\n this.#highlightWhenShiftUp = false;\n this.#onSelectEnd(\"main_toolbar\");\n }\n }\n }\n\n /**\n * Execute an action for a given name.\n * For example, the user can click on the \"Undo\" entry in the context menu\n * and it'll trigger the undo action.\n */\n onEditingAction({ name }) {\n switch (name) {\n case \"undo\":\n case \"redo\":\n case \"delete\":\n case \"selectAll\":\n this[name]();\n break;\n case \"highlightSelection\":\n this.highlightSelection(\"context_menu\");\n break;\n case \"commentSelection\":\n this.commentSelection(\"context_menu\");\n break;\n }\n }\n\n /**\n * Update the different possible states of this manager, e.g. is there\n * something to undo, redo, ...\n * @param {Object} details\n */\n #dispatchUpdateStates(details) {\n const hasChanged = Object.entries(details).some(\n ([key, value]) => this.#previousStates[key] !== value\n );\n\n if (hasChanged) {\n this._eventBus.dispatch(\"annotationeditorstateschanged\", {\n source: this,\n details: Object.assign(this.#previousStates, details),\n });\n // We could listen on our own event but it sounds like a bit weird and\n // it's a way to simpler to handle that stuff here instead of having to\n // add something in every place where an editor can be unselected.\n if (\n this.#mode === AnnotationEditorType.HIGHLIGHT &&\n details.hasSelectedEditor === false\n ) {\n this.#dispatchUpdateUI([\n [AnnotationEditorParamsType.HIGHLIGHT_FREE, true],\n ]);\n }\n }\n }\n\n #dispatchUpdateUI(details) {\n this._eventBus.dispatch(\"annotationeditorparamschanged\", {\n source: this,\n details,\n });\n }\n\n /**\n * Set the editing state.\n * It can be useful to temporarily disable it when the user is editing a\n * FreeText annotation.\n * @param {boolean} isEditing\n */\n setEditingState(isEditing) {\n if (isEditing) {\n this.#addFocusManager();\n this.#addCopyPasteListeners();\n this.#dispatchUpdateStates({\n isEditing: this.#mode !== AnnotationEditorType.NONE,\n isEmpty: this.#isEmpty(),\n hasSomethingToUndo: this.#commandManager.hasSomethingToUndo(),\n hasSomethingToRedo: this.#commandManager.hasSomethingToRedo(),\n hasSelectedEditor: false,\n });\n } else {\n this.#removeFocusManager();\n this.#removeCopyPasteListeners();\n this.#dispatchUpdateStates({\n isEditing: false,\n });\n this.disableUserSelect(false);\n }\n }\n\n registerEditorTypes(types) {\n if (this.#editorTypes) {\n return;\n }\n this.#editorTypes = types;\n for (const editorType of this.#editorTypes) {\n this.#dispatchUpdateUI(editorType.defaultPropertiesToUpdate);\n }\n }\n\n /**\n * Get an id.\n * @returns {string}\n */\n getId() {\n return this.#idManager.id;\n }\n\n get currentLayer() {\n return this.#allLayers.get(this.#currentPageIndex);\n }\n\n getLayer(pageIndex) {\n return this.#allLayers.get(pageIndex);\n }\n\n get currentPageIndex() {\n return this.#currentPageIndex;\n }\n\n /**\n * Add a new layer for a page which will contains the editors.\n * @param {AnnotationEditorLayer} layer\n */\n addLayer(layer) {\n this.#allLayers.set(layer.pageIndex, layer);\n if (this.#isEnabled) {\n layer.enable();\n } else {\n layer.disable();\n }\n }\n\n /**\n * Remove a layer.\n * @param {AnnotationEditorLayer} layer\n */\n removeLayer(layer) {\n this.#allLayers.delete(layer.pageIndex);\n }\n\n /**\n * Change the editor mode (None, FreeText, Ink, ...)\n * @param {number} mode\n * @param {string|null} editId\n * @param {boolean} [isFromKeyboard] - true if the mode change is due to a\n * keyboard action.\n * @param {boolean} [mustEnterInEditMode] - true if the editor must enter in\n * edit mode.\n * @param {boolean} [editComment] - true if the mode change is due to a\n * comment edit.\n */\n async updateMode(\n mode,\n editId = null,\n isFromKeyboard = false,\n mustEnterInEditMode = false,\n editComment = false\n ) {\n if (this.#mode === mode) {\n return;\n }\n\n if (this.#updateModeCapability) {\n await this.#updateModeCapability.promise;\n if (!this.#updateModeCapability) {\n // This ui manager has been destroyed.\n return;\n }\n }\n\n this.#updateModeCapability = Promise.withResolvers();\n this.#currentDrawingSession?.commitOrRemove();\n\n if (this.#mode === AnnotationEditorType.POPUP) {\n this.#commentManager?.hideSidebar();\n }\n this.#commentManager?.destroyPopup();\n\n this.#mode = mode;\n if (mode === AnnotationEditorType.NONE) {\n this.setEditingState(false);\n this.#disableAll();\n for (const editor of this.#allEditors.values()) {\n editor.hideStandaloneCommentButton();\n }\n\n this._editorUndoBar?.hide();\n this.toggleComment(/* editor = */ null);\n\n this.#updateModeCapability.resolve();\n return;\n }\n\n for (const editor of this.#allEditors.values()) {\n editor.addStandaloneCommentButton();\n }\n\n if (mode === AnnotationEditorType.SIGNATURE) {\n await this.#signatureManager?.loadSignatures();\n }\n\n this.setEditingState(true);\n await this.#enableAll();\n this.unselectAll();\n for (const layer of this.#allLayers.values()) {\n layer.updateMode(mode);\n }\n\n if (mode === AnnotationEditorType.POPUP) {\n this.#allEditableAnnotations ||=\n await this.#pdfDocument.getAnnotationsByType(\n new Set(this.#editorTypes.map(editorClass => editorClass._editorType))\n );\n const elementIds = new Set();\n const allComments = [];\n for (const editor of this.#allEditors.values()) {\n const { annotationElementId, hasComment, deleted } = editor;\n if (annotationElementId) {\n elementIds.add(annotationElementId);\n }\n if (hasComment && !deleted) {\n allComments.push(editor.getData());\n }\n }\n for (const annotation of this.#allEditableAnnotations) {\n const { id, popupRef, contentsObj } = annotation;\n if (\n popupRef &&\n contentsObj?.str &&\n !elementIds.has(id) &&\n !this.#deletedAnnotationsElementIds.has(id)\n ) {\n // The annotation exists in the PDF and has a comment but there\n // is no editor for it (anymore).\n allComments.push(annotation);\n }\n }\n this.#commentManager?.showSidebar(allComments);\n }\n\n if (!editId) {\n if (isFromKeyboard) {\n this.addNewEditorFromKeyboard();\n }\n\n this.#updateModeCapability.resolve();\n return;\n }\n\n for (const editor of this.#allEditors.values()) {\n if (editor.uid === editId) {\n this.setSelected(editor);\n if (editComment) {\n editor.editComment();\n } else if (mustEnterInEditMode) {\n editor.enterInEditMode();\n } else {\n editor.focus();\n }\n } else {\n editor.unselect();\n }\n }\n\n this.#updateModeCapability.resolve();\n }\n\n addNewEditorFromKeyboard() {\n if (this.currentLayer.canCreateNewEmptyEditor()) {\n this.currentLayer.addNewEditor();\n }\n }\n\n /**\n * Update the toolbar if it's required to reflect the tool currently used.\n * @param {Object} options\n * @param {number} mode\n * @returns {undefined}\n */\n updateToolbar(options) {\n if (options.mode === this.#mode) {\n return;\n }\n this._eventBus.dispatch(\"switchannotationeditormode\", {\n source: this,\n ...options,\n });\n }\n\n /**\n * Update a parameter in the current editor or globally.\n * @param {number} type\n * @param {*} value\n */\n updateParams(type, value) {\n if (!this.#editorTypes) {\n return;\n }\n\n switch (type) {\n case AnnotationEditorParamsType.CREATE:\n this.currentLayer.addNewEditor(value);\n return;\n case AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL:\n this._eventBus.dispatch(\"reporttelemetry\", {\n source: this,\n details: {\n type: \"editing\",\n data: {\n type: \"highlight\",\n action: \"toggle_visibility\",\n },\n },\n });\n (this.#showAllStates ||= new Map()).set(type, value);\n this.showAllEditors(\"highlight\", value);\n break;\n }\n\n if (this.hasSelection) {\n for (const editor of this.#selectedEditors) {\n editor.updateParams(type, value);\n }\n } else {\n for (const editorType of this.#editorTypes) {\n editorType.updateDefaultParams(type, value);\n }\n }\n }\n\n showAllEditors(type, visible, updateButton = false) {\n for (const editor of this.#allEditors.values()) {\n if (editor.editorType === type) {\n editor.show(visible);\n }\n }\n const state =\n this.#showAllStates?.get(AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL) ??\n true;\n if (state !== visible) {\n this.#dispatchUpdateUI([\n [AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL, visible],\n ]);\n }\n }\n\n enableWaiting(mustWait = false) {\n if (this.#isWaiting === mustWait) {\n return;\n }\n this.#isWaiting = mustWait;\n for (const layer of this.#allLayers.values()) {\n if (mustWait) {\n layer.disableClick();\n } else {\n layer.enableClick();\n }\n layer.div.classList.toggle(\"waiting\", mustWait);\n }\n }\n\n /**\n * Enable all the layers.\n */\n async #enableAll() {\n if (!this.#isEnabled) {\n this.#isEnabled = true;\n const promises = [];\n for (const layer of this.#allLayers.values()) {\n promises.push(layer.enable());\n }\n await Promise.all(promises);\n for (const editor of this.#allEditors.values()) {\n editor.enable();\n }\n }\n }\n\n /**\n * Disable all the layers.\n */\n #disableAll() {\n this.unselectAll();\n if (this.#isEnabled) {\n this.#isEnabled = false;\n for (const layer of this.#allLayers.values()) {\n layer.disable();\n }\n for (const editor of this.#allEditors.values()) {\n editor.disable();\n }\n }\n }\n\n /**\n * Get all the editors belonging to a given page.\n * @param {number} pageIndex\n * @yields {AnnotationEditor}\n */\n *getEditors(pageIndex) {\n for (const editor of this.#allEditors.values()) {\n if (editor.pageIndex === pageIndex) {\n yield editor;\n }\n }\n }\n\n /**\n * Get an editor with the given id.\n * @param {string} id\n * @returns {AnnotationEditor}\n */\n getEditor(id) {\n return this.#allEditors.get(id);\n }\n\n /**\n * Add a new editor.\n * @param {AnnotationEditor} editor\n */\n addEditor(editor) {\n this.#allEditors.set(editor.id, editor);\n }\n\n /**\n * Remove an editor.\n * @param {AnnotationEditor} editor\n */\n removeEditor(editor) {\n if (editor.div.contains(document.activeElement)) {\n if (this.#focusMainContainerTimeoutId) {\n clearTimeout(this.#focusMainContainerTimeoutId);\n }\n this.#focusMainContainerTimeoutId = setTimeout(() => {\n // When the div is removed from DOM the focus can move on the\n // document.body, so we need to move it back to the main container.\n this.focusMainContainer();\n this.#focusMainContainerTimeoutId = null;\n }, 0);\n }\n this.#allEditors.delete(editor.id);\n if (editor.annotationElementId) {\n this.#missingCanvases?.delete(editor.annotationElementId);\n }\n this.unselect(editor);\n if (\n !editor.annotationElementId ||\n !this.#deletedAnnotationsElementIds.has(editor.annotationElementId)\n ) {\n this.#annotationStorage?.remove(editor.id);\n }\n }\n\n /**\n * The annotation element with the given id has been deleted.\n * @param {AnnotationEditor} editor\n */\n addDeletedAnnotationElement(editor) {\n this.#deletedAnnotationsElementIds.add(editor.annotationElementId);\n this.addChangedExistingAnnotation(editor);\n editor.deleted = true;\n }\n\n /**\n * Check if the annotation element with the given id has been deleted.\n * @param {string} annotationElementId\n * @returns {boolean}\n */\n isDeletedAnnotationElement(annotationElementId) {\n return this.#deletedAnnotationsElementIds.has(annotationElementId);\n }\n\n /**\n * The annotation element with the given id have been restored.\n * @param {AnnotationEditor} editor\n */\n removeDeletedAnnotationElement(editor) {\n this.#deletedAnnotationsElementIds.delete(editor.annotationElementId);\n this.removeChangedExistingAnnotation(editor);\n editor.deleted = false;\n }\n\n /**\n * Add an editor to the layer it belongs to or add it to the global map.\n * @param {AnnotationEditor} editor\n */\n #addEditorToLayer(editor) {\n const layer = this.#allLayers.get(editor.pageIndex);\n if (layer) {\n layer.addOrRebuild(editor);\n } else {\n this.addEditor(editor);\n this.addToAnnotationStorage(editor);\n }\n }\n\n /**\n * Set the given editor as the active one.\n * @param {AnnotationEditor} editor\n */\n setActiveEditor(editor) {\n if (this.#activeEditor === editor) {\n return;\n }\n\n this.#activeEditor = editor;\n if (editor) {\n this.#dispatchUpdateUI(editor.propertiesToUpdate);\n }\n }\n\n get #lastSelectedEditor() {\n let ed = null;\n for (ed of this.#selectedEditors) {\n // Iterate to get the last element.\n }\n return ed;\n }\n\n /**\n * Update the UI of the active editor.\n * @param {AnnotationEditor} editor\n */\n updateUI(editor) {\n if (this.#lastSelectedEditor === editor) {\n this.#dispatchUpdateUI(editor.propertiesToUpdate);\n }\n }\n\n updateUIForDefaultProperties(editorType) {\n this.#dispatchUpdateUI(editorType.defaultPropertiesToUpdate);\n }\n\n /**\n * Add or remove an editor the current selection.\n * @param {AnnotationEditor} editor\n */\n toggleSelected(editor) {\n if (this.#selectedEditors.has(editor)) {\n this.#selectedEditors.delete(editor);\n editor.unselect();\n this.#dispatchUpdateStates({\n hasSelectedEditor: this.hasSelection,\n });\n return;\n }\n this.#selectedEditors.add(editor);\n editor.select();\n this.#dispatchUpdateUI(editor.propertiesToUpdate);\n this.#dispatchUpdateStates({\n hasSelectedEditor: true,\n });\n }\n\n /**\n * Set the last selected editor.\n * @param {AnnotationEditor} editor\n */\n setSelected(editor) {\n this.updateToolbar({\n mode: editor.mode,\n editId: editor.uid,\n });\n\n this.#currentDrawingSession?.commitOrRemove();\n for (const ed of this.#selectedEditors) {\n if (ed !== editor) {\n ed.unselect();\n }\n }\n this.#selectedEditors.clear();\n\n this.#selectedEditors.add(editor);\n editor.select();\n this.#dispatchUpdateUI(editor.propertiesToUpdate);\n this.#dispatchUpdateStates({\n hasSelectedEditor: true,\n });\n }\n\n /**\n * Check if the editor is selected.\n * @param {AnnotationEditor} editor\n */\n isSelected(editor) {\n return this.#selectedEditors.has(editor);\n }\n\n get firstSelectedEditor() {\n return this.#selectedEditors.values().next().value;\n }\n\n /**\n * Unselect an editor.\n * @param {AnnotationEditor} editor\n */\n unselect(editor) {\n editor.unselect();\n this.#selectedEditors.delete(editor);\n this.#dispatchUpdateStates({\n hasSelectedEditor: this.hasSelection,\n });\n }\n\n get hasSelection() {\n return this.#selectedEditors.size !== 0;\n }\n\n get isEnterHandled() {\n return (\n this.#selectedEditors.size === 1 &&\n this.firstSelectedEditor.isEnterHandled\n );\n }\n\n /**\n * Undo the last command.\n */\n undo() {\n this.#commandManager.undo();\n this.#dispatchUpdateStates({\n hasSomethingToUndo: this.#commandManager.hasSomethingToUndo(),\n hasSomethingToRedo: true,\n isEmpty: this.#isEmpty(),\n });\n this._editorUndoBar?.hide();\n }\n\n /**\n * Redo the last undoed command.\n */\n redo() {\n this.#commandManager.redo();\n this.#dispatchUpdateStates({\n hasSomethingToUndo: true,\n hasSomethingToRedo: this.#commandManager.hasSomethingToRedo(),\n isEmpty: this.#isEmpty(),\n });\n }\n\n /**\n * Add a command to execute (cmd) and another one to undo it.\n * @param {Object} params\n */\n addCommands(params) {\n this.#commandManager.add(params);\n this.#dispatchUpdateStates({\n hasSomethingToUndo: true,\n hasSomethingToRedo: false,\n isEmpty: this.#isEmpty(),\n });\n }\n\n cleanUndoStack(type) {\n this.#commandManager.cleanType(type);\n }\n\n #isEmpty() {\n if (this.#allEditors.size === 0) {\n return true;\n }\n\n if (this.#allEditors.size === 1) {\n for (const editor of this.#allEditors.values()) {\n return editor.isEmpty();\n }\n }\n\n return false;\n }\n\n /**\n * Delete the current editor or all.\n */\n delete() {\n this.commitOrRemove();\n const drawingEditor = this.currentLayer?.endDrawingSession(\n /* isAborted = */ true\n );\n if (!this.hasSelection && !drawingEditor) {\n return;\n }\n\n const editors = drawingEditor\n ? [drawingEditor]\n : [...this.#selectedEditors];\n const cmd = () => {\n this._editorUndoBar?.show(\n undo,\n editors.length === 1 ? editors[0].editorType : editors.length\n );\n for (const editor of editors) {\n editor.remove();\n }\n };\n const undo = () => {\n for (const editor of editors) {\n this.#addEditorToLayer(editor);\n }\n };\n\n this.addCommands({ cmd, undo, mustExec: true });\n }\n\n commitOrRemove() {\n // An editor is being edited so just commit it.\n this.#activeEditor?.commitOrRemove();\n }\n\n hasSomethingToControl() {\n return this.#activeEditor || this.hasSelection;\n }\n\n /**\n * Select the editors.\n * @param {Array} editors\n */\n #selectEditors(editors) {\n for (const editor of this.#selectedEditors) {\n editor.unselect();\n }\n this.#selectedEditors.clear();\n for (const editor of editors) {\n if (editor.isEmpty()) {\n continue;\n }\n this.#selectedEditors.add(editor);\n editor.select();\n }\n this.#dispatchUpdateStates({ hasSelectedEditor: this.hasSelection });\n }\n\n /**\n * Select all the editors.\n */\n selectAll() {\n for (const editor of this.#selectedEditors) {\n editor.commit();\n }\n this.#selectEditors(this.#allEditors.values());\n }\n\n /**\n * Unselect all the selected editors.\n */\n unselectAll() {\n if (this.#activeEditor) {\n // An editor is being edited so just commit it.\n this.#activeEditor.commitOrRemove();\n if (this.#mode !== AnnotationEditorType.NONE) {\n // If the mode is NONE, we want to really unselect the editor, hence we\n // mustn't return here.\n return;\n }\n }\n\n if (this.#currentDrawingSession?.commitOrRemove()) {\n return;\n }\n\n if (!this.hasSelection) {\n return;\n }\n for (const editor of this.#selectedEditors) {\n editor.unselect();\n }\n this.#selectedEditors.clear();\n this.#dispatchUpdateStates({\n hasSelectedEditor: false,\n });\n }\n\n translateSelectedEditors(x, y, noCommit = false) {\n if (!noCommit) {\n this.commitOrRemove();\n }\n if (!this.hasSelection) {\n return;\n }\n\n this.#translation[0] += x;\n this.#translation[1] += y;\n const [totalX, totalY] = this.#translation;\n const editors = [...this.#selectedEditors];\n\n // We don't want to have an undo/redo for each translation so we wait a bit\n // before adding the command to the command manager.\n const TIME_TO_WAIT = 1000;\n\n if (this.#translationTimeoutId) {\n clearTimeout(this.#translationTimeoutId);\n }\n\n this.#translationTimeoutId = setTimeout(() => {\n this.#translationTimeoutId = null;\n this.#translation[0] = this.#translation[1] = 0;\n\n this.addCommands({\n cmd: () => {\n for (const editor of editors) {\n if (this.#allEditors.has(editor.id)) {\n editor.translateInPage(totalX, totalY);\n editor.translationDone();\n }\n }\n },\n undo: () => {\n for (const editor of editors) {\n if (this.#allEditors.has(editor.id)) {\n editor.translateInPage(-totalX, -totalY);\n editor.translationDone();\n }\n }\n },\n mustExec: false,\n });\n }, TIME_TO_WAIT);\n\n for (const editor of editors) {\n editor.translateInPage(x, y);\n editor.translationDone();\n }\n }\n\n /**\n * Set up the drag session for moving the selected editors.\n */\n setUpDragSession() {\n // Note: don't use any references to the editor's parent which can be null\n // if the editor belongs to a destroyed page.\n if (!this.hasSelection) {\n return;\n }\n // Avoid to have spurious text selection in the text layer when dragging.\n this.disableUserSelect(true);\n this.#draggingEditors = new Map();\n for (const editor of this.#selectedEditors) {\n this.#draggingEditors.set(editor, {\n savedX: editor.x,\n savedY: editor.y,\n savedPageIndex: editor.pageIndex,\n newX: 0,\n newY: 0,\n newPageIndex: -1,\n });\n }\n }\n\n /**\n * Ends the drag session.\n * @returns {boolean} true if at least one editor has been moved.\n */\n endDragSession() {\n if (!this.#draggingEditors) {\n return false;\n }\n this.disableUserSelect(false);\n const map = this.#draggingEditors;\n this.#draggingEditors = null;\n let mustBeAddedInUndoStack = false;\n\n for (const [{ x, y, pageIndex }, value] of map) {\n value.newX = x;\n value.newY = y;\n value.newPageIndex = pageIndex;\n mustBeAddedInUndoStack ||=\n x !== value.savedX ||\n y !== value.savedY ||\n pageIndex !== value.savedPageIndex;\n }\n\n if (!mustBeAddedInUndoStack) {\n return false;\n }\n\n const move = (editor, x, y, pageIndex) => {\n if (this.#allEditors.has(editor.id)) {\n // The editor can be undone/redone on a page which is not visible (and\n // which potentially has no annotation editor layer), hence we need to\n // use the pageIndex instead of the parent.\n const parent = this.#allLayers.get(pageIndex);\n if (parent) {\n editor._setParentAndPosition(parent, x, y);\n } else {\n editor.pageIndex = pageIndex;\n editor.x = x;\n editor.y = y;\n }\n }\n };\n\n this.addCommands({\n cmd: () => {\n for (const [editor, { newX, newY, newPageIndex }] of map) {\n move(editor, newX, newY, newPageIndex);\n }\n },\n undo: () => {\n for (const [editor, { savedX, savedY, savedPageIndex }] of map) {\n move(editor, savedX, savedY, savedPageIndex);\n }\n },\n mustExec: true,\n });\n\n return true;\n }\n\n /**\n * Drag the set of selected editors.\n * @param {number} tx\n * @param {number} ty\n */\n dragSelectedEditors(tx, ty) {\n if (!this.#draggingEditors) {\n return;\n }\n for (const editor of this.#draggingEditors.keys()) {\n editor.drag(tx, ty);\n }\n }\n\n /**\n * Rebuild the editor (usually on undo/redo actions) on a potentially\n * non-rendered page.\n * @param {AnnotationEditor} editor\n */\n rebuild(editor) {\n if (editor.parent === null) {\n const parent = this.getLayer(editor.pageIndex);\n if (parent) {\n parent.changeParent(editor);\n parent.addOrRebuild(editor);\n } else {\n this.addEditor(editor);\n this.addToAnnotationStorage(editor);\n editor.rebuild();\n }\n } else {\n editor.parent.addOrRebuild(editor);\n }\n }\n\n get isEditorHandlingKeyboard() {\n return (\n this.getActive()?.shouldGetKeyboardEvents() ||\n (this.#selectedEditors.size === 1 &&\n this.firstSelectedEditor.shouldGetKeyboardEvents())\n );\n }\n\n /**\n * Is the current editor the one passed as argument?\n * @param {AnnotationEditor} editor\n * @returns\n */\n isActive(editor) {\n return this.#activeEditor === editor;\n }\n\n /**\n * Get the current active editor.\n * @returns {AnnotationEditor|null}\n */\n getActive() {\n return this.#activeEditor;\n }\n\n /**\n * Get the current editor mode.\n * @returns {number}\n */\n getMode() {\n return this.#mode;\n }\n\n isEditingMode() {\n return this.#mode !== AnnotationEditorType.NONE;\n }\n\n get imageManager() {\n return shadow(this, \"imageManager\", new ImageManager());\n }\n\n getSelectionBoxes(textLayer) {\n if (!textLayer) {\n return null;\n }\n const selection = document.getSelection();\n for (let i = 0, ii = selection.rangeCount; i < ii; i++) {\n if (\n !textLayer.contains(selection.getRangeAt(i).commonAncestorContainer)\n ) {\n return null;\n }\n }\n\n const {\n x: layerX,\n y: layerY,\n width: parentWidth,\n height: parentHeight,\n } = textLayer.getBoundingClientRect();\n\n // We must rotate the boxes because we want to have them in the non-rotated\n // page coordinates.\n let rotator;\n switch (textLayer.getAttribute(\"data-main-rotation\")) {\n case \"90\":\n rotator = (x, y, w, h) => ({\n x: (y - layerY) / parentHeight,\n y: 1 - (x + w - layerX) / parentWidth,\n width: h / parentHeight,\n height: w / parentWidth,\n });\n break;\n case \"180\":\n rotator = (x, y, w, h) => ({\n x: 1 - (x + w - layerX) / parentWidth,\n y: 1 - (y + h - layerY) / parentHeight,\n width: w / parentWidth,\n height: h / parentHeight,\n });\n break;\n case \"270\":\n rotator = (x, y, w, h) => ({\n x: 1 - (y + h - layerY) / parentHeight,\n y: (x - layerX) / parentWidth,\n width: h / parentHeight,\n height: w / parentWidth,\n });\n break;\n default:\n rotator = (x, y, w, h) => ({\n x: (x - layerX) / parentWidth,\n y: (y - layerY) / parentHeight,\n width: w / parentWidth,\n height: h / parentHeight,\n });\n break;\n }\n\n const boxes = [];\n for (let i = 0, ii = selection.rangeCount; i < ii; i++) {\n const range = selection.getRangeAt(i);\n if (range.collapsed) {\n continue;\n }\n for (const { x, y, width, height } of range.getClientRects()) {\n if (width === 0 || height === 0) {\n continue;\n }\n boxes.push(rotator(x, y, width, height));\n }\n }\n return boxes.length === 0 ? null : boxes;\n }\n\n addChangedExistingAnnotation({ annotationElementId, id }) {\n (this.#changedExistingAnnotations ||= new Map()).set(\n annotationElementId,\n id\n );\n }\n\n removeChangedExistingAnnotation({ annotationElementId }) {\n this.#changedExistingAnnotations?.delete(annotationElementId);\n }\n\n renderAnnotationElement(annotation) {\n const editorId = this.#changedExistingAnnotations?.get(annotation.data.id);\n if (!editorId) {\n return;\n }\n const editor = this.#annotationStorage.getRawValue(editorId);\n if (!editor) {\n return;\n }\n if (this.#mode === AnnotationEditorType.NONE && !editor.hasBeenModified) {\n return;\n }\n editor.renderAnnotationElement(annotation);\n }\n\n setMissingCanvas(annotationId, annotationElementId, canvas) {\n const editor = this.#missingCanvases?.get(annotationId);\n if (!editor) {\n return;\n }\n editor.setCanvas(annotationElementId, canvas);\n this.#missingCanvases.delete(annotationId);\n }\n\n addMissingCanvas(annotationId, editor) {\n (this.#missingCanvases ||= new Map()).set(annotationId, editor);\n }\n}\n\nexport {\n AnnotationEditorUIManager,\n bindEvents,\n ColorManager,\n CommandManager,\n CurrentPointers,\n KeyboardManager,\n};\n","/* Copyright 2023 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { noContextMenu } from \"../display_utils.js\";\n\nclass AltText {\n #altText = null;\n\n #altTextDecorative = false;\n\n #altTextButton = null;\n\n #altTextButtonLabel = null;\n\n #altTextTooltip = null;\n\n #altTextTooltipTimeout = null;\n\n #altTextWasFromKeyBoard = false;\n\n #badge = null;\n\n #editor = null;\n\n #guessedText = null;\n\n #textWithDisclaimer = null;\n\n #useNewAltTextFlow = false;\n\n static #l10nNewButton = null;\n\n static _l10n = null;\n\n constructor(editor) {\n this.#editor = editor;\n this.#useNewAltTextFlow = editor._uiManager.useNewAltTextFlow;\n\n AltText.#l10nNewButton ||= Object.freeze({\n added: \"pdfjs-editor-new-alt-text-added-button\",\n \"added-label\": \"pdfjs-editor-new-alt-text-added-button-label\",\n missing: \"pdfjs-editor-new-alt-text-missing-button\",\n \"missing-label\": \"pdfjs-editor-new-alt-text-missing-button-label\",\n review: \"pdfjs-editor-new-alt-text-to-review-button\",\n \"review-label\": \"pdfjs-editor-new-alt-text-to-review-button-label\",\n });\n }\n\n static initialize(l10n) {\n AltText._l10n ??= l10n;\n }\n\n async render() {\n const altText = (this.#altTextButton = document.createElement(\"button\"));\n altText.className = \"altText\";\n altText.tabIndex = \"0\";\n\n const label = (this.#altTextButtonLabel = document.createElement(\"span\"));\n altText.append(label);\n\n if (this.#useNewAltTextFlow) {\n altText.classList.add(\"new\");\n altText.setAttribute(\"data-l10n-id\", AltText.#l10nNewButton.missing);\n label.setAttribute(\n \"data-l10n-id\",\n AltText.#l10nNewButton[\"missing-label\"]\n );\n } else {\n altText.setAttribute(\"data-l10n-id\", \"pdfjs-editor-alt-text-button\");\n label.setAttribute(\"data-l10n-id\", \"pdfjs-editor-alt-text-button-label\");\n }\n\n const signal = this.#editor._uiManager._signal;\n altText.addEventListener(\"contextmenu\", noContextMenu, { signal });\n altText.addEventListener(\"pointerdown\", event => event.stopPropagation(), {\n signal,\n });\n\n const onClick = event => {\n event.preventDefault();\n this.#editor._uiManager.editAltText(this.#editor);\n if (this.#useNewAltTextFlow) {\n this.#editor._reportTelemetry({\n action: \"pdfjs.image.alt_text.image_status_label_clicked\",\n data: { label: this.#label },\n });\n }\n };\n altText.addEventListener(\"click\", onClick, { capture: true, signal });\n altText.addEventListener(\n \"keydown\",\n event => {\n if (event.target === altText && event.key === \"Enter\") {\n this.#altTextWasFromKeyBoard = true;\n onClick(event);\n }\n },\n { signal }\n );\n await this.#setState();\n\n return altText;\n }\n\n get #label() {\n return (\n (this.#altText && \"added\") ||\n (this.#altText === null && this.guessedText && \"review\") ||\n \"missing\"\n );\n }\n\n finish() {\n if (!this.#altTextButton) {\n return;\n }\n this.#altTextButton.focus({ focusVisible: this.#altTextWasFromKeyBoard });\n this.#altTextWasFromKeyBoard = false;\n }\n\n isEmpty() {\n if (this.#useNewAltTextFlow) {\n return this.#altText === null;\n }\n return !this.#altText && !this.#altTextDecorative;\n }\n\n hasData() {\n if (this.#useNewAltTextFlow) {\n return this.#altText !== null || !!this.#guessedText;\n }\n return this.isEmpty();\n }\n\n get guessedText() {\n return this.#guessedText;\n }\n\n async setGuessedText(guessedText) {\n if (this.#altText !== null) {\n // The user provided their own alt text, so we don't want to overwrite it.\n return;\n }\n this.#guessedText = guessedText;\n this.#textWithDisclaimer = await AltText._l10n.get(\n \"pdfjs-editor-new-alt-text-generated-alt-text-with-disclaimer\",\n { generatedAltText: guessedText }\n );\n this.#setState();\n }\n\n toggleAltTextBadge(visibility = false) {\n if (!this.#useNewAltTextFlow || this.#altText) {\n this.#badge?.remove();\n this.#badge = null;\n return;\n }\n if (!this.#badge) {\n const badge = (this.#badge = document.createElement(\"div\"));\n badge.className = \"noAltTextBadge\";\n this.#editor.div.append(badge);\n }\n this.#badge.classList.toggle(\"hidden\", !visibility);\n }\n\n serialize(isForCopying) {\n let altText = this.#altText;\n if (!isForCopying && this.#guessedText === altText) {\n altText = this.#textWithDisclaimer;\n }\n return {\n altText,\n decorative: this.#altTextDecorative,\n guessedText: this.#guessedText,\n textWithDisclaimer: this.#textWithDisclaimer,\n };\n }\n\n get data() {\n return {\n altText: this.#altText,\n decorative: this.#altTextDecorative,\n };\n }\n\n /**\n * Set the alt text data.\n */\n set data({\n altText,\n decorative,\n guessedText,\n textWithDisclaimer,\n cancel = false,\n }) {\n if (guessedText) {\n this.#guessedText = guessedText;\n this.#textWithDisclaimer = textWithDisclaimer;\n }\n if (this.#altText === altText && this.#altTextDecorative === decorative) {\n return;\n }\n if (!cancel) {\n this.#altText = altText;\n this.#altTextDecorative = decorative;\n }\n this.#setState();\n }\n\n toggle(enabled = false) {\n if (!this.#altTextButton) {\n return;\n }\n if (!enabled && this.#altTextTooltipTimeout) {\n clearTimeout(this.#altTextTooltipTimeout);\n this.#altTextTooltipTimeout = null;\n }\n this.#altTextButton.disabled = !enabled;\n }\n\n shown() {\n this.#editor._reportTelemetry({\n action: \"pdfjs.image.alt_text.image_status_label_displayed\",\n data: { label: this.#label },\n });\n }\n\n destroy() {\n this.#altTextButton?.remove();\n this.#altTextButton = null;\n this.#altTextButtonLabel = null;\n this.#altTextTooltip = null;\n this.#badge?.remove();\n this.#badge = null;\n }\n\n async #setState() {\n const button = this.#altTextButton;\n if (!button) {\n return;\n }\n\n if (this.#useNewAltTextFlow) {\n button.classList.toggle(\"done\", !!this.#altText);\n button.setAttribute(\"data-l10n-id\", AltText.#l10nNewButton[this.#label]);\n\n this.#altTextButtonLabel?.setAttribute(\n \"data-l10n-id\",\n AltText.#l10nNewButton[`${this.#label}-label`]\n );\n if (!this.#altText) {\n this.#altTextTooltip?.remove();\n return;\n }\n } else {\n if (!this.#altText && !this.#altTextDecorative) {\n button.classList.remove(\"done\");\n this.#altTextTooltip?.remove();\n return;\n }\n button.classList.add(\"done\");\n button.setAttribute(\"data-l10n-id\", \"pdfjs-editor-alt-text-edit-button\");\n }\n\n let tooltip = this.#altTextTooltip;\n if (!tooltip) {\n this.#altTextTooltip = tooltip = document.createElement(\"span\");\n tooltip.className = \"tooltip\";\n tooltip.setAttribute(\"role\", \"tooltip\");\n tooltip.id = `alt-text-tooltip-${this.#editor.id}`;\n\n const DELAY_TO_SHOW_TOOLTIP = 100;\n const signal = this.#editor._uiManager._signal;\n signal.addEventListener(\n \"abort\",\n () => {\n clearTimeout(this.#altTextTooltipTimeout);\n this.#altTextTooltipTimeout = null;\n },\n { once: true }\n );\n button.addEventListener(\n \"mouseenter\",\n () => {\n this.#altTextTooltipTimeout = setTimeout(() => {\n this.#altTextTooltipTimeout = null;\n this.#altTextTooltip.classList.add(\"show\");\n this.#editor._reportTelemetry({\n action: \"alt_text_tooltip\",\n });\n }, DELAY_TO_SHOW_TOOLTIP);\n },\n { signal }\n );\n button.addEventListener(\n \"mouseleave\",\n () => {\n if (this.#altTextTooltipTimeout) {\n clearTimeout(this.#altTextTooltipTimeout);\n this.#altTextTooltipTimeout = null;\n }\n this.#altTextTooltip?.classList.remove(\"show\");\n },\n { signal }\n );\n }\n if (this.#altTextDecorative) {\n tooltip.setAttribute(\n \"data-l10n-id\",\n \"pdfjs-editor-alt-text-decorative-tooltip\"\n );\n } else {\n tooltip.removeAttribute(\"data-l10n-id\");\n tooltip.textContent = this.#altText;\n }\n\n if (!tooltip.parentNode) {\n button.append(tooltip);\n }\n\n const element = this.#editor.getElementForAltText();\n element?.setAttribute(\"aria-describedby\", tooltip.id);\n }\n}\n\nexport { AltText };\n","/* Copyright 2025 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { noContextMenu, stopEvent } from \"../display_utils.js\";\n\nclass Comment {\n #commentStandaloneButton = null;\n\n #commentToolbarButton = null;\n\n #commentWasFromKeyBoard = false;\n\n #editor = null;\n\n #initialText = null;\n\n #richText = null;\n\n #text = null;\n\n #date = null;\n\n #deleted = false;\n\n #popupPosition = null;\n\n constructor(editor) {\n this.#editor = editor;\n }\n\n renderForToolbar() {\n const button = (this.#commentToolbarButton =\n document.createElement(\"button\"));\n button.className = \"comment\";\n return this.#render(button, false);\n }\n\n renderForStandalone() {\n const button = (this.#commentStandaloneButton =\n document.createElement(\"button\"));\n button.className = \"annotationCommentButton\";\n\n const position = this.#editor.commentButtonPosition;\n if (position) {\n const { style } = button;\n style.insetInlineEnd = `calc(${\n 100 *\n (this.#editor._uiManager.direction === \"ltr\"\n ? 1 - position[0]\n : position[0])\n }% - var(--comment-button-dim))`;\n style.top = `calc(${100 * position[1]}% - var(--comment-button-dim))`;\n const color = this.#editor.commentButtonColor;\n if (color) {\n style.backgroundColor = color;\n }\n }\n\n return this.#render(button, true);\n }\n\n focusButton() {\n setTimeout(() => {\n (this.#commentStandaloneButton ?? this.#commentToolbarButton)?.focus();\n }, 0);\n }\n\n onUpdatedColor() {\n if (!this.#commentStandaloneButton) {\n return;\n }\n const color = this.#editor.commentButtonColor;\n if (color) {\n this.#commentStandaloneButton.style.backgroundColor = color;\n }\n this.#editor._uiManager.updatePopupColor(this.#editor);\n }\n\n get commentButtonWidth() {\n return (\n (this.#commentStandaloneButton?.getBoundingClientRect().width ?? 0) /\n this.#editor.parent.boundingClientRect.width\n );\n }\n\n get commentPopupPositionInLayer() {\n if (this.#popupPosition) {\n return this.#popupPosition;\n }\n if (!this.#commentStandaloneButton) {\n return null;\n }\n const { x, y, height } =\n this.#commentStandaloneButton.getBoundingClientRect();\n const {\n x: parentX,\n y: parentY,\n width: parentWidth,\n height: parentHeight,\n } = this.#editor.parent.boundingClientRect;\n return [(x - parentX) / parentWidth, (y + height - parentY) / parentHeight];\n }\n\n set commentPopupPositionInLayer(pos) {\n this.#popupPosition = pos;\n }\n\n hasDefaultPopupPosition() {\n return this.#popupPosition === null;\n }\n\n removeStandaloneCommentButton() {\n this.#commentStandaloneButton?.remove();\n this.#commentStandaloneButton = null;\n }\n\n removeToolbarCommentButton() {\n this.#commentToolbarButton?.remove();\n this.#commentToolbarButton = null;\n }\n\n setCommentButtonStates({ selected, hasPopup }) {\n if (!this.#commentStandaloneButton) {\n return;\n }\n this.#commentStandaloneButton.classList.toggle(\"selected\", selected);\n this.#commentStandaloneButton.ariaExpanded = hasPopup;\n }\n\n #render(comment, isStandalone) {\n if (!this.#editor._uiManager.hasCommentManager()) {\n return null;\n }\n\n comment.tabIndex = \"0\";\n comment.ariaHasPopup = \"dialog\";\n\n if (isStandalone) {\n comment.ariaControls = \"commentPopup\";\n comment.setAttribute(\"data-l10n-id\", \"pdfjs-show-comment-button\");\n } else {\n comment.ariaControlsElements = [\n this.#editor._uiManager.getCommentDialogElement(),\n ];\n comment.setAttribute(\"data-l10n-id\", \"pdfjs-editor-add-comment-button\");\n }\n\n const signal = this.#editor._uiManager._signal;\n if (!(signal instanceof AbortSignal) || signal.aborted) {\n return comment;\n }\n\n comment.addEventListener(\"contextmenu\", noContextMenu, { signal });\n if (isStandalone) {\n comment.addEventListener(\n \"focusin\",\n e => {\n this.#editor._focusEventsAllowed = false;\n stopEvent(e);\n },\n {\n capture: true,\n signal,\n }\n );\n comment.addEventListener(\n \"focusout\",\n e => {\n this.#editor._focusEventsAllowed = true;\n stopEvent(e);\n },\n {\n capture: true,\n signal,\n }\n );\n }\n comment.addEventListener(\"pointerdown\", event => event.stopPropagation(), {\n signal,\n });\n\n const onClick = event => {\n event.preventDefault();\n if (comment === this.#commentToolbarButton) {\n this.edit();\n } else {\n this.#editor.toggleComment(/* isSelected = */ true);\n }\n };\n comment.addEventListener(\"click\", onClick, { capture: true, signal });\n comment.addEventListener(\n \"keydown\",\n event => {\n if (event.target === comment && event.key === \"Enter\") {\n this.#commentWasFromKeyBoard = true;\n onClick(event);\n }\n },\n { signal }\n );\n\n comment.addEventListener(\n \"pointerenter\",\n () => {\n this.#editor.toggleComment(\n /* isSelected = */ false,\n /* visibility = */ true\n );\n },\n { signal }\n );\n comment.addEventListener(\n \"pointerleave\",\n () => {\n this.#editor.toggleComment(\n /* isSelected = */ false,\n /* visibility = */ false\n );\n },\n { signal }\n );\n\n return comment;\n }\n\n edit(options) {\n const position = this.commentPopupPositionInLayer;\n let posX, posY;\n if (position) {\n [posX, posY] = position;\n } else {\n // The position is in the editor coordinates.\n [posX, posY] = this.#editor.commentButtonPosition;\n const { width, height, x, y } = this.#editor;\n posX = x + posX * width;\n posY = y + posY * height;\n }\n const parentDimensions = this.#editor.parent.boundingClientRect;\n const {\n x: parentX,\n y: parentY,\n width: parentWidth,\n height: parentHeight,\n } = parentDimensions;\n this.#editor._uiManager.editComment(\n this.#editor,\n parentX + posX * parentWidth,\n parentY + posY * parentHeight,\n { ...options, parentDimensions }\n );\n }\n\n finish() {\n if (!this.#commentToolbarButton) {\n return;\n }\n this.#commentToolbarButton.focus({\n focusVisible: this.#commentWasFromKeyBoard,\n });\n this.#commentWasFromKeyBoard = false;\n }\n\n isDeleted() {\n return this.#deleted || this.#text === \"\";\n }\n\n isEmpty() {\n return this.#text === null;\n }\n\n hasBeenEdited() {\n return this.isDeleted() || this.#text !== this.#initialText;\n }\n\n serialize() {\n return this.data;\n }\n\n get data() {\n return {\n text: this.#text,\n richText: this.#richText,\n date: this.#date,\n deleted: this.isDeleted(),\n };\n }\n\n /**\n * Set the comment data.\n */\n set data(text) {\n if (text !== this.#text) {\n this.#richText = null;\n }\n if (text === null) {\n this.#text = \"\";\n this.#deleted = true;\n return;\n }\n this.#text = text;\n this.#date = new Date();\n this.#deleted = false;\n }\n\n setInitialText(text, richText = null) {\n this.#initialText = text;\n this.data = text;\n this.#date = null;\n this.#richText = richText;\n }\n\n shown() {}\n\n destroy() {\n this.#commentToolbarButton?.remove();\n this.#commentToolbarButton = null;\n this.#commentStandaloneButton?.remove();\n this.#commentStandaloneButton = null;\n this.#text = \"\";\n this.#richText = null;\n this.#date = null;\n this.#editor = null;\n this.#commentWasFromKeyBoard = false;\n this.#deleted = false;\n }\n}\n\nexport { Comment };\n","/* Copyright 2024 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { OutputScale, stopEvent } from \"./display_utils.js\";\n\nclass TouchManager {\n #container;\n\n #isPinching = false;\n\n #isPinchingStopped = null;\n\n #isPinchingDisabled;\n\n #onPinchStart;\n\n #onPinching;\n\n #onPinchEnd;\n\n #pointerDownAC = null;\n\n #signal;\n\n #touchInfo = null;\n\n #touchManagerAC;\n\n #touchMoveAC = null;\n\n constructor({\n container,\n isPinchingDisabled = null,\n isPinchingStopped = null,\n onPinchStart = null,\n onPinching = null,\n onPinchEnd = null,\n signal,\n }) {\n this.#container = container;\n this.#isPinchingStopped = isPinchingStopped;\n this.#isPinchingDisabled = isPinchingDisabled;\n this.#onPinchStart = onPinchStart;\n this.#onPinching = onPinching;\n this.#onPinchEnd = onPinchEnd;\n this.#touchManagerAC = new AbortController();\n this.#signal = AbortSignal.any([signal, this.#touchManagerAC.signal]);\n\n container.addEventListener(\"touchstart\", this.#onTouchStart.bind(this), {\n passive: false,\n signal: this.#signal,\n });\n }\n\n /**\n * NOTE: Don't shadow this value since `devicePixelRatio` may change if the\n * window resolution changes, e.g. if the viewer is moved to another monitor.\n */\n get MIN_TOUCH_DISTANCE_TO_PINCH() {\n // The 35 is coming from:\n // https://searchfox.org/mozilla-central/source/gfx/layers/apz/src/GestureEventListener.cpp#36\n //\n // The properties TouchEvent::screenX/Y are in screen CSS pixels:\n // https://developer.mozilla.org/en-US/docs/Web/API/Touch/screenX#examples\n // MIN_TOUCH_DISTANCE_TO_PINCH is in CSS pixels.\n return 35 / OutputScale.pixelRatio;\n }\n\n #onTouchStart(evt) {\n if (this.#isPinchingDisabled?.()) {\n return;\n }\n\n if (evt.touches.length === 1) {\n if (this.#pointerDownAC) {\n return;\n }\n const pointerDownAC = (this.#pointerDownAC = new AbortController());\n const signal = AbortSignal.any([this.#signal, pointerDownAC.signal]);\n const container = this.#container;\n\n // We want to have the events at the capture phase to make sure we can\n // cancel them.\n const opts = { capture: true, signal, passive: false };\n const cancelPointerDown = e => {\n if (e.pointerType === \"touch\") {\n this.#pointerDownAC?.abort();\n this.#pointerDownAC = null;\n }\n };\n container.addEventListener(\n \"pointerdown\",\n e => {\n if (e.pointerType === \"touch\") {\n // This is the second finger so we don't want it select something\n // or whatever.\n stopEvent(e);\n cancelPointerDown(e);\n }\n },\n opts\n );\n container.addEventListener(\"pointerup\", cancelPointerDown, opts);\n container.addEventListener(\"pointercancel\", cancelPointerDown, opts);\n return;\n }\n\n if (!this.#touchMoveAC) {\n this.#touchMoveAC = new AbortController();\n const signal = AbortSignal.any([this.#signal, this.#touchMoveAC.signal]);\n const container = this.#container;\n\n const opt = { signal, capture: false, passive: false };\n container.addEventListener(\n \"touchmove\",\n this.#onTouchMove.bind(this),\n opt\n );\n const onTouchEnd = this.#onTouchEnd.bind(this);\n container.addEventListener(\"touchend\", onTouchEnd, opt);\n container.addEventListener(\"touchcancel\", onTouchEnd, opt);\n\n opt.capture = true;\n container.addEventListener(\"pointerdown\", stopEvent, opt);\n container.addEventListener(\"pointermove\", stopEvent, opt);\n container.addEventListener(\"pointercancel\", stopEvent, opt);\n container.addEventListener(\"pointerup\", stopEvent, opt);\n this.#onPinchStart?.();\n }\n\n stopEvent(evt);\n\n if (evt.touches.length !== 2 || this.#isPinchingStopped?.()) {\n this.#touchInfo = null;\n return;\n }\n\n let [touch0, touch1] = evt.touches;\n if (touch0.identifier > touch1.identifier) {\n [touch0, touch1] = [touch1, touch0];\n }\n this.#touchInfo = {\n touch0X: touch0.screenX,\n touch0Y: touch0.screenY,\n touch1X: touch1.screenX,\n touch1Y: touch1.screenY,\n };\n }\n\n #onTouchMove(evt) {\n if (!this.#touchInfo || evt.touches.length !== 2) {\n return;\n }\n\n stopEvent(evt);\n\n let [touch0, touch1] = evt.touches;\n if (touch0.identifier > touch1.identifier) {\n [touch0, touch1] = [touch1, touch0];\n }\n const { screenX: screen0X, screenY: screen0Y } = touch0;\n const { screenX: screen1X, screenY: screen1Y } = touch1;\n const touchInfo = this.#touchInfo;\n const {\n touch0X: pTouch0X,\n touch0Y: pTouch0Y,\n touch1X: pTouch1X,\n touch1Y: pTouch1Y,\n } = touchInfo;\n\n const prevGapX = pTouch1X - pTouch0X;\n const prevGapY = pTouch1Y - pTouch0Y;\n const currGapX = screen1X - screen0X;\n const currGapY = screen1Y - screen0Y;\n\n const distance = Math.hypot(currGapX, currGapY) || 1;\n const pDistance = Math.hypot(prevGapX, prevGapY) || 1;\n if (\n !this.#isPinching &&\n Math.abs(pDistance - distance) <= TouchManager.MIN_TOUCH_DISTANCE_TO_PINCH\n ) {\n return;\n }\n\n touchInfo.touch0X = screen0X;\n touchInfo.touch0Y = screen0Y;\n touchInfo.touch1X = screen1X;\n touchInfo.touch1Y = screen1Y;\n\n if (!this.#isPinching) {\n // Start pinching.\n this.#isPinching = true;\n\n // We return here else the first pinch is a bit too much\n return;\n }\n\n const origin = [(screen0X + screen1X) / 2, (screen0Y + screen1Y) / 2];\n this.#onPinching?.(origin, pDistance, distance);\n }\n\n #onTouchEnd(evt) {\n if (evt.touches.length >= 2) {\n return;\n }\n // #touchMoveAC shouldn't be null but it seems that irl it can (see #19793).\n if (this.#touchMoveAC) {\n this.#touchMoveAC.abort();\n this.#touchMoveAC = null;\n this.#onPinchEnd?.();\n }\n\n if (!this.#touchInfo) {\n return;\n }\n stopEvent(evt);\n this.#touchInfo = null;\n this.#isPinching = false;\n }\n\n destroy() {\n this.#touchManagerAC?.abort();\n this.#touchManagerAC = null;\n this.#pointerDownAC?.abort();\n this.#pointerDownAC = null;\n }\n}\n\nexport { TouchManager };\n","/* Copyright 2022 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./annotation_editor_layer.js\").AnnotationEditorLayer} AnnotationEditorLayer */\n\nimport {\n AnnotationEditorUIManager,\n bindEvents,\n ColorManager,\n KeyboardManager,\n} from \"./tools.js\";\nimport {\n FeatureTest,\n MathClamp,\n shadow,\n unreachable,\n} from \"../../shared/util.js\";\nimport { noContextMenu, stopEvent } from \"../display_utils.js\";\nimport { AltText } from \"./alt_text.js\";\nimport { Comment } from \"./comment.js\";\nimport { EditorToolbar } from \"./toolbar.js\";\nimport { TouchManager } from \"../touch_manager.js\";\n\n/**\n * @typedef {Object} AnnotationEditorParameters\n * @property {AnnotationEditorUIManager} uiManager - the global manager\n * @property {AnnotationEditorLayer} parent - the layer containing this editor\n * @property {string} id - editor id\n * @property {number} x - x-coordinate\n * @property {number} y - y-coordinate\n */\n\n/**\n * Base class for editors.\n */\nclass AnnotationEditor {\n #accessibilityData = null;\n\n #allResizerDivs = null;\n\n #altText = null;\n\n #comment = null;\n\n #commentStandaloneButton = null;\n\n #disabled = false;\n\n #dragPointerId = null;\n\n #dragPointerType = \"\";\n\n #resizersDiv = null;\n\n #lastPointerCoords = null;\n\n #savedDimensions = null;\n\n #fakeAnnotation = null;\n\n #focusAC = null;\n\n #focusedResizerName = \"\";\n\n #hasBeenClicked = false;\n\n #initialRect = null;\n\n #isEditing = false;\n\n #isInEditMode = false;\n\n #isResizerEnabledForKeyboard = false;\n\n #moveInDOMTimeout = null;\n\n #prevDragX = 0;\n\n #prevDragY = 0;\n\n #telemetryTimeouts = null;\n\n #touchManager = null;\n\n isSelected = false;\n\n _isCopy = false;\n\n _editToolbar = null;\n\n _initialOptions = Object.create(null);\n\n _initialData = null;\n\n _isVisible = true;\n\n _uiManager = null;\n\n _focusEventsAllowed = true;\n\n static _l10n = null;\n\n static _l10nResizer = null;\n\n #isDraggable = false;\n\n #zIndex = AnnotationEditor._zIndex++;\n\n static _borderLineWidth = -1;\n\n static _colorManager = new ColorManager();\n\n static _zIndex = 1;\n\n // Time to wait (in ms) before sending the telemetry data.\n // We wait a bit to avoid sending too many requests when changing something\n // like the thickness of a line.\n static _telemetryTimeout = 1000;\n\n static get _resizerKeyboardManager() {\n const resize = AnnotationEditor.prototype._resizeWithKeyboard;\n const small = AnnotationEditorUIManager.TRANSLATE_SMALL;\n const big = AnnotationEditorUIManager.TRANSLATE_BIG;\n\n return shadow(\n this,\n \"_resizerKeyboardManager\",\n new KeyboardManager([\n [[\"ArrowLeft\", \"mac+ArrowLeft\"], resize, { args: [-small, 0] }],\n [\n [\"ctrl+ArrowLeft\", \"mac+shift+ArrowLeft\"],\n resize,\n { args: [-big, 0] },\n ],\n [[\"ArrowRight\", \"mac+ArrowRight\"], resize, { args: [small, 0] }],\n [\n [\"ctrl+ArrowRight\", \"mac+shift+ArrowRight\"],\n resize,\n { args: [big, 0] },\n ],\n [[\"ArrowUp\", \"mac+ArrowUp\"], resize, { args: [0, -small] }],\n [[\"ctrl+ArrowUp\", \"mac+shift+ArrowUp\"], resize, { args: [0, -big] }],\n [[\"ArrowDown\", \"mac+ArrowDown\"], resize, { args: [0, small] }],\n [[\"ctrl+ArrowDown\", \"mac+shift+ArrowDown\"], resize, { args: [0, big] }],\n [\n [\"Escape\", \"mac+Escape\"],\n AnnotationEditor.prototype._stopResizingWithKeyboard,\n ],\n ])\n );\n }\n\n /**\n * @param {AnnotationEditorParameters} parameters\n */\n constructor(parameters) {\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n this.constructor === AnnotationEditor\n ) {\n unreachable(\"Cannot initialize AnnotationEditor.\");\n }\n\n this.parent = parameters.parent;\n this.id = parameters.id;\n this.width = this.height = null;\n this.pageIndex = parameters.parent.pageIndex;\n this.name = parameters.name;\n this.div = null;\n this._uiManager = parameters.uiManager;\n this.annotationElementId = null;\n this._willKeepAspectRatio = false;\n this._initialOptions.isCentered = parameters.isCentered;\n this._structTreeParentId = null;\n this.annotationElementId = parameters.annotationElementId || null;\n this.creationDate = parameters.creationDate || new Date();\n this.modificationDate = parameters.modificationDate || null;\n this.canAddComment = true;\n\n const {\n rotation,\n rawDims: { pageWidth, pageHeight, pageX, pageY },\n } = this.parent.viewport;\n\n this.rotation = rotation;\n this.pageRotation =\n (360 + rotation - this._uiManager.viewParameters.rotation) % 360;\n this.pageDimensions = [pageWidth, pageHeight];\n this.pageTranslation = [pageX, pageY];\n\n const [width, height] = this.parentDimensions;\n this.x = parameters.x / width;\n this.y = parameters.y / height;\n\n this.isAttachedToDOM = false;\n this.deleted = false;\n }\n\n get editorType() {\n return Object.getPrototypeOf(this).constructor._type;\n }\n\n get mode() {\n return Object.getPrototypeOf(this).constructor._editorType;\n }\n\n static get isDrawer() {\n return false;\n }\n\n static get _defaultLineColor() {\n return shadow(\n this,\n \"_defaultLineColor\",\n this._colorManager.getHexCode(\"CanvasText\")\n );\n }\n\n static deleteAnnotationElement(editor) {\n const fakeEditor = new FakeEditor({\n id: editor.parent.getNextId(),\n parent: editor.parent,\n uiManager: editor._uiManager,\n });\n fakeEditor.annotationElementId = editor.annotationElementId;\n fakeEditor.deleted = true;\n fakeEditor._uiManager.addToAnnotationStorage(fakeEditor);\n }\n\n /**\n * Initialize the l10n stuff for this type of editor.\n * @param {Object} l10n\n */\n static initialize(l10n, _uiManager) {\n AnnotationEditor._l10n ??= l10n;\n\n AnnotationEditor._l10nResizer ||= Object.freeze({\n topLeft: \"pdfjs-editor-resizer-top-left\",\n topMiddle: \"pdfjs-editor-resizer-top-middle\",\n topRight: \"pdfjs-editor-resizer-top-right\",\n middleRight: \"pdfjs-editor-resizer-middle-right\",\n bottomRight: \"pdfjs-editor-resizer-bottom-right\",\n bottomMiddle: \"pdfjs-editor-resizer-bottom-middle\",\n bottomLeft: \"pdfjs-editor-resizer-bottom-left\",\n middleLeft: \"pdfjs-editor-resizer-middle-left\",\n });\n\n if (AnnotationEditor._borderLineWidth !== -1) {\n return;\n }\n const style = getComputedStyle(document.documentElement);\n AnnotationEditor._borderLineWidth =\n parseFloat(style.getPropertyValue(\"--outline-width\")) || 0;\n }\n\n /**\n * Update the default parameters for this type of editor.\n * @param {number} _type\n * @param {*} _value\n */\n static updateDefaultParams(_type, _value) {}\n\n /**\n * Get the default properties to set in the UI for this type of editor.\n * @returns {Array}\n */\n static get defaultPropertiesToUpdate() {\n return [];\n }\n\n /**\n * Check if this kind of editor is able to handle the given mime type for\n * pasting.\n * @param {string} mime\n * @returns {boolean}\n */\n static isHandlingMimeForPasting(mime) {\n return false;\n }\n\n /**\n * Extract the data from the clipboard item and delegate the creation of the\n * editor to the parent.\n * @param {DataTransferItem} item\n * @param {AnnotationEditorLayer} parent\n */\n static paste(item, parent) {\n unreachable(\"Not implemented\");\n }\n\n /**\n * Get the properties to update in the UI for this editor.\n * @returns {Array}\n */\n get propertiesToUpdate() {\n return [];\n }\n\n get _isDraggable() {\n return this.#isDraggable;\n }\n\n set _isDraggable(value) {\n this.#isDraggable = value;\n this.div?.classList.toggle(\"draggable\", value);\n }\n\n get uid() {\n return this.annotationElementId || this.id;\n }\n\n /**\n * @returns {boolean} true if the editor handles the Enter key itself.\n */\n get isEnterHandled() {\n return true;\n }\n\n center() {\n const [pageWidth, pageHeight] = this.pageDimensions;\n switch (this.parentRotation) {\n case 90:\n this.x -= (this.height * pageHeight) / (pageWidth * 2);\n this.y += (this.width * pageWidth) / (pageHeight * 2);\n break;\n case 180:\n this.x += this.width / 2;\n this.y += this.height / 2;\n break;\n case 270:\n this.x += (this.height * pageHeight) / (pageWidth * 2);\n this.y -= (this.width * pageWidth) / (pageHeight * 2);\n break;\n default:\n this.x -= this.width / 2;\n this.y -= this.height / 2;\n break;\n }\n this.fixAndSetPosition();\n }\n\n /**\n * Add some commands into the CommandManager (undo/redo stuff).\n * @param {Object} params\n */\n addCommands(params) {\n this._uiManager.addCommands(params);\n }\n\n get currentLayer() {\n return this._uiManager.currentLayer;\n }\n\n /**\n * This editor will be behind the others.\n */\n setInBackground() {\n this.div.style.zIndex = 0;\n }\n\n /**\n * This editor will be in the foreground.\n */\n setInForeground() {\n this.div.style.zIndex = this.#zIndex;\n }\n\n setParent(parent) {\n if (parent !== null) {\n this.pageIndex = parent.pageIndex;\n this.pageDimensions = parent.pageDimensions;\n } else {\n // The editor is being removed from the DOM, so we need to stop resizing.\n this.#stopResizing();\n\n // Remove the fake annotation in the annotation layer.\n this.#fakeAnnotation?.remove();\n this.#fakeAnnotation = null;\n }\n this.parent = parent;\n }\n\n /**\n * onfocus callback.\n */\n focusin(event) {\n if (!this._focusEventsAllowed) {\n return;\n }\n if (!this.#hasBeenClicked) {\n this.parent.setSelected(this);\n } else {\n this.#hasBeenClicked = false;\n }\n }\n\n /**\n * onblur callback.\n * @param {FocusEvent} event\n */\n focusout(event) {\n if (!this._focusEventsAllowed) {\n return;\n }\n\n if (!this.isAttachedToDOM) {\n return;\n }\n\n // In case of focusout, the relatedTarget is the element which\n // is grabbing the focus.\n // So if the related target is an element under the div for this\n // editor, then the editor isn't unactive.\n const target = event.relatedTarget;\n if (target?.closest(`#${this.id}`)) {\n return;\n }\n\n event.preventDefault();\n\n if (!this.parent?.isMultipleSelection) {\n this.commitOrRemove();\n }\n }\n\n commitOrRemove() {\n if (this.isEmpty()) {\n this.remove();\n } else {\n this.commit();\n }\n }\n\n /**\n * Commit the data contained in this editor.\n */\n commit() {\n if (!this.isInEditMode()) {\n return;\n }\n this.addToAnnotationStorage();\n }\n\n addToAnnotationStorage() {\n this._uiManager.addToAnnotationStorage(this);\n }\n\n /**\n * Set the editor position within its parent.\n * @param {number} x\n * @param {number} y\n * @param {number} tx - x-translation in screen coordinates.\n * @param {number} ty - y-translation in screen coordinates.\n */\n setAt(x, y, tx, ty) {\n const [width, height] = this.parentDimensions;\n [tx, ty] = this.screenToPageTranslation(tx, ty);\n\n this.x = (x + tx) / width;\n this.y = (y + ty) / height;\n\n this.fixAndSetPosition();\n }\n\n _moveAfterPaste(baseX, baseY) {\n const [parentWidth, parentHeight] = this.parentDimensions;\n this.setAt(\n baseX * parentWidth,\n baseY * parentHeight,\n this.width * parentWidth,\n this.height * parentHeight\n );\n this._onTranslated();\n }\n\n #translate([width, height], x, y) {\n [x, y] = this.screenToPageTranslation(x, y);\n\n this.x += x / width;\n this.y += y / height;\n\n this._onTranslating(this.x, this.y);\n\n this.fixAndSetPosition();\n }\n\n /**\n * Translate the editor position within its parent.\n * @param {number} x - x-translation in screen coordinates.\n * @param {number} y - y-translation in screen coordinates.\n */\n translate(x, y) {\n // We don't change the initial position because the move here hasn't been\n // done by the user.\n this.#translate(this.parentDimensions, x, y);\n }\n\n /**\n * Translate the editor position within its page and adjust the scroll\n * in order to have the editor in the view.\n * @param {number} x - x-translation in page coordinates.\n * @param {number} y - y-translation in page coordinates.\n */\n translateInPage(x, y) {\n this.#initialRect ||= [this.x, this.y, this.width, this.height];\n this.#translate(this.pageDimensions, x, y);\n this.div.scrollIntoView({ block: \"nearest\" });\n }\n\n translationDone() {\n this._onTranslated(this.x, this.y);\n }\n\n drag(tx, ty) {\n this.#initialRect ||= [this.x, this.y, this.width, this.height];\n const {\n div,\n parentDimensions: [parentWidth, parentHeight],\n } = this;\n this.x += tx / parentWidth;\n this.y += ty / parentHeight;\n if (this.parent && (this.x < 0 || this.x > 1 || this.y < 0 || this.y > 1)) {\n // It's possible to not have a parent: for example, when the user is\n // dragging all the selected editors but this one on a page which has been\n // destroyed.\n // It's why we need to check for it. In such a situation, it isn't really\n // a problem to not find a new parent: it's something which is related to\n // what the user is seeing, hence it depends on how pages are layed out.\n\n // The element will be outside of its parent so change the parent.\n const { x, y } = this.div.getBoundingClientRect();\n if (this.parent.findNewParent(this, x, y)) {\n this.x -= Math.floor(this.x);\n this.y -= Math.floor(this.y);\n }\n }\n\n // The editor can be moved wherever the user wants, so we don't need to fix\n // the position: it'll be done when the user will release the mouse button.\n\n let { x, y } = this;\n const [bx, by] = this.getBaseTranslation();\n x += bx;\n y += by;\n\n const { style } = div;\n style.left = `${(100 * x).toFixed(2)}%`;\n style.top = `${(100 * y).toFixed(2)}%`;\n\n this._onTranslating(x, y);\n\n div.scrollIntoView({ block: \"nearest\" });\n }\n\n /**\n * Called when the editor is being translated.\n * @param {number} x - in page coordinates.\n * @param {number} y - in page coordinates.\n */\n _onTranslating(x, y) {}\n\n /**\n * Called when the editor has been translated.\n * @param {number} x - in page coordinates.\n * @param {number} y - in page coordinates.\n */\n _onTranslated(x, y) {}\n\n get _hasBeenMoved() {\n return (\n !!this.#initialRect &&\n (this.#initialRect[0] !== this.x || this.#initialRect[1] !== this.y)\n );\n }\n\n get _hasBeenResized() {\n return (\n !!this.#initialRect &&\n (this.#initialRect[2] !== this.width ||\n this.#initialRect[3] !== this.height)\n );\n }\n\n /**\n * Get the translation to take into account the editor border.\n * The CSS engine positions the element by taking the border into account so\n * we must apply the opposite translation to have the editor in the right\n * position.\n * @returns {Array}\n */\n getBaseTranslation() {\n const [parentWidth, parentHeight] = this.parentDimensions;\n const { _borderLineWidth } = AnnotationEditor;\n const x = _borderLineWidth / parentWidth;\n const y = _borderLineWidth / parentHeight;\n switch (this.rotation) {\n case 90:\n return [-x, y];\n case 180:\n return [x, y];\n case 270:\n return [x, -y];\n default:\n return [-x, -y];\n }\n }\n\n /**\n * @returns {boolean} true if position must be fixed (i.e. make the x and y\n * living in the page).\n */\n get _mustFixPosition() {\n return true;\n }\n\n /**\n * Fix the position of the editor in order to keep it inside its parent page.\n * @param {number} [rotation] - the rotation of the page.\n */\n fixAndSetPosition(rotation = this.rotation) {\n const {\n div: { style },\n pageDimensions: [pageWidth, pageHeight],\n } = this;\n let { x, y, width, height } = this;\n width *= pageWidth;\n height *= pageHeight;\n x *= pageWidth;\n y *= pageHeight;\n\n if (this._mustFixPosition) {\n switch (rotation) {\n case 0:\n x = MathClamp(x, 0, pageWidth - width);\n y = MathClamp(y, 0, pageHeight - height);\n break;\n case 90:\n x = MathClamp(x, 0, pageWidth - height);\n y = MathClamp(y, width, pageHeight);\n break;\n case 180:\n x = MathClamp(x, width, pageWidth);\n y = MathClamp(y, height, pageHeight);\n break;\n case 270:\n x = MathClamp(x, height, pageWidth);\n y = MathClamp(y, 0, pageHeight - width);\n break;\n }\n }\n\n this.x = x /= pageWidth;\n this.y = y /= pageHeight;\n\n const [bx, by] = this.getBaseTranslation();\n x += bx;\n y += by;\n\n style.left = `${(100 * x).toFixed(2)}%`;\n style.top = `${(100 * y).toFixed(2)}%`;\n\n this.moveInDOM();\n }\n\n static #rotatePoint(x, y, angle) {\n switch (angle) {\n case 90:\n return [y, -x];\n case 180:\n return [-x, -y];\n case 270:\n return [-y, x];\n default:\n return [x, y];\n }\n }\n\n /**\n * Convert a screen translation into a page one.\n * @param {number} x\n * @param {number} y\n */\n screenToPageTranslation(x, y) {\n return AnnotationEditor.#rotatePoint(x, y, this.parentRotation);\n }\n\n /**\n * Convert a page translation into a screen one.\n * @param {number} x\n * @param {number} y\n */\n pageTranslationToScreen(x, y) {\n return AnnotationEditor.#rotatePoint(x, y, 360 - this.parentRotation);\n }\n\n #getRotationMatrix(rotation) {\n switch (rotation) {\n case 90: {\n const [pageWidth, pageHeight] = this.pageDimensions;\n return [0, -pageWidth / pageHeight, pageHeight / pageWidth, 0];\n }\n case 180:\n return [-1, 0, 0, -1];\n case 270: {\n const [pageWidth, pageHeight] = this.pageDimensions;\n return [0, pageWidth / pageHeight, -pageHeight / pageWidth, 0];\n }\n default:\n return [1, 0, 0, 1];\n }\n }\n\n get parentScale() {\n return this._uiManager.viewParameters.realScale;\n }\n\n get parentRotation() {\n return (this._uiManager.viewParameters.rotation + this.pageRotation) % 360;\n }\n\n get parentDimensions() {\n const {\n parentScale,\n pageDimensions: [pageWidth, pageHeight],\n } = this;\n return [pageWidth * parentScale, pageHeight * parentScale];\n }\n\n /**\n * Set the dimensions of this editor.\n */\n setDims() {\n const {\n div: { style },\n width,\n height,\n } = this;\n style.width = `${(100 * width).toFixed(2)}%`;\n style.height = `${(100 * height).toFixed(2)}%`;\n }\n\n /**\n * Get the translation used to position this editor when it's created.\n * @returns {Array}\n */\n getInitialTranslation() {\n return [0, 0];\n }\n\n #createResizers() {\n if (this.#resizersDiv) {\n return;\n }\n this.#resizersDiv = document.createElement(\"div\");\n this.#resizersDiv.classList.add(\"resizers\");\n // When the resizers are used with the keyboard, they're focusable, hence\n // we want to have them in this order (top left, top middle, top right, ...)\n // in the DOM to have the focus order correct.\n const classes = this._willKeepAspectRatio\n ? [\"topLeft\", \"topRight\", \"bottomRight\", \"bottomLeft\"]\n : [\n \"topLeft\",\n \"topMiddle\",\n \"topRight\",\n \"middleRight\",\n \"bottomRight\",\n \"bottomMiddle\",\n \"bottomLeft\",\n \"middleLeft\",\n ];\n const signal = this._uiManager._signal;\n for (const name of classes) {\n const div = document.createElement(\"div\");\n this.#resizersDiv.append(div);\n div.classList.add(\"resizer\", name);\n div.setAttribute(\"data-resizer-name\", name);\n div.addEventListener(\n \"pointerdown\",\n this.#resizerPointerdown.bind(this, name),\n { signal }\n );\n div.addEventListener(\"contextmenu\", noContextMenu, { signal });\n div.tabIndex = -1;\n }\n this.div.prepend(this.#resizersDiv);\n }\n\n #resizerPointerdown(name, event) {\n event.preventDefault();\n const { isMac } = FeatureTest.platform;\n if (event.button !== 0 || (event.ctrlKey && isMac)) {\n return;\n }\n\n this.#altText?.toggle(false);\n\n const savedDraggable = this._isDraggable;\n this._isDraggable = false;\n this.#lastPointerCoords = [event.screenX, event.screenY];\n\n const ac = new AbortController();\n const signal = this._uiManager.combinedSignal(ac);\n\n this.parent.togglePointerEvents(false);\n window.addEventListener(\n \"pointermove\",\n this.#resizerPointermove.bind(this, name),\n { passive: true, capture: true, signal }\n );\n window.addEventListener(\n \"touchmove\",\n stopEvent /* Prevent the page from scrolling */,\n { passive: false, signal }\n );\n window.addEventListener(\"contextmenu\", noContextMenu, { signal });\n this.#savedDimensions = {\n savedX: this.x,\n savedY: this.y,\n savedWidth: this.width,\n savedHeight: this.height,\n };\n const savedParentCursor = this.parent.div.style.cursor;\n const savedCursor = this.div.style.cursor;\n this.div.style.cursor = this.parent.div.style.cursor =\n window.getComputedStyle(event.target).cursor;\n\n const pointerUpCallback = () => {\n ac.abort();\n this.parent.togglePointerEvents(true);\n this.#altText?.toggle(true);\n this._isDraggable = savedDraggable;\n this.parent.div.style.cursor = savedParentCursor;\n this.div.style.cursor = savedCursor;\n\n this.#addResizeToUndoStack();\n };\n window.addEventListener(\"pointerup\", pointerUpCallback, { signal });\n // If the user switches to another window (with alt+tab), then we end the\n // resize session.\n window.addEventListener(\"blur\", pointerUpCallback, { signal });\n }\n\n #resize(x, y, width, height) {\n this.width = width;\n this.height = height;\n this.x = x;\n this.y = y;\n this.setDims();\n this.fixAndSetPosition();\n this._onResized();\n }\n\n /**\n * Called when the editor has been resized.\n */\n _onResized() {}\n\n #addResizeToUndoStack() {\n if (!this.#savedDimensions) {\n return;\n }\n const { savedX, savedY, savedWidth, savedHeight } = this.#savedDimensions;\n this.#savedDimensions = null;\n\n const newX = this.x;\n const newY = this.y;\n const newWidth = this.width;\n const newHeight = this.height;\n if (\n newX === savedX &&\n newY === savedY &&\n newWidth === savedWidth &&\n newHeight === savedHeight\n ) {\n return;\n }\n\n this.addCommands({\n cmd: this.#resize.bind(this, newX, newY, newWidth, newHeight),\n undo: this.#resize.bind(this, savedX, savedY, savedWidth, savedHeight),\n mustExec: true,\n });\n }\n\n static _round(x) {\n // 10000 because we multiply by 100 and use toFixed(2) in fixAndSetPosition.\n // Without rounding, the positions of the corners other than the top left\n // one can be slightly wrong.\n return Math.round(x * 10000) / 10000;\n }\n\n #resizerPointermove(name, event) {\n const [parentWidth, parentHeight] = this.parentDimensions;\n const savedX = this.x;\n const savedY = this.y;\n const savedWidth = this.width;\n const savedHeight = this.height;\n const minWidth = AnnotationEditor.MIN_SIZE / parentWidth;\n const minHeight = AnnotationEditor.MIN_SIZE / parentHeight;\n\n const rotationMatrix = this.#getRotationMatrix(this.rotation);\n const transf = (x, y) => [\n rotationMatrix[0] * x + rotationMatrix[2] * y,\n rotationMatrix[1] * x + rotationMatrix[3] * y,\n ];\n const invRotationMatrix = this.#getRotationMatrix(360 - this.rotation);\n const invTransf = (x, y) => [\n invRotationMatrix[0] * x + invRotationMatrix[2] * y,\n invRotationMatrix[1] * x + invRotationMatrix[3] * y,\n ];\n let getPoint;\n let getOpposite;\n let isDiagonal = false;\n let isHorizontal = false;\n\n switch (name) {\n case \"topLeft\":\n isDiagonal = true;\n getPoint = (w, h) => [0, 0];\n getOpposite = (w, h) => [w, h];\n break;\n case \"topMiddle\":\n getPoint = (w, h) => [w / 2, 0];\n getOpposite = (w, h) => [w / 2, h];\n break;\n case \"topRight\":\n isDiagonal = true;\n getPoint = (w, h) => [w, 0];\n getOpposite = (w, h) => [0, h];\n break;\n case \"middleRight\":\n isHorizontal = true;\n getPoint = (w, h) => [w, h / 2];\n getOpposite = (w, h) => [0, h / 2];\n break;\n case \"bottomRight\":\n isDiagonal = true;\n getPoint = (w, h) => [w, h];\n getOpposite = (w, h) => [0, 0];\n break;\n case \"bottomMiddle\":\n getPoint = (w, h) => [w / 2, h];\n getOpposite = (w, h) => [w / 2, 0];\n break;\n case \"bottomLeft\":\n isDiagonal = true;\n getPoint = (w, h) => [0, h];\n getOpposite = (w, h) => [w, 0];\n break;\n case \"middleLeft\":\n isHorizontal = true;\n getPoint = (w, h) => [0, h / 2];\n getOpposite = (w, h) => [w, h / 2];\n break;\n }\n\n const point = getPoint(savedWidth, savedHeight);\n const oppositePoint = getOpposite(savedWidth, savedHeight);\n let transfOppositePoint = transf(...oppositePoint);\n const oppositeX = AnnotationEditor._round(savedX + transfOppositePoint[0]);\n const oppositeY = AnnotationEditor._round(savedY + transfOppositePoint[1]);\n let ratioX = 1;\n let ratioY = 1;\n\n let deltaX, deltaY;\n\n if (!event.fromKeyboard) {\n // We can't use event.movementX/Y because they're not reliable:\n // https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/movementX\n // (it was buggy on a laptop with a touch screen).\n const { screenX, screenY } = event;\n const [lastScreenX, lastScreenY] = this.#lastPointerCoords;\n [deltaX, deltaY] = this.screenToPageTranslation(\n screenX - lastScreenX,\n screenY - lastScreenY\n );\n this.#lastPointerCoords[0] = screenX;\n this.#lastPointerCoords[1] = screenY;\n } else {\n ({ deltaX, deltaY } = event);\n }\n [deltaX, deltaY] = invTransf(deltaX / parentWidth, deltaY / parentHeight);\n\n if (isDiagonal) {\n const oldDiag = Math.hypot(savedWidth, savedHeight);\n ratioX = ratioY = Math.max(\n Math.min(\n Math.hypot(\n oppositePoint[0] - point[0] - deltaX,\n oppositePoint[1] - point[1] - deltaY\n ) / oldDiag,\n // Avoid the editor to be larger than the page.\n 1 / savedWidth,\n 1 / savedHeight\n ),\n // Avoid the editor to be smaller than the minimum size.\n minWidth / savedWidth,\n minHeight / savedHeight\n );\n } else if (isHorizontal) {\n ratioX =\n MathClamp(Math.abs(oppositePoint[0] - point[0] - deltaX), minWidth, 1) /\n savedWidth;\n } else {\n ratioY =\n MathClamp(\n Math.abs(oppositePoint[1] - point[1] - deltaY),\n minHeight,\n 1\n ) / savedHeight;\n }\n\n const newWidth = AnnotationEditor._round(savedWidth * ratioX);\n const newHeight = AnnotationEditor._round(savedHeight * ratioY);\n transfOppositePoint = transf(...getOpposite(newWidth, newHeight));\n const newX = oppositeX - transfOppositePoint[0];\n const newY = oppositeY - transfOppositePoint[1];\n\n this.#initialRect ||= [this.x, this.y, this.width, this.height];\n this.width = newWidth;\n this.height = newHeight;\n this.x = newX;\n this.y = newY;\n\n this.setDims();\n this.fixAndSetPosition();\n\n this._onResizing();\n }\n\n /**\n * Called when the editor is being resized.\n */\n _onResizing() {}\n\n /**\n * Called when the alt text dialog is closed.\n */\n altTextFinish() {\n this.#altText?.finish();\n }\n\n /**\n * Get the toolbar buttons for this editor.\n * @returns {Array>|null}\n */\n get toolbarButtons() {\n return null;\n }\n\n /**\n * Add a toolbar for this editor.\n * @returns {Promise}\n */\n async addEditToolbar() {\n if (this._editToolbar || this.#isInEditMode) {\n return this._editToolbar;\n }\n this._editToolbar = new EditorToolbar(this);\n this.div.append(this._editToolbar.render());\n const { toolbarButtons } = this;\n if (toolbarButtons) {\n for (const [name, tool] of toolbarButtons) {\n await this._editToolbar.addButton(name, tool);\n }\n }\n if (!this.hasComment) {\n this._editToolbar.addButton(\"comment\", this.addCommentButton());\n }\n this._editToolbar.addButton(\"delete\");\n\n return this._editToolbar;\n }\n\n addCommentButtonInToolbar() {\n this._editToolbar?.addButtonBefore(\n \"comment\",\n this.addCommentButton(),\n \".deleteButton\"\n );\n }\n\n removeCommentButtonFromToolbar() {\n this._editToolbar?.removeButton(\"comment\");\n }\n\n removeEditToolbar() {\n this._editToolbar?.remove();\n this._editToolbar = null;\n\n // We destroy the alt text but we don't null it because we want to be able\n // to restore it in case the user undoes the deletion.\n this.#altText?.destroy();\n }\n\n addContainer(container) {\n const editToolbarDiv = this._editToolbar?.div;\n if (editToolbarDiv) {\n editToolbarDiv.before(container);\n } else {\n this.div.append(container);\n }\n }\n\n getClientDimensions() {\n return this.div.getBoundingClientRect();\n }\n\n /**\n * Create the alt text for this editor.\n * @returns {object}\n */\n createAltText() {\n if (!this.#altText) {\n AltText.initialize(AnnotationEditor._l10n);\n this.#altText = new AltText(this);\n if (this.#accessibilityData) {\n this.#altText.data = this.#accessibilityData;\n this.#accessibilityData = null;\n }\n }\n return this.#altText;\n }\n\n get altTextData() {\n return this.#altText?.data;\n }\n\n /**\n * Set the alt text data.\n */\n set altTextData(data) {\n if (!this.#altText) {\n return;\n }\n this.#altText.data = data;\n }\n\n get guessedAltText() {\n return this.#altText?.guessedText;\n }\n\n async setGuessedAltText(text) {\n await this.#altText?.setGuessedText(text);\n }\n\n serializeAltText(isForCopying) {\n return this.#altText?.serialize(isForCopying);\n }\n\n hasAltText() {\n return !!this.#altText && !this.#altText.isEmpty();\n }\n\n hasAltTextData() {\n return this.#altText?.hasData() ?? false;\n }\n\n focusCommentButton() {\n this.#comment?.focusButton();\n }\n\n addCommentButton() {\n return this.canAddComment ? (this.#comment ||= new Comment(this)) : null;\n }\n\n addStandaloneCommentButton() {\n if (!this._uiManager.hasCommentManager()) {\n return;\n }\n if (this.#commentStandaloneButton) {\n if (this._uiManager.isEditingMode()) {\n this.#commentStandaloneButton.classList.remove(\"hidden\");\n }\n return;\n }\n if (!this.hasComment) {\n return;\n }\n this.#commentStandaloneButton = this.#comment.renderForStandalone();\n this.div.append(this.#commentStandaloneButton);\n }\n\n removeStandaloneCommentButton() {\n this.#comment.removeStandaloneCommentButton();\n this.#commentStandaloneButton = null;\n }\n\n hideStandaloneCommentButton() {\n this.#commentStandaloneButton?.classList.add(\"hidden\");\n }\n\n get comment() {\n const {\n data: { richText, text, date, deleted },\n } = this.#comment;\n return {\n text,\n richText,\n date,\n deleted,\n color: this.getNonHCMColor(),\n opacity: this.opacity ?? 1,\n };\n }\n\n set comment(text) {\n this.#comment ||= new Comment(this);\n this.#comment.data = text;\n if (this.hasComment) {\n this.removeCommentButtonFromToolbar();\n this.addStandaloneCommentButton();\n this._uiManager.updateComment(this);\n } else {\n this.addCommentButtonInToolbar();\n this.removeStandaloneCommentButton();\n this._uiManager.removeComment(this);\n }\n }\n\n setCommentData({ comment, popupRef, richText }) {\n if (!popupRef) {\n return;\n }\n this.#comment ||= new Comment(this);\n this.#comment.setInitialText(comment, richText);\n\n if (!this.annotationElementId) {\n return;\n }\n const storedData = this._uiManager.getAndRemoveDataFromAnnotationStorage(\n this.annotationElementId\n );\n if (storedData) {\n this.updateFromAnnotationLayer(storedData);\n }\n }\n\n get hasEditedComment() {\n return this.#comment?.hasBeenEdited();\n }\n\n get hasDeletedComment() {\n return this.#comment?.isDeleted();\n }\n\n get hasComment() {\n return (\n !!this.#comment && !this.#comment.isEmpty() && !this.#comment.isDeleted()\n );\n }\n\n async editComment(options) {\n this.#comment ||= new Comment(this);\n this.#comment.edit(options);\n }\n\n toggleComment(isSelected, visibility = undefined) {\n if (this.hasComment) {\n this._uiManager.toggleComment(this, isSelected, visibility);\n }\n }\n\n setSelectedCommentButton(selected) {\n this.#comment.setSelectedButton(selected);\n }\n\n addComment(serialized) {\n if (this.hasEditedComment) {\n const DEFAULT_POPUP_WIDTH = 180;\n const DEFAULT_POPUP_HEIGHT = 100;\n const [, , , trY] = serialized.rect;\n const [pageWidth] = this.pageDimensions;\n const [pageX] = this.pageTranslation;\n const blX = pageX + pageWidth + 1;\n const blY = trY - DEFAULT_POPUP_HEIGHT;\n const trX = blX + DEFAULT_POPUP_WIDTH;\n serialized.popup = {\n contents: this.comment.text,\n deleted: this.comment.deleted,\n rect: [blX, blY, trX, trY],\n };\n }\n }\n\n updateFromAnnotationLayer({ popup: { contents, deleted } }) {\n this.#comment.data = deleted ? null : contents;\n }\n\n get parentBoundingClientRect() {\n return this.parent.boundingClientRect;\n }\n\n /**\n * Render this editor in a div.\n * @returns {HTMLDivElement | null}\n */\n render() {\n const div = (this.div = document.createElement(\"div\"));\n div.setAttribute(\"data-editor-rotation\", (360 - this.rotation) % 360);\n div.className = this.name;\n div.setAttribute(\"id\", this.id);\n div.tabIndex = this.#disabled ? -1 : 0;\n div.setAttribute(\"role\", \"application\");\n if (this.defaultL10nId) {\n div.setAttribute(\"data-l10n-id\", this.defaultL10nId);\n }\n if (!this._isVisible) {\n div.classList.add(\"hidden\");\n }\n\n this.setInForeground();\n this.#addFocusListeners();\n\n const [parentWidth, parentHeight] = this.parentDimensions;\n if (this.parentRotation % 180 !== 0) {\n div.style.maxWidth = `${((100 * parentHeight) / parentWidth).toFixed(\n 2\n )}%`;\n div.style.maxHeight = `${((100 * parentWidth) / parentHeight).toFixed(\n 2\n )}%`;\n }\n\n const [tx, ty] = this.getInitialTranslation();\n this.translate(tx, ty);\n\n bindEvents(this, div, [\"keydown\", \"pointerdown\", \"dblclick\"]);\n\n if (this.isResizable && this._uiManager._supportsPinchToZoom) {\n this.#touchManager ||= new TouchManager({\n container: div,\n isPinchingDisabled: () => !this.isSelected,\n onPinchStart: this.#touchPinchStartCallback.bind(this),\n onPinching: this.#touchPinchCallback.bind(this),\n onPinchEnd: this.#touchPinchEndCallback.bind(this),\n signal: this._uiManager._signal,\n });\n }\n\n this.addStandaloneCommentButton();\n this._uiManager._editorUndoBar?.hide();\n\n return div;\n }\n\n #touchPinchStartCallback() {\n this.#savedDimensions = {\n savedX: this.x,\n savedY: this.y,\n savedWidth: this.width,\n savedHeight: this.height,\n };\n this.#altText?.toggle(false);\n this.parent.togglePointerEvents(false);\n }\n\n #touchPinchCallback(_origin, prevDistance, distance) {\n // Slightly slow down the zooming because the editor could be small and the\n // user could have difficulties to rescale it as they want.\n const slowDownFactor = 0.7;\n let factor =\n slowDownFactor * (distance / prevDistance) + 1 - slowDownFactor;\n if (factor === 1) {\n return;\n }\n\n const rotationMatrix = this.#getRotationMatrix(this.rotation);\n const transf = (x, y) => [\n rotationMatrix[0] * x + rotationMatrix[2] * y,\n rotationMatrix[1] * x + rotationMatrix[3] * y,\n ];\n\n // The center of the editor is the fixed point.\n const [parentWidth, parentHeight] = this.parentDimensions;\n const savedX = this.x;\n const savedY = this.y;\n const savedWidth = this.width;\n const savedHeight = this.height;\n\n const minWidth = AnnotationEditor.MIN_SIZE / parentWidth;\n const minHeight = AnnotationEditor.MIN_SIZE / parentHeight;\n factor = Math.max(\n Math.min(factor, 1 / savedWidth, 1 / savedHeight),\n minWidth / savedWidth,\n minHeight / savedHeight\n );\n const newWidth = AnnotationEditor._round(savedWidth * factor);\n const newHeight = AnnotationEditor._round(savedHeight * factor);\n if (newWidth === savedWidth && newHeight === savedHeight) {\n return;\n }\n\n this.#initialRect ||= [savedX, savedY, savedWidth, savedHeight];\n const transfCenterPoint = transf(savedWidth / 2, savedHeight / 2);\n const centerX = AnnotationEditor._round(savedX + transfCenterPoint[0]);\n const centerY = AnnotationEditor._round(savedY + transfCenterPoint[1]);\n const newTransfCenterPoint = transf(newWidth / 2, newHeight / 2);\n\n this.x = centerX - newTransfCenterPoint[0];\n this.y = centerY - newTransfCenterPoint[1];\n this.width = newWidth;\n this.height = newHeight;\n\n this.setDims();\n this.fixAndSetPosition();\n\n this._onResizing();\n }\n\n #touchPinchEndCallback() {\n this.#altText?.toggle(true);\n this.parent.togglePointerEvents(true);\n this.#addResizeToUndoStack();\n }\n\n /**\n * Onpointerdown callback.\n * @param {PointerEvent} event\n */\n pointerdown(event) {\n const { isMac } = FeatureTest.platform;\n if (event.button !== 0 || (event.ctrlKey && isMac)) {\n // Avoid to focus this editor because of a non-left click.\n event.preventDefault();\n return;\n }\n this.#hasBeenClicked = true;\n\n if (this._isDraggable) {\n this.#setUpDragSession(event);\n return;\n }\n\n this.#selectOnPointerEvent(event);\n }\n\n #selectOnPointerEvent(event) {\n const { isMac } = FeatureTest.platform;\n if (\n (event.ctrlKey && !isMac) ||\n event.shiftKey ||\n (event.metaKey && isMac)\n ) {\n this.parent.toggleSelected(this);\n } else {\n this.parent.setSelected(this);\n }\n }\n\n #setUpDragSession(event) {\n const { isSelected } = this;\n this._uiManager.setUpDragSession();\n let hasDraggingStarted = false;\n\n const ac = new AbortController();\n const signal = this._uiManager.combinedSignal(ac);\n const opts = { capture: true, passive: false, signal };\n const cancelDrag = e => {\n ac.abort();\n\n this.#dragPointerId = null;\n this.#hasBeenClicked = false;\n if (!this._uiManager.endDragSession()) {\n this.#selectOnPointerEvent(e);\n }\n if (hasDraggingStarted) {\n this._onStopDragging();\n }\n };\n\n if (isSelected) {\n this.#prevDragX = event.clientX;\n this.#prevDragY = event.clientY;\n this.#dragPointerId = event.pointerId;\n this.#dragPointerType = event.pointerType;\n window.addEventListener(\n \"pointermove\",\n e => {\n if (!hasDraggingStarted) {\n hasDraggingStarted = true;\n this._uiManager.toggleComment(\n this,\n /* isSelected = */ true,\n /* visibility = */ false\n );\n this._onStartDragging();\n }\n const { clientX: x, clientY: y, pointerId } = e;\n if (pointerId !== this.#dragPointerId) {\n stopEvent(e);\n return;\n }\n const [tx, ty] = this.screenToPageTranslation(\n x - this.#prevDragX,\n y - this.#prevDragY\n );\n this.#prevDragX = x;\n this.#prevDragY = y;\n this._uiManager.dragSelectedEditors(tx, ty);\n },\n opts\n );\n window.addEventListener(\n \"touchmove\",\n stopEvent /* Prevent the page from scrolling */,\n opts\n );\n window.addEventListener(\n \"pointerdown\",\n // If the user drags with one finger and then clicks with another.\n e => {\n if (e.pointerType === this.#dragPointerType) {\n // We've a pinch to zoom session.\n // We cannot have two primaries at the same time.\n // It's possible to be in this state with Firefox and Gnome when\n // trying to drag with three fingers (see bug 1933716).\n if (this.#touchManager || e.isPrimary) {\n cancelDrag(e);\n }\n }\n stopEvent(e);\n },\n opts\n );\n }\n\n const pointerUpCallback = e => {\n if (!this.#dragPointerId || this.#dragPointerId === e.pointerId) {\n cancelDrag(e);\n return;\n }\n stopEvent(e);\n };\n window.addEventListener(\"pointerup\", pointerUpCallback, { signal });\n // If the user is using alt+tab during the dragging session, the pointerup\n // event could be not fired, but a blur event is fired so we can use it in\n // order to interrupt the dragging session.\n window.addEventListener(\"blur\", pointerUpCallback, { signal });\n }\n\n _onStartDragging() {}\n\n _onStopDragging() {}\n\n moveInDOM() {\n // Moving the editor in the DOM can be expensive, so we wait a bit before.\n // It's important to not block the UI (for example when changing the font\n // size in a FreeText).\n if (this.#moveInDOMTimeout) {\n clearTimeout(this.#moveInDOMTimeout);\n }\n this.#moveInDOMTimeout = setTimeout(() => {\n this.#moveInDOMTimeout = null;\n this.parent?.moveEditorInDOM(this);\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n this._uiManager._eventBus.dispatch(\"editormovedindom\", {\n source: this,\n });\n }\n }, 0);\n }\n\n _setParentAndPosition(parent, x, y) {\n parent.changeParent(this);\n this.x = x;\n this.y = y;\n this.fixAndSetPosition();\n this._onTranslated();\n }\n\n /**\n * Convert the current rect into a page one.\n * @param {number} tx - x-translation in screen coordinates.\n * @param {number} ty - y-translation in screen coordinates.\n * @param {number} [rotation] - the rotation of the page.\n */\n getRect(tx, ty, rotation = this.rotation) {\n const scale = this.parentScale;\n const [pageWidth, pageHeight] = this.pageDimensions;\n const [pageX, pageY] = this.pageTranslation;\n const shiftX = tx / scale;\n const shiftY = ty / scale;\n const x = this.x * pageWidth;\n const y = this.y * pageHeight;\n const width = this.width * pageWidth;\n const height = this.height * pageHeight;\n\n switch (rotation) {\n case 0:\n return [\n x + shiftX + pageX,\n pageHeight - y - shiftY - height + pageY,\n x + shiftX + width + pageX,\n pageHeight - y - shiftY + pageY,\n ];\n case 90:\n return [\n x + shiftY + pageX,\n pageHeight - y + shiftX + pageY,\n x + shiftY + height + pageX,\n pageHeight - y + shiftX + width + pageY,\n ];\n case 180:\n return [\n x - shiftX - width + pageX,\n pageHeight - y + shiftY + pageY,\n x - shiftX + pageX,\n pageHeight - y + shiftY + height + pageY,\n ];\n case 270:\n return [\n x - shiftY - height + pageX,\n pageHeight - y - shiftX - width + pageY,\n x - shiftY + pageX,\n pageHeight - y - shiftX + pageY,\n ];\n default:\n throw new Error(\"Invalid rotation\");\n }\n }\n\n getRectInCurrentCoords(rect, pageHeight) {\n const [x1, y1, x2, y2] = rect;\n\n const width = x2 - x1;\n const height = y2 - y1;\n\n switch (this.rotation) {\n case 0:\n return [x1, pageHeight - y2, width, height];\n case 90:\n return [x1, pageHeight - y1, height, width];\n case 180:\n return [x2, pageHeight - y1, width, height];\n case 270:\n return [x2, pageHeight - y2, height, width];\n default:\n throw new Error(\"Invalid rotation\");\n }\n }\n\n /**\n * Get the rect in page coordinates without any translation.\n * It's used when serializing the editor.\n * @returns {Array}\n */\n getPDFRect() {\n return this.getRect(0, 0);\n }\n\n getNonHCMColor() {\n return (\n this.color &&\n AnnotationEditor._colorManager.convert(\n this._uiManager.getNonHCMColor(this.color)\n )\n );\n }\n\n /**\n * The color has been changed.\n */\n onUpdatedColor() {\n this.#comment?.onUpdatedColor();\n }\n\n getData() {\n const {\n comment: { text: str, color, date, opacity, deleted, richText },\n uid: id,\n pageIndex,\n creationDate,\n modificationDate,\n } = this;\n return {\n id,\n pageIndex,\n rect: this.getPDFRect(),\n richText,\n contentsObj: { str },\n creationDate,\n modificationDate: date || modificationDate,\n popupRef: !deleted,\n color,\n opacity,\n };\n }\n\n /**\n * Executed once this editor has been rendered.\n * @param {boolean} focus - true if the editor should be focused.\n */\n onceAdded(focus) {}\n\n /**\n * Check if the editor contains something.\n * @returns {boolean}\n */\n isEmpty() {\n return false;\n }\n\n /**\n * Enable edit mode.\n * @returns {boolean} - true if the edit mode has been enabled.\n */\n enableEditMode() {\n if (this.isInEditMode()) {\n return false;\n }\n this.parent.setEditingState(false);\n this.#isInEditMode = true;\n\n return true;\n }\n\n /**\n * Disable edit mode.\n * @returns {boolean} - true if the edit mode has been disabled.\n */\n disableEditMode() {\n if (!this.isInEditMode()) {\n return false;\n }\n this.parent.setEditingState(true);\n this.#isInEditMode = false;\n\n return true;\n }\n\n /**\n * Check if the editor is edited.\n * @returns {boolean}\n */\n isInEditMode() {\n return this.#isInEditMode;\n }\n\n /**\n * If it returns true, then this editor handles the keyboard\n * events itself.\n * @returns {boolean}\n */\n shouldGetKeyboardEvents() {\n return this.#isResizerEnabledForKeyboard;\n }\n\n /**\n * Check if this editor needs to be rebuilt or not.\n * @returns {boolean}\n */\n needsToBeRebuilt() {\n return this.div && !this.isAttachedToDOM;\n }\n\n get isOnScreen() {\n const { top, left, bottom, right } = this.getClientDimensions();\n const { innerHeight, innerWidth } = window;\n return left < innerWidth && right > 0 && top < innerHeight && bottom > 0;\n }\n\n #addFocusListeners() {\n if (this.#focusAC || !this.div) {\n return;\n }\n this.#focusAC = new AbortController();\n const signal = this._uiManager.combinedSignal(this.#focusAC);\n\n this.div.addEventListener(\"focusin\", this.focusin.bind(this), { signal });\n this.div.addEventListener(\"focusout\", this.focusout.bind(this), { signal });\n }\n\n /**\n * Rebuild the editor in case it has been removed on undo.\n *\n * To implement in subclasses.\n */\n rebuild() {\n this.#addFocusListeners();\n }\n\n /**\n * Rotate the editor when the page is rotated.\n * @param {number} angle\n */\n rotate(_angle) {}\n\n /**\n * Resize the editor when the page is resized.\n */\n resize() {}\n\n /**\n * Serialize the editor when it has been deleted.\n * @returns {Object}\n */\n serializeDeleted() {\n return {\n id: this.annotationElementId,\n deleted: true,\n pageIndex: this.pageIndex,\n popupRef: this._initialData?.popupRef || \"\",\n };\n }\n\n /**\n * Serialize the editor.\n * The result of the serialization will be used to construct a\n * new annotation to add to the pdf document.\n *\n * To implement in subclasses.\n * @param {boolean} [isForCopying]\n * @param {Object | null} [context]\n * @returns {Object | null}\n */\n serialize(isForCopying = false, context = null) {\n return {\n annotationType: this.mode,\n pageIndex: this.pageIndex,\n rect: this.getPDFRect(),\n rotation: this.rotation,\n structTreeParentId: this._structTreeParentId,\n popupRef: this._initialData?.popupRef || \"\",\n };\n }\n\n /**\n * Deserialize the editor.\n * The result of the deserialization is a new editor.\n *\n * @param {Object} data\n * @param {AnnotationEditorLayer} parent\n * @param {AnnotationEditorUIManager} uiManager\n * @returns {Promise}\n */\n static async deserialize(data, parent, uiManager) {\n const editor = new this.prototype.constructor({\n parent,\n id: parent.getNextId(),\n uiManager,\n annotationElementId: data.annotationElementId,\n creationDate: data.creationDate,\n modificationDate: data.modificationDate,\n });\n editor.rotation = data.rotation;\n editor.#accessibilityData = data.accessibilityData;\n editor._isCopy = data.isCopy || false;\n\n const [pageWidth, pageHeight] = editor.pageDimensions;\n const [x, y, width, height] = editor.getRectInCurrentCoords(\n data.rect,\n pageHeight\n );\n\n editor.x = x / pageWidth;\n editor.y = y / pageHeight;\n editor.width = width / pageWidth;\n editor.height = height / pageHeight;\n\n return editor;\n }\n\n /**\n * Check if an existing annotation associated with this editor has been\n * modified.\n * @returns {boolean}\n */\n get hasBeenModified() {\n return (\n !!this.annotationElementId && (this.deleted || this.serialize() !== null)\n );\n }\n\n /**\n * Remove this editor.\n * It's used on ctrl+backspace action.\n */\n remove() {\n this.#focusAC?.abort();\n this.#focusAC = null;\n\n if (!this.isEmpty()) {\n // The editor is removed but it can be back at some point thanks to\n // undo/redo so we must commit it before.\n this.commit();\n }\n if (this.parent) {\n this.parent.remove(this);\n } else {\n this._uiManager.removeEditor(this);\n }\n this.hideCommentPopup();\n\n if (this.#moveInDOMTimeout) {\n clearTimeout(this.#moveInDOMTimeout);\n this.#moveInDOMTimeout = null;\n }\n this.#stopResizing();\n this.removeEditToolbar();\n if (this.#telemetryTimeouts) {\n for (const timeout of this.#telemetryTimeouts.values()) {\n clearTimeout(timeout);\n }\n this.#telemetryTimeouts = null;\n }\n this.parent = null;\n this.#touchManager?.destroy();\n this.#touchManager = null;\n this.#fakeAnnotation?.remove();\n this.#fakeAnnotation = null;\n }\n\n /**\n * @returns {boolean} true if this editor can be resized.\n */\n get isResizable() {\n return false;\n }\n\n /**\n * Add the resizers to this editor.\n */\n makeResizable() {\n if (this.isResizable) {\n this.#createResizers();\n this.#resizersDiv.classList.remove(\"hidden\");\n }\n }\n\n get toolbarPosition() {\n return null;\n }\n\n /**\n * Get the position of the comment button.\n * @returns {Array|null}\n */\n get commentButtonPosition() {\n return this._uiManager.direction === \"ltr\" ? [1, 0] : [0, 0];\n }\n\n get commentButtonPositionInPage() {\n const {\n commentButtonPosition: [posX, posY],\n } = this;\n const [blX, blY, trX, trY] = this.getPDFRect();\n return [\n AnnotationEditor._round(blX + (trX - blX) * posX),\n AnnotationEditor._round(blY + (trY - blY) * (1 - posY)),\n ];\n }\n\n get commentButtonColor() {\n return this._uiManager.makeCommentColor(\n this.getNonHCMColor(),\n this.opacity\n );\n }\n\n get commentPopupPosition() {\n return this.#comment.commentPopupPositionInLayer;\n }\n\n set commentPopupPosition(pos) {\n this.#comment.commentPopupPositionInLayer = pos;\n }\n\n hasDefaultPopupPosition() {\n return this.#comment.hasDefaultPopupPosition();\n }\n\n get commentButtonWidth() {\n return this.#comment.commentButtonWidth;\n }\n\n get elementBeforePopup() {\n return this.div;\n }\n\n setCommentButtonStates(options) {\n this.#comment?.setCommentButtonStates(options);\n }\n\n /**\n * onkeydown callback.\n * @param {KeyboardEvent} event\n */\n keydown(event) {\n if (\n !this.isResizable ||\n event.target !== this.div ||\n event.key !== \"Enter\"\n ) {\n return;\n }\n this._uiManager.setSelected(this);\n this.#savedDimensions = {\n savedX: this.x,\n savedY: this.y,\n savedWidth: this.width,\n savedHeight: this.height,\n };\n const children = this.#resizersDiv.children;\n if (!this.#allResizerDivs) {\n this.#allResizerDivs = Array.from(children);\n const boundResizerKeydown = this.#resizerKeydown.bind(this);\n const boundResizerBlur = this.#resizerBlur.bind(this);\n const signal = this._uiManager._signal;\n for (const div of this.#allResizerDivs) {\n const name = div.getAttribute(\"data-resizer-name\");\n div.setAttribute(\"role\", \"spinbutton\");\n div.addEventListener(\"keydown\", boundResizerKeydown, { signal });\n div.addEventListener(\"blur\", boundResizerBlur, { signal });\n div.addEventListener(\"focus\", this.#resizerFocus.bind(this, name), {\n signal,\n });\n div.setAttribute(\"data-l10n-id\", AnnotationEditor._l10nResizer[name]);\n }\n }\n\n // We want to have the resizers in the visual order, so we move the first\n // (top-left) to the right place.\n const first = this.#allResizerDivs[0];\n let firstPosition = 0;\n for (const div of children) {\n if (div === first) {\n break;\n }\n firstPosition++;\n }\n const nextFirstPosition =\n (((360 - this.rotation + this.parentRotation) % 360) / 90) *\n (this.#allResizerDivs.length / 4);\n\n if (nextFirstPosition !== firstPosition) {\n // We need to reorder the resizers in the DOM in order to have the focus\n // on the top-left one.\n if (nextFirstPosition < firstPosition) {\n for (let i = 0; i < firstPosition - nextFirstPosition; i++) {\n this.#resizersDiv.append(this.#resizersDiv.firstChild);\n }\n } else if (nextFirstPosition > firstPosition) {\n for (let i = 0; i < nextFirstPosition - firstPosition; i++) {\n this.#resizersDiv.firstChild.before(this.#resizersDiv.lastChild);\n }\n }\n\n let i = 0;\n for (const child of children) {\n const div = this.#allResizerDivs[i++];\n const name = div.getAttribute(\"data-resizer-name\");\n child.setAttribute(\"data-l10n-id\", AnnotationEditor._l10nResizer[name]);\n }\n }\n\n this.#setResizerTabIndex(0);\n this.#isResizerEnabledForKeyboard = true;\n this.#resizersDiv.firstChild.focus({ focusVisible: true });\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n\n #resizerKeydown(event) {\n AnnotationEditor._resizerKeyboardManager.exec(this, event);\n }\n\n #resizerBlur(event) {\n if (\n this.#isResizerEnabledForKeyboard &&\n event.relatedTarget?.parentNode !== this.#resizersDiv\n ) {\n this.#stopResizing();\n }\n }\n\n #resizerFocus(name) {\n this.#focusedResizerName = this.#isResizerEnabledForKeyboard ? name : \"\";\n }\n\n #setResizerTabIndex(value) {\n if (!this.#allResizerDivs) {\n return;\n }\n for (const div of this.#allResizerDivs) {\n div.tabIndex = value;\n }\n }\n\n _resizeWithKeyboard(x, y) {\n if (!this.#isResizerEnabledForKeyboard) {\n return;\n }\n this.#resizerPointermove(this.#focusedResizerName, {\n deltaX: x,\n deltaY: y,\n fromKeyboard: true,\n });\n }\n\n #stopResizing() {\n this.#isResizerEnabledForKeyboard = false;\n this.#setResizerTabIndex(-1);\n this.#addResizeToUndoStack();\n }\n\n _stopResizingWithKeyboard() {\n this.#stopResizing();\n this.div.focus();\n }\n\n /**\n * Select this editor.\n */\n select() {\n if (this.isSelected && this._editToolbar) {\n this._editToolbar.show();\n return;\n }\n this.isSelected = true;\n this.makeResizable();\n this.div?.classList.add(\"selectedEditor\");\n if (!this._editToolbar) {\n this.addEditToolbar().then(() => {\n if (this.div?.classList.contains(\"selectedEditor\")) {\n // The editor can have been unselected while we were waiting for the\n // edit toolbar to be created, hence we want to be sure that this\n // editor is still selected.\n this._editToolbar?.show();\n }\n });\n return;\n }\n this._editToolbar?.show();\n this.#altText?.toggleAltTextBadge(false);\n }\n\n focus() {\n if (this.div && !this.div.contains(document.activeElement)) {\n setTimeout(() => this.div?.focus({ preventScroll: true }), 0);\n }\n }\n\n /**\n * Unselect this editor.\n */\n unselect() {\n if (!this.isSelected) {\n return;\n }\n this.isSelected = false;\n this.#resizersDiv?.classList.add(\"hidden\");\n this.div?.classList.remove(\"selectedEditor\");\n if (this.div?.contains(document.activeElement)) {\n // Don't use this.div.blur() because we don't know where the focus will\n // go.\n this._uiManager.currentLayer.div.focus({\n preventScroll: true,\n });\n }\n this._editToolbar?.hide();\n this.#altText?.toggleAltTextBadge(true);\n this.hideCommentPopup();\n }\n\n hideCommentPopup() {\n if (this.hasComment) {\n this._uiManager.toggleComment(null);\n }\n }\n\n /**\n * Update some parameters which have been changed through the UI.\n * @param {number} type\n * @param {*} value\n */\n updateParams(type, value) {}\n\n /**\n * When the user disables the editing mode some editors can change some of\n * their properties.\n */\n disableEditing() {}\n\n /**\n * When the user enables the editing mode some editors can change some of\n * their properties.\n */\n enableEditing() {}\n\n /**\n * Check if the content of this editor can be changed.\n * For example, a FreeText editor can be changed (the user can change the\n * text), but a Stamp editor cannot.\n * @returns {boolean}\n */\n get canChangeContent() {\n return false;\n }\n\n /**\n * The editor is about to be edited.\n */\n enterInEditMode() {\n if (!this.canChangeContent) {\n return;\n }\n this.enableEditMode();\n this.div.focus();\n }\n\n /**\n * ondblclick callback.\n * @param {MouseEvent} event\n */\n dblclick(event) {\n if (event.target.nodeName === \"BUTTON\") {\n // Avoid entering in edit mode when clicking on the comment button.\n return;\n }\n this.enterInEditMode();\n this.parent.updateToolbar({\n mode: this.constructor._editorType,\n editId: this.uid,\n });\n }\n\n /**\n * @returns {HTMLElement | null} the element requiring an alt text.\n */\n getElementForAltText() {\n return this.div;\n }\n\n /**\n * Get the div which really contains the displayed content.\n * @returns {HTMLDivElement | undefined}\n */\n get contentDiv() {\n return this.div;\n }\n\n /**\n * If true then the editor is currently edited.\n * @type {boolean}\n */\n get isEditing() {\n return this.#isEditing;\n }\n\n /**\n * When set to true, it means that this editor is currently edited.\n * @param {boolean} value\n */\n set isEditing(value) {\n this.#isEditing = value;\n if (!this.parent) {\n return;\n }\n if (value) {\n this.parent.setSelected(this);\n this.parent.setActiveEditor(this);\n } else {\n this.parent.setActiveEditor(null);\n }\n }\n\n static get MIN_SIZE() {\n return 16;\n }\n\n static canCreateNewEmptyEditor() {\n return true;\n }\n\n /**\n * Get the data to report to the telemetry when the editor is added.\n * @returns {Object}\n */\n get telemetryInitialData() {\n return { action: \"added\" };\n }\n\n /**\n * The telemetry data to use when saving/printing.\n * @returns {Object|null}\n */\n get telemetryFinalData() {\n return null;\n }\n\n _reportTelemetry(data, mustWait = false) {\n if (mustWait) {\n this.#telemetryTimeouts ||= new Map();\n const { action } = data;\n let timeout = this.#telemetryTimeouts.get(action);\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(() => {\n this._reportTelemetry(data);\n this.#telemetryTimeouts.delete(action);\n if (this.#telemetryTimeouts.size === 0) {\n this.#telemetryTimeouts = null;\n }\n }, AnnotationEditor._telemetryTimeout);\n this.#telemetryTimeouts.set(action, timeout);\n return;\n }\n data.type ||= this.editorType;\n this._uiManager._eventBus.dispatch(\"reporttelemetry\", {\n source: this,\n details: {\n type: \"editing\",\n data,\n },\n });\n }\n\n /**\n * Show or hide this editor.\n * @param {boolean|undefined} visible\n */\n show(visible = this._isVisible) {\n this.div.classList.toggle(\"hidden\", !visible);\n this._isVisible = visible;\n }\n\n enable() {\n if (this.div) {\n this.div.tabIndex = 0;\n }\n this.#disabled = false;\n }\n\n disable() {\n if (this.div) {\n this.div.tabIndex = -1;\n }\n this.#disabled = true;\n }\n\n updateFakeAnnotationElement(annotationLayer) {\n if (!this.#fakeAnnotation && !this.deleted) {\n this.#fakeAnnotation = annotationLayer.addFakeAnnotation(this);\n return;\n }\n if (this.deleted) {\n this.#fakeAnnotation.remove();\n this.#fakeAnnotation = null;\n return;\n }\n if (this.hasEditedComment || this._hasBeenMoved || this._hasBeenResized) {\n this.#fakeAnnotation.updateEdited({\n rect: this.getPDFRect(),\n popup: this.comment,\n });\n }\n }\n\n /**\n * Render an annotation in the annotation layer.\n * @param {Object} annotation\n * @returns {HTMLElement|null}\n */\n renderAnnotationElement(annotation) {\n if (this.deleted) {\n annotation.hide();\n return null;\n }\n let content = annotation.container.querySelector(\".annotationContent\");\n if (!content) {\n content = document.createElement(\"div\");\n content.classList.add(\"annotationContent\", this.editorType);\n annotation.container.prepend(content);\n } else if (content.nodeName === \"CANVAS\") {\n const canvas = content;\n content = document.createElement(\"div\");\n content.classList.add(\"annotationContent\", this.editorType);\n canvas.before(content);\n }\n\n return content;\n }\n\n resetAnnotationElement(annotation) {\n const { firstChild } = annotation.container;\n if (\n firstChild?.nodeName === \"DIV\" &&\n firstChild.classList.contains(\"annotationContent\")\n ) {\n firstChild.remove();\n }\n }\n}\n\n// This class is used to fake an editor which has been deleted.\nclass FakeEditor extends AnnotationEditor {\n constructor(params) {\n super(params);\n this.annotationElementId = params.annotationElementId;\n this.deleted = true;\n }\n\n serialize() {\n return this.serializeDeleted();\n }\n}\n\nexport { AnnotationEditor };\n","/* Copyright 2014 Opera Software ASA\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n *\n * Based on https://code.google.com/p/smhasher/wiki/MurmurHash3.\n * Hashes roughly 100 KB per millisecond on i7 3.4 GHz.\n */\n\nconst SEED = 0xc3d2e1f0;\n// Workaround for missing math precision in JS.\nconst MASK_HIGH = 0xffff0000;\nconst MASK_LOW = 0xffff;\n\nclass MurmurHash3_64 {\n constructor(seed) {\n this.h1 = seed ? seed & 0xffffffff : SEED;\n this.h2 = seed ? seed & 0xffffffff : SEED;\n }\n\n update(input) {\n let data, length;\n if (typeof input === \"string\") {\n data = new Uint8Array(input.length * 2);\n length = 0;\n for (let i = 0, ii = input.length; i < ii; i++) {\n const code = input.charCodeAt(i);\n if (code <= 0xff) {\n data[length++] = code;\n } else {\n data[length++] = code >>> 8;\n data[length++] = code & 0xff;\n }\n }\n } else if (ArrayBuffer.isView(input)) {\n data = input.slice();\n length = data.byteLength;\n } else {\n throw new Error(\"Invalid data format, must be a string or TypedArray.\");\n }\n\n const blockCounts = length >> 2;\n const tailLength = length - blockCounts * 4;\n // We don't care about endianness here.\n const dataUint32 = new Uint32Array(data.buffer, 0, blockCounts);\n let k1 = 0,\n k2 = 0;\n let h1 = this.h1,\n h2 = this.h2;\n const C1 = 0xcc9e2d51,\n C2 = 0x1b873593;\n const C1_LOW = C1 & MASK_LOW,\n C2_LOW = C2 & MASK_LOW;\n\n for (let i = 0; i < blockCounts; i++) {\n if (i & 1) {\n k1 = dataUint32[i];\n k1 = ((k1 * C1) & MASK_HIGH) | ((k1 * C1_LOW) & MASK_LOW);\n k1 = (k1 << 15) | (k1 >>> 17);\n k1 = ((k1 * C2) & MASK_HIGH) | ((k1 * C2_LOW) & MASK_LOW);\n h1 ^= k1;\n h1 = (h1 << 13) | (h1 >>> 19);\n h1 = h1 * 5 + 0xe6546b64;\n } else {\n k2 = dataUint32[i];\n k2 = ((k2 * C1) & MASK_HIGH) | ((k2 * C1_LOW) & MASK_LOW);\n k2 = (k2 << 15) | (k2 >>> 17);\n k2 = ((k2 * C2) & MASK_HIGH) | ((k2 * C2_LOW) & MASK_LOW);\n h2 ^= k2;\n h2 = (h2 << 13) | (h2 >>> 19);\n h2 = h2 * 5 + 0xe6546b64;\n }\n }\n\n k1 = 0;\n\n switch (tailLength) {\n case 3:\n k1 ^= data[blockCounts * 4 + 2] << 16;\n /* falls through */\n case 2:\n k1 ^= data[blockCounts * 4 + 1] << 8;\n /* falls through */\n case 1:\n k1 ^= data[blockCounts * 4];\n /* falls through */\n\n k1 = ((k1 * C1) & MASK_HIGH) | ((k1 * C1_LOW) & MASK_LOW);\n k1 = (k1 << 15) | (k1 >>> 17);\n k1 = ((k1 * C2) & MASK_HIGH) | ((k1 * C2_LOW) & MASK_LOW);\n if (blockCounts & 1) {\n h1 ^= k1;\n } else {\n h2 ^= k1;\n }\n }\n\n this.h1 = h1;\n this.h2 = h2;\n }\n\n hexdigest() {\n let h1 = this.h1,\n h2 = this.h2;\n\n h1 ^= h2 >>> 1;\n h1 = ((h1 * 0xed558ccd) & MASK_HIGH) | ((h1 * 0x8ccd) & MASK_LOW);\n h2 =\n ((h2 * 0xff51afd7) & MASK_HIGH) |\n (((((h2 << 16) | (h1 >>> 16)) * 0xafd7ed55) & MASK_HIGH) >>> 16);\n h1 ^= h2 >>> 1;\n h1 = ((h1 * 0x1a85ec53) & MASK_HIGH) | ((h1 * 0xec53) & MASK_LOW);\n h2 =\n ((h2 * 0xc4ceb9fe) & MASK_HIGH) |\n (((((h2 << 16) | (h1 >>> 16)) * 0xb9fe1a85) & MASK_HIGH) >>> 16);\n h1 ^= h2 >>> 1;\n\n return (\n (h1 >>> 0).toString(16).padStart(8, \"0\") +\n (h2 >>> 0).toString(16).padStart(8, \"0\")\n );\n }\n}\n\nexport { MurmurHash3_64 };\n","/* Copyright 2020 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { shadow, unreachable } from \"../shared/util.js\";\nimport { AnnotationEditor } from \"./editor/editor.js\";\nimport { MurmurHash3_64 } from \"../shared/murmurhash3.js\";\n\nconst SerializableEmpty = Object.freeze({\n map: null,\n hash: \"\",\n transfer: undefined,\n});\n\n/**\n * Key/value storage for annotation data in forms.\n */\nclass AnnotationStorage {\n #modified = false;\n\n #modifiedIds = null;\n\n #editorsMap = null;\n\n #storage = new Map();\n\n constructor() {\n // Callbacks to signal when the modification state is set or reset.\n // This is used by the viewer to only bind on `beforeunload` if forms\n // are actually edited to prevent doing so unconditionally since that\n // can have undesirable effects.\n this.onSetModified = null;\n this.onResetModified = null;\n this.onAnnotationEditor = null;\n\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n // For testing purposes.\n Object.defineProperty(this, \"_setValues\", {\n value: obj => {\n for (const [key, val] of Object.entries(obj)) {\n this.setValue(key, val);\n }\n },\n });\n }\n }\n\n /**\n * Get the value for a given key if it exists, or return the default value.\n * @param {string} key\n * @param {Object} defaultValue\n * @returns {Object}\n */\n getValue(key, defaultValue) {\n const value = this.#storage.get(key);\n if (value === undefined) {\n return defaultValue;\n }\n\n return Object.assign(defaultValue, value);\n }\n\n /**\n * Get the value for a given key.\n * @param {string} key\n * @returns {Object}\n */\n getRawValue(key) {\n return this.#storage.get(key);\n }\n\n /**\n * Remove a value from the storage.\n * @param {string} key\n */\n remove(key) {\n const storedValue = this.#storage.get(key);\n if (storedValue === undefined) {\n return;\n }\n if (storedValue instanceof AnnotationEditor) {\n this.#editorsMap.delete(storedValue.annotationElementId);\n }\n this.#storage.delete(key);\n\n if (this.#storage.size === 0) {\n this.resetModified();\n }\n\n if (typeof this.onAnnotationEditor === \"function\") {\n for (const value of this.#storage.values()) {\n if (value instanceof AnnotationEditor) {\n return;\n }\n }\n this.onAnnotationEditor(null);\n }\n }\n\n /**\n * Set the value for a given key\n * @param {string} key\n * @param {Object} value\n */\n setValue(key, value) {\n const obj = this.#storage.get(key);\n let modified = false;\n if (obj !== undefined) {\n for (const [entry, val] of Object.entries(value)) {\n if (obj[entry] !== val) {\n modified = true;\n obj[entry] = val;\n }\n }\n } else {\n modified = true;\n this.#storage.set(key, value);\n }\n if (modified) {\n this.#setModified();\n }\n\n if (value instanceof AnnotationEditor) {\n (this.#editorsMap ||= new Map()).set(value.annotationElementId, value);\n if (typeof this.onAnnotationEditor === \"function\") {\n this.onAnnotationEditor(value.constructor._type);\n }\n }\n }\n\n /**\n * Check if the storage contains the given key.\n * @param {string} key\n * @returns {boolean}\n */\n has(key) {\n return this.#storage.has(key);\n }\n\n get size() {\n return this.#storage.size;\n }\n\n #setModified() {\n if (!this.#modified) {\n this.#modified = true;\n if (typeof this.onSetModified === \"function\") {\n this.onSetModified();\n }\n }\n }\n\n resetModified() {\n if (this.#modified) {\n this.#modified = false;\n if (typeof this.onResetModified === \"function\") {\n this.onResetModified();\n }\n }\n }\n\n /**\n * @returns {PrintAnnotationStorage}\n */\n get print() {\n return new PrintAnnotationStorage(this);\n }\n\n /**\n * PLEASE NOTE: Only intended for usage within the API itself.\n * @ignore\n */\n get serializable() {\n if (this.#storage.size === 0) {\n return SerializableEmpty;\n }\n const map = new Map(),\n hash = new MurmurHash3_64(),\n transfer = [];\n const context = Object.create(null);\n let hasBitmap = false;\n\n for (const [key, val] of this.#storage) {\n const serialized =\n val instanceof AnnotationEditor\n ? val.serialize(/* isForCopying = */ false, context)\n : val;\n if (serialized) {\n map.set(key, serialized);\n\n hash.update(`${key}:${JSON.stringify(serialized)}`);\n hasBitmap ||= !!serialized.bitmap;\n }\n }\n\n if (hasBitmap) {\n // We must transfer the bitmap data separately, since it can be changed\n // during serialization with SVG images.\n for (const value of map.values()) {\n if (value.bitmap) {\n transfer.push(value.bitmap);\n }\n }\n }\n\n return map.size > 0\n ? { map, hash: hash.hexdigest(), transfer }\n : SerializableEmpty;\n }\n\n get editorStats() {\n let stats = null;\n const typeToEditor = new Map();\n let numberOfEditedComments = 0;\n let numberOfDeletedComments = 0;\n for (const value of this.#storage.values()) {\n if (!(value instanceof AnnotationEditor)) {\n if (value.popup) {\n if (value.popup.deleted) {\n numberOfDeletedComments += 1;\n } else {\n numberOfEditedComments += 1;\n }\n }\n continue;\n }\n if (value.isCommentDeleted) {\n numberOfDeletedComments += 1;\n } else if (value.hasEditedComment) {\n numberOfEditedComments += 1;\n }\n const editorStats = value.telemetryFinalData;\n if (!editorStats) {\n continue;\n }\n const { type } = editorStats;\n if (!typeToEditor.has(type)) {\n typeToEditor.set(type, Object.getPrototypeOf(value).constructor);\n }\n stats ||= Object.create(null);\n const map = (stats[type] ||= new Map());\n for (const [key, val] of Object.entries(editorStats)) {\n if (key === \"type\") {\n continue;\n }\n let counters = map.get(key);\n if (!counters) {\n counters = new Map();\n map.set(key, counters);\n }\n const count = counters.get(val) ?? 0;\n counters.set(val, count + 1);\n }\n }\n if (numberOfDeletedComments > 0 || numberOfEditedComments > 0) {\n stats ||= Object.create(null);\n stats.comments = {\n deleted: numberOfDeletedComments,\n edited: numberOfEditedComments,\n };\n }\n if (!stats) {\n return null;\n }\n for (const [type, editor] of typeToEditor) {\n stats[type] = editor.computeTelemetryFinalData(stats[type]);\n }\n return stats;\n }\n\n resetModifiedIds() {\n this.#modifiedIds = null;\n }\n\n updateEditor(annotationId, data) {\n const value = this.#editorsMap?.get(annotationId);\n if (value) {\n value.updateFromAnnotationLayer(data);\n return true;\n }\n return false;\n }\n\n getEditor(annotationId) {\n return this.#editorsMap?.get(annotationId) || null;\n }\n\n /**\n * @returns {{ids: Set, hash: string}}\n */\n get modifiedIds() {\n if (this.#modifiedIds) {\n return this.#modifiedIds;\n }\n const ids = [];\n if (this.#editorsMap) {\n for (const value of this.#editorsMap.values()) {\n if (!value.serialize()) {\n continue;\n }\n ids.push(value.annotationElementId);\n }\n }\n return (this.#modifiedIds = {\n ids: new Set(ids),\n hash: ids.join(\",\"),\n });\n }\n\n [Symbol.iterator]() {\n return this.#storage.entries();\n }\n}\n\n/**\n * A special `AnnotationStorage` for use during printing, where the serializable\n * data is *frozen* upon initialization, to prevent scripting from modifying its\n * contents. (Necessary since printing is triggered synchronously in browsers.)\n */\nclass PrintAnnotationStorage extends AnnotationStorage {\n #serializable;\n\n constructor(parent) {\n super();\n const { map, hash, transfer } = parent.serializable;\n // Create a *copy* of the data, since Objects are passed by reference in JS.\n const clone = structuredClone(map, transfer ? { transfer } : null);\n\n this.#serializable = { map: clone, hash, transfer };\n }\n\n /**\n * @returns {PrintAnnotationStorage}\n */\n // eslint-disable-next-line getter-return\n get print() {\n unreachable(\"Should not call PrintAnnotationStorage.print\");\n }\n\n /**\n * PLEASE NOTE: Only intended for usage within the API itself.\n * @ignore\n */\n get serializable() {\n return this.#serializable;\n }\n\n get modifiedIds() {\n return shadow(this, \"modifiedIds\", {\n ids: new Set(),\n hash: \"\",\n });\n }\n}\n\nexport { AnnotationStorage, PrintAnnotationStorage, SerializableEmpty };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n assert,\n FeatureTest,\n isNodeJS,\n shadow,\n string32,\n toBase64Util,\n unreachable,\n warn,\n} from \"../shared/util.js\";\nimport { makePathFromDrawOPS } from \"./display_utils.js\";\n\nclass FontLoader {\n #systemFonts = new Set();\n\n constructor({\n ownerDocument = globalThis.document,\n styleElement = null, // For testing only.\n }) {\n this._document = ownerDocument;\n\n this.nativeFontFaces = new Set();\n this.styleElement =\n typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")\n ? styleElement\n : null;\n\n if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\n this.loadingRequests = [];\n this.loadTestFontId = 0;\n }\n }\n\n addNativeFontFace(nativeFontFace) {\n this.nativeFontFaces.add(nativeFontFace);\n this._document.fonts.add(nativeFontFace);\n }\n\n removeNativeFontFace(nativeFontFace) {\n this.nativeFontFaces.delete(nativeFontFace);\n this._document.fonts.delete(nativeFontFace);\n }\n\n insertRule(rule) {\n if (!this.styleElement) {\n this.styleElement = this._document.createElement(\"style\");\n this._document.documentElement\n .getElementsByTagName(\"head\")[0]\n .append(this.styleElement);\n }\n const styleSheet = this.styleElement.sheet;\n styleSheet.insertRule(rule, styleSheet.cssRules.length);\n }\n\n clear() {\n for (const nativeFontFace of this.nativeFontFaces) {\n this._document.fonts.delete(nativeFontFace);\n }\n this.nativeFontFaces.clear();\n this.#systemFonts.clear();\n\n if (this.styleElement) {\n // Note: ChildNode.remove doesn't throw if the parentNode is undefined.\n this.styleElement.remove();\n this.styleElement = null;\n }\n }\n\n async loadSystemFont({\n systemFontInfo: info,\n disableFontFace,\n _inspectFont,\n }) {\n if (!info || this.#systemFonts.has(info.loadedName)) {\n return;\n }\n assert(\n !disableFontFace,\n \"loadSystemFont shouldn't be called when `disableFontFace` is set.\"\n );\n\n if (this.isFontLoadingAPISupported) {\n const { loadedName, src, style } = info;\n const fontFace = new FontFace(loadedName, src, style);\n this.addNativeFontFace(fontFace);\n try {\n await fontFace.load();\n this.#systemFonts.add(loadedName);\n _inspectFont?.(info);\n } catch {\n warn(\n `Cannot load system font: ${info.baseFontName}, installing it could help to improve PDF rendering.`\n );\n\n this.removeNativeFontFace(fontFace);\n }\n return;\n }\n\n unreachable(\n \"Not implemented: loadSystemFont without the Font Loading API.\"\n );\n }\n\n async bind(font) {\n // Add the font to the DOM only once; skip if the font is already loaded.\n if (font.attached || (font.missingFile && !font.systemFontInfo)) {\n return;\n }\n font.attached = true;\n\n if (font.systemFontInfo) {\n await this.loadSystemFont(font);\n return;\n }\n\n if (this.isFontLoadingAPISupported) {\n const nativeFontFace = font.createNativeFontFace();\n if (nativeFontFace) {\n this.addNativeFontFace(nativeFontFace);\n try {\n await nativeFontFace.loaded;\n } catch (ex) {\n warn(`Failed to load font '${nativeFontFace.family}': '${ex}'.`);\n\n // When font loading failed, fall back to the built-in font renderer.\n font.disableFontFace = true;\n throw ex;\n }\n }\n return; // The font was, asynchronously, loaded.\n }\n\n // !this.isFontLoadingAPISupported\n const rule = font.createFontFaceRule();\n if (rule) {\n this.insertRule(rule);\n\n if (this.isSyncFontLoadingSupported) {\n return; // The font was, synchronously, loaded.\n }\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: async font loading\");\n }\n await new Promise(resolve => {\n const request = this._queueLoadingCallback(resolve);\n this._prepareFontLoadEvent(font, request);\n });\n // The font was, asynchronously, loaded.\n }\n }\n\n get isFontLoadingAPISupported() {\n const hasFonts = !!this._document?.fonts;\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n return shadow(\n this,\n \"isFontLoadingAPISupported\",\n hasFonts && !this.styleElement\n );\n }\n return shadow(this, \"isFontLoadingAPISupported\", hasFonts);\n }\n\n get isSyncFontLoadingSupported() {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n return shadow(this, \"isSyncFontLoadingSupported\", true);\n }\n\n // Node.js - we can pretend that sync font loading is supported.\n // Firefox, from version 14, supports synchronous font loading.\n return shadow(\n this,\n \"isSyncFontLoadingSupported\",\n (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"CHROME\")) &&\n (isNodeJS || FeatureTest.platform.isFirefox)\n );\n }\n\n _queueLoadingCallback(callback) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: _queueLoadingCallback\");\n }\n\n function completeRequest() {\n assert(!request.done, \"completeRequest() cannot be called twice.\");\n request.done = true;\n\n // Sending all completed requests in order of how they were queued.\n while (loadingRequests.length > 0 && loadingRequests[0].done) {\n const otherRequest = loadingRequests.shift();\n setTimeout(otherRequest.callback, 0);\n }\n }\n\n const { loadingRequests } = this;\n const request = {\n done: false,\n complete: completeRequest,\n callback,\n };\n loadingRequests.push(request);\n return request;\n }\n\n get _loadTestFont() {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: _loadTestFont\");\n }\n\n // This is a CFF font with 1 glyph for '.' that fills its entire width\n // and height.\n const testFont = atob(\n \"T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQA\" +\n \"FQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAA\" +\n \"ALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgA\" +\n \"AAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1\" +\n \"AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD\" +\n \"6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACM\" +\n \"AooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4D\" +\n \"IP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAA\" +\n \"AAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUA\" +\n \"AQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgAB\" +\n \"AAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABY\" +\n \"AAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAA\" +\n \"AC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" +\n \"AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" +\n \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" +\n \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" +\n \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" +\n \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAA\" +\n \"AAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQAC\" +\n \"AQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3\" +\n \"Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTj\" +\n \"FQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA==\"\n );\n return shadow(this, \"_loadTestFont\", testFont);\n }\n\n _prepareFontLoadEvent(font, request) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: _prepareFontLoadEvent\");\n }\n\n /** Hack begin */\n // There's currently no event when a font has finished downloading so the\n // following code is a dirty hack to 'guess' when a font is ready.\n // It's assumed fonts are loaded in order, so add a known test font after\n // the desired fonts and then test for the loading of that test font.\n\n function int32(data, offset) {\n return (\n (data.charCodeAt(offset) << 24) |\n (data.charCodeAt(offset + 1) << 16) |\n (data.charCodeAt(offset + 2) << 8) |\n (data.charCodeAt(offset + 3) & 0xff)\n );\n }\n function spliceString(s, offset, remove, insert) {\n const chunk1 = s.substring(0, offset);\n const chunk2 = s.substring(offset + remove);\n return chunk1 + insert + chunk2;\n }\n let i, ii;\n\n // The temporary canvas is used to determine if fonts are loaded.\n const canvas = this._document.createElement(\"canvas\");\n canvas.width = 1;\n canvas.height = 1;\n const ctx = canvas.getContext(\"2d\");\n\n let called = 0;\n function isFontReady(name, callback) {\n // With setTimeout clamping this gives the font ~100ms to load.\n if (++called > 30) {\n warn(\"Load test font never loaded.\");\n callback();\n return;\n }\n ctx.font = \"30px \" + name;\n ctx.fillText(\".\", 0, 20);\n const imageData = ctx.getImageData(0, 0, 1, 1);\n if (imageData.data[3] > 0) {\n callback();\n return;\n }\n setTimeout(isFontReady.bind(null, name, callback));\n }\n\n const loadTestFontId = `lt${Date.now()}${this.loadTestFontId++}`;\n // Chromium seems to cache fonts based on a hash of the actual font data,\n // so the font must be modified for each load test else it will appear to\n // be loaded already.\n // TODO: This could maybe be made faster by avoiding the btoa of the full\n // font by splitting it in chunks before hand and padding the font id.\n let data = this._loadTestFont;\n const COMMENT_OFFSET = 976; // has to be on 4 byte boundary (for checksum)\n data = spliceString(\n data,\n COMMENT_OFFSET,\n loadTestFontId.length,\n loadTestFontId\n );\n // CFF checksum is important for IE, adjusting it\n const CFF_CHECKSUM_OFFSET = 16;\n const XXXX_VALUE = 0x58585858; // the \"comment\" filled with 'X'\n let checksum = int32(data, CFF_CHECKSUM_OFFSET);\n for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) {\n checksum = (checksum - XXXX_VALUE + int32(loadTestFontId, i)) | 0;\n }\n if (i < loadTestFontId.length) {\n // align to 4 bytes boundary\n checksum = (checksum - XXXX_VALUE + int32(loadTestFontId + \"XXX\", i)) | 0;\n }\n data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, string32(checksum));\n\n const url = `url(data:font/opentype;base64,${btoa(data)});`;\n const rule = `@font-face {font-family:\"${loadTestFontId}\";src:${url}}`;\n this.insertRule(rule);\n\n const div = this._document.createElement(\"div\");\n div.style.visibility = \"hidden\";\n div.style.width = div.style.height = \"10px\";\n div.style.position = \"absolute\";\n div.style.top = div.style.left = \"0px\";\n\n for (const name of [font.loadedName, loadTestFontId]) {\n const span = this._document.createElement(\"span\");\n span.textContent = \"Hi\";\n span.style.fontFamily = name;\n div.append(span);\n }\n this._document.body.append(div);\n\n isFontReady(loadTestFontId, () => {\n div.remove();\n request.complete();\n });\n /** Hack end */\n }\n}\n\nclass FontFaceObject {\n #fontData;\n\n constructor(translatedData, inspectFont = null, extra, charProcOperatorList) {\n this.compiledGlyphs = Object.create(null);\n this.#fontData = translatedData;\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n if (typeof this.disableFontFace !== \"boolean\") {\n unreachable(\"disableFontFace must be available.\");\n }\n if (typeof this.fontExtraProperties !== \"boolean\") {\n unreachable(\"fontExtraProperties must be available.\");\n }\n }\n this._inspectFont = inspectFont;\n if (extra) {\n Object.assign(this, extra);\n }\n if (charProcOperatorList) {\n this.charProcOperatorList = charProcOperatorList;\n }\n }\n\n createNativeFontFace() {\n if (!this.data || this.disableFontFace) {\n return null;\n }\n let nativeFontFace;\n if (!this.cssFontInfo) {\n nativeFontFace = new FontFace(this.loadedName, this.data, {});\n } else {\n const css = {\n weight: this.cssFontInfo.fontWeight,\n };\n if (this.cssFontInfo.italicAngle) {\n css.style = `oblique ${this.cssFontInfo.italicAngle}deg`;\n }\n nativeFontFace = new FontFace(\n this.cssFontInfo.fontFamily,\n this.data,\n css\n );\n }\n\n this._inspectFont?.(this);\n return nativeFontFace;\n }\n\n createFontFaceRule() {\n if (!this.data || this.disableFontFace) {\n return null;\n }\n // Add the @font-face rule to the document.\n const url = `url(data:${this.mimetype};base64,${toBase64Util(this.data)});`;\n let rule;\n if (!this.cssFontInfo) {\n rule = `@font-face {font-family:\"${this.loadedName}\";src:${url}}`;\n } else {\n let css = `font-weight: ${this.cssFontInfo.fontWeight};`;\n if (this.cssFontInfo.italicAngle) {\n css += `font-style: oblique ${this.cssFontInfo.italicAngle}deg;`;\n }\n rule = `@font-face {font-family:\"${this.cssFontInfo.fontFamily}\";${css}src:${url}}`;\n }\n\n this._inspectFont?.(this, url);\n return rule;\n }\n\n getPathGenerator(objs, character) {\n if (this.compiledGlyphs[character] !== undefined) {\n return this.compiledGlyphs[character];\n }\n\n const objId = this.loadedName + \"_path_\" + character;\n let cmds;\n try {\n cmds = objs.get(objId);\n } catch (ex) {\n warn(`getPathGenerator - ignoring character: \"${ex}\".`);\n }\n const path = makePathFromDrawOPS(cmds);\n\n if (!this.fontExtraProperties) {\n // Remove the raw path-string, since we don't need it anymore.\n objs.delete(objId);\n }\n return (this.compiledGlyphs[character] = path);\n }\n\n get black() {\n return this.#fontData.black;\n }\n\n get bold() {\n return this.#fontData.bold;\n }\n\n get disableFontFace() {\n return this.#fontData.disableFontFace ?? false;\n }\n\n get fontExtraProperties() {\n return this.#fontData.fontExtraProperties ?? false;\n }\n\n get isInvalidPDFjsFont() {\n return this.#fontData.isInvalidPDFjsFont;\n }\n\n get isType3Font() {\n return this.#fontData.isType3Font;\n }\n\n get italic() {\n return this.#fontData.italic;\n }\n\n get missingFile() {\n return this.#fontData.missingFile;\n }\n\n get remeasure() {\n return this.#fontData.remeasure;\n }\n\n get vertical() {\n return this.#fontData.vertical;\n }\n\n get ascent() {\n return this.#fontData.ascent;\n }\n\n get defaultWidth() {\n return this.#fontData.defaultWidth;\n }\n\n get descent() {\n return this.#fontData.descent;\n }\n\n get bbox() {\n return this.#fontData.bbox;\n }\n\n get fontMatrix() {\n return this.#fontData.fontMatrix;\n }\n\n get fallbackName() {\n return this.#fontData.fallbackName;\n }\n\n get loadedName() {\n return this.#fontData.loadedName;\n }\n\n get mimetype() {\n return this.#fontData.mimetype;\n }\n\n get name() {\n return this.#fontData.name;\n }\n\n get data() {\n return this.#fontData.data;\n }\n\n clearData() {\n this.#fontData.clearData();\n }\n\n get cssFontInfo() {\n return this.#fontData.cssFontInfo;\n }\n\n get systemFontInfo() {\n return this.#fontData.systemFontInfo;\n }\n\n get defaultVMetrics() {\n return this.#fontData.defaultVMetrics;\n }\n}\n\nexport { FontFaceObject, FontLoader };\n","/* Copyright 2025 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert, MeshFigureType } from \"./util.js\";\n\nclass CssFontInfo {\n #buffer;\n\n #view;\n\n #decoder;\n\n static strings = [\"fontFamily\", \"fontWeight\", \"italicAngle\"];\n\n static write(info) {\n const encoder = new TextEncoder();\n const encodedStrings = {};\n let stringsLength = 0;\n for (const prop of CssFontInfo.strings) {\n const encoded = encoder.encode(info[prop]);\n encodedStrings[prop] = encoded;\n stringsLength += 4 + encoded.length;\n }\n\n const buffer = new ArrayBuffer(stringsLength);\n const data = new Uint8Array(buffer);\n const view = new DataView(buffer);\n let offset = 0;\n\n for (const prop of CssFontInfo.strings) {\n const encoded = encodedStrings[prop];\n const length = encoded.length;\n view.setUint32(offset, length);\n data.set(encoded, offset + 4);\n offset += 4 + length;\n }\n assert(offset === buffer.byteLength, \"CssFontInfo.write: Buffer overflow\");\n return buffer;\n }\n\n constructor(buffer) {\n this.#buffer = buffer;\n this.#view = new DataView(this.#buffer);\n this.#decoder = new TextDecoder();\n }\n\n #readString(index) {\n assert(index < CssFontInfo.strings.length, \"Invalid string index\");\n let offset = 0;\n for (let i = 0; i < index; i++) {\n offset += this.#view.getUint32(offset) + 4;\n }\n const length = this.#view.getUint32(offset);\n return this.#decoder.decode(\n new Uint8Array(this.#buffer, offset + 4, length)\n );\n }\n\n get fontFamily() {\n return this.#readString(0);\n }\n\n get fontWeight() {\n return this.#readString(1);\n }\n\n get italicAngle() {\n return this.#readString(2);\n }\n}\n\nclass SystemFontInfo {\n #buffer;\n\n #view;\n\n #decoder;\n\n static strings = [\"css\", \"loadedName\", \"baseFontName\", \"src\"];\n\n static write(info) {\n const encoder = new TextEncoder();\n const encodedStrings = {};\n let stringsLength = 0;\n for (const prop of SystemFontInfo.strings) {\n const encoded = encoder.encode(info[prop]);\n encodedStrings[prop] = encoded;\n stringsLength += 4 + encoded.length;\n }\n stringsLength += 4;\n let encodedStyleStyle,\n encodedStyleWeight,\n lengthEstimate = 1 + stringsLength;\n if (info.style) {\n encodedStyleStyle = encoder.encode(info.style.style);\n encodedStyleWeight = encoder.encode(info.style.weight);\n lengthEstimate +=\n 4 + encodedStyleStyle.length + 4 + encodedStyleWeight.length;\n }\n\n const buffer = new ArrayBuffer(lengthEstimate);\n const data = new Uint8Array(buffer);\n const view = new DataView(buffer);\n let offset = 0;\n\n view.setUint8(offset++, info.guessFallback ? 1 : 0);\n view.setUint32(offset, 0);\n offset += 4;\n stringsLength = 0;\n for (const prop of SystemFontInfo.strings) {\n const encoded = encodedStrings[prop];\n const length = encoded.length;\n stringsLength += 4 + length;\n view.setUint32(offset, length);\n data.set(encoded, offset + 4);\n offset += 4 + length;\n }\n view.setUint32(offset - stringsLength - 4, stringsLength);\n\n if (info.style) {\n view.setUint32(offset, encodedStyleStyle.length);\n data.set(encodedStyleStyle, offset + 4);\n offset += 4 + encodedStyleStyle.length;\n view.setUint32(offset, encodedStyleWeight.length);\n data.set(encodedStyleWeight, offset + 4);\n offset += 4 + encodedStyleWeight.length;\n }\n assert(\n offset <= buffer.byteLength,\n \"SubstitionInfo.write: Buffer overflow\"\n );\n return buffer.transferToFixedLength(offset);\n }\n\n constructor(buffer) {\n this.#buffer = buffer;\n this.#view = new DataView(this.#buffer);\n this.#decoder = new TextDecoder();\n }\n\n get guessFallback() {\n return this.#view.getUint8(0) !== 0;\n }\n\n #readString(index) {\n assert(index < SystemFontInfo.strings.length, \"Invalid string index\");\n let offset = 5;\n for (let i = 0; i < index; i++) {\n offset += this.#view.getUint32(offset) + 4;\n }\n const length = this.#view.getUint32(offset);\n return this.#decoder.decode(\n new Uint8Array(this.#buffer, offset + 4, length)\n );\n }\n\n get css() {\n return this.#readString(0);\n }\n\n get loadedName() {\n return this.#readString(1);\n }\n\n get baseFontName() {\n return this.#readString(2);\n }\n\n get src() {\n return this.#readString(3);\n }\n\n get style() {\n let offset = 1;\n offset += 4 + this.#view.getUint32(offset);\n const styleLength = this.#view.getUint32(offset);\n const style = this.#decoder.decode(\n new Uint8Array(this.#buffer, offset + 4, styleLength)\n );\n offset += 4 + styleLength;\n const weightLength = this.#view.getUint32(offset);\n const weight = this.#decoder.decode(\n new Uint8Array(this.#buffer, offset + 4, weightLength)\n );\n return { style, weight };\n }\n}\n\nclass FontInfo {\n static bools = [\n \"black\",\n \"bold\",\n \"disableFontFace\",\n \"fontExtraProperties\",\n \"isInvalidPDFjsFont\",\n \"isType3Font\",\n \"italic\",\n \"missingFile\",\n \"remeasure\",\n \"vertical\",\n ];\n\n static numbers = [\"ascent\", \"defaultWidth\", \"descent\"];\n\n static strings = [\"fallbackName\", \"loadedName\", \"mimetype\", \"name\"];\n\n static #OFFSET_NUMBERS = Math.ceil((this.bools.length * 2) / 8);\n\n static #OFFSET_BBOX = this.#OFFSET_NUMBERS + this.numbers.length * 8;\n\n static #OFFSET_FONT_MATRIX = this.#OFFSET_BBOX + 1 + 2 * 4;\n\n static #OFFSET_DEFAULT_VMETRICS = this.#OFFSET_FONT_MATRIX + 1 + 8 * 6;\n\n static #OFFSET_STRINGS = this.#OFFSET_DEFAULT_VMETRICS + 1 + 2 * 3;\n\n #buffer;\n\n #decoder;\n\n #view;\n\n constructor({ data, extra }) {\n this.#buffer = data;\n this.#decoder = new TextDecoder();\n this.#view = new DataView(this.#buffer);\n if (extra) {\n Object.assign(this, extra);\n }\n }\n\n #readBoolean(index) {\n assert(index < FontInfo.bools.length, \"Invalid boolean index\");\n const byteOffset = Math.floor(index / 4);\n const bitOffset = (index * 2) % 8;\n const value = (this.#view.getUint8(byteOffset) >> bitOffset) & 0x03;\n return value === 0x00 ? undefined : value === 0x02;\n }\n\n get black() {\n return this.#readBoolean(0);\n }\n\n get bold() {\n return this.#readBoolean(1);\n }\n\n get disableFontFace() {\n return this.#readBoolean(2);\n }\n\n get fontExtraProperties() {\n return this.#readBoolean(3);\n }\n\n get isInvalidPDFjsFont() {\n return this.#readBoolean(4);\n }\n\n get isType3Font() {\n return this.#readBoolean(5);\n }\n\n get italic() {\n return this.#readBoolean(6);\n }\n\n get missingFile() {\n return this.#readBoolean(7);\n }\n\n get remeasure() {\n return this.#readBoolean(8);\n }\n\n get vertical() {\n return this.#readBoolean(9);\n }\n\n #readNumber(index) {\n assert(index < FontInfo.numbers.length, \"Invalid number index\");\n return this.#view.getFloat64(FontInfo.#OFFSET_NUMBERS + index * 8);\n }\n\n get ascent() {\n return this.#readNumber(0);\n }\n\n get defaultWidth() {\n return this.#readNumber(1);\n }\n\n get descent() {\n return this.#readNumber(2);\n }\n\n get bbox() {\n let offset = FontInfo.#OFFSET_BBOX;\n const numCoords = this.#view.getUint8(offset);\n if (numCoords === 0) {\n return undefined;\n }\n offset += 1;\n const bbox = [];\n for (let i = 0; i < 4; i++) {\n bbox.push(this.#view.getInt16(offset, true));\n offset += 2;\n }\n return bbox;\n }\n\n get fontMatrix() {\n let offset = FontInfo.#OFFSET_FONT_MATRIX;\n const numPoints = this.#view.getUint8(offset);\n if (numPoints === 0) {\n return undefined;\n }\n offset += 1;\n const fontMatrix = [];\n for (let i = 0; i < 6; i++) {\n fontMatrix.push(this.#view.getFloat64(offset, true));\n offset += 8;\n }\n return fontMatrix;\n }\n\n get defaultVMetrics() {\n let offset = FontInfo.#OFFSET_DEFAULT_VMETRICS;\n const numMetrics = this.#view.getUint8(offset);\n if (numMetrics === 0) {\n return undefined;\n }\n offset += 1;\n const defaultVMetrics = [];\n for (let i = 0; i < 3; i++) {\n defaultVMetrics.push(this.#view.getInt16(offset, true));\n offset += 2;\n }\n return defaultVMetrics;\n }\n\n #readString(index) {\n assert(index < FontInfo.strings.length, \"Invalid string index\");\n let offset = FontInfo.#OFFSET_STRINGS + 4;\n for (let i = 0; i < index; i++) {\n offset += this.#view.getUint32(offset) + 4;\n }\n const length = this.#view.getUint32(offset);\n const stringData = new Uint8Array(length);\n stringData.set(new Uint8Array(this.#buffer, offset + 4, length));\n return this.#decoder.decode(stringData);\n }\n\n get fallbackName() {\n return this.#readString(0);\n }\n\n get loadedName() {\n return this.#readString(1);\n }\n\n get mimetype() {\n return this.#readString(2);\n }\n\n get name() {\n return this.#readString(3);\n }\n\n get data() {\n let offset = FontInfo.#OFFSET_STRINGS;\n const stringsLength = this.#view.getUint32(offset);\n offset += 4 + stringsLength;\n const systemFontInfoLength = this.#view.getUint32(offset);\n offset += 4 + systemFontInfoLength;\n const cssFontInfoLength = this.#view.getUint32(offset);\n offset += 4 + cssFontInfoLength;\n const length = this.#view.getUint32(offset);\n if (length === 0) {\n return undefined;\n }\n return new Uint8Array(this.#buffer, offset + 4, length);\n }\n\n clearData() {\n let offset = FontInfo.#OFFSET_STRINGS;\n const stringsLength = this.#view.getUint32(offset);\n offset += 4 + stringsLength;\n const systemFontInfoLength = this.#view.getUint32(offset);\n offset += 4 + systemFontInfoLength;\n const cssFontInfoLength = this.#view.getUint32(offset);\n offset += 4 + cssFontInfoLength;\n const length = this.#view.getUint32(offset);\n const data = new Uint8Array(this.#buffer, offset + 4, length);\n data.fill(0);\n this.#view.setUint32(offset, 0);\n // this.#buffer.resize(offset);\n }\n\n get cssFontInfo() {\n let offset = FontInfo.#OFFSET_STRINGS;\n const stringsLength = this.#view.getUint32(offset);\n offset += 4 + stringsLength;\n const systemFontInfoLength = this.#view.getUint32(offset);\n offset += 4 + systemFontInfoLength;\n const cssFontInfoLength = this.#view.getUint32(offset);\n if (cssFontInfoLength === 0) {\n return null;\n }\n const cssFontInfoData = new Uint8Array(cssFontInfoLength);\n cssFontInfoData.set(\n new Uint8Array(this.#buffer, offset + 4, cssFontInfoLength)\n );\n return new CssFontInfo(cssFontInfoData.buffer);\n }\n\n get systemFontInfo() {\n let offset = FontInfo.#OFFSET_STRINGS;\n const stringsLength = this.#view.getUint32(offset);\n offset += 4 + stringsLength;\n const systemFontInfoLength = this.#view.getUint32(offset);\n if (systemFontInfoLength === 0) {\n return null;\n }\n const systemFontInfoData = new Uint8Array(systemFontInfoLength);\n systemFontInfoData.set(\n new Uint8Array(this.#buffer, offset + 4, systemFontInfoLength)\n );\n return new SystemFontInfo(systemFontInfoData.buffer);\n }\n\n static write(font) {\n const systemFontInfoBuffer = font.systemFontInfo\n ? SystemFontInfo.write(font.systemFontInfo)\n : null;\n const cssFontInfoBuffer = font.cssFontInfo\n ? CssFontInfo.write(font.cssFontInfo)\n : null;\n\n const encoder = new TextEncoder();\n const encodedStrings = {};\n let stringsLength = 0;\n for (const prop of FontInfo.strings) {\n encodedStrings[prop] = encoder.encode(font[prop]);\n stringsLength += 4 + encodedStrings[prop].length;\n }\n\n const lengthEstimate =\n FontInfo.#OFFSET_STRINGS +\n 4 +\n stringsLength +\n 4 +\n (systemFontInfoBuffer ? systemFontInfoBuffer.byteLength : 0) +\n 4 +\n (cssFontInfoBuffer ? cssFontInfoBuffer.byteLength : 0) +\n 4 +\n (font.data ? font.data.length : 0);\n\n const buffer = new ArrayBuffer(lengthEstimate);\n const data = new Uint8Array(buffer);\n const view = new DataView(buffer);\n let offset = 0;\n\n const numBools = FontInfo.bools.length;\n let boolByte = 0,\n boolBit = 0;\n for (let i = 0; i < numBools; i++) {\n const value = font[FontInfo.bools[i]];\n // eslint-disable-next-line no-nested-ternary\n const bits = value === undefined ? 0x00 : value ? 0x02 : 0x01;\n boolByte |= bits << boolBit;\n boolBit += 2;\n if (boolBit === 8 || i === numBools - 1) {\n view.setUint8(offset++, boolByte);\n boolByte = 0;\n boolBit = 0;\n }\n }\n assert(\n offset === FontInfo.#OFFSET_NUMBERS,\n \"FontInfo.write: Boolean properties offset mismatch\"\n );\n\n for (const prop of FontInfo.numbers) {\n view.setFloat64(offset, font[prop]);\n offset += 8;\n }\n assert(\n offset === FontInfo.#OFFSET_BBOX,\n \"FontInfo.write: Number properties offset mismatch\"\n );\n\n if (font.bbox) {\n view.setUint8(offset++, 4);\n for (const coord of font.bbox) {\n view.setInt16(offset, coord, true);\n offset += 2;\n }\n } else {\n view.setUint8(offset++, 0);\n offset += 2 * 4; // TODO: optimize this padding away\n }\n\n assert(\n offset === FontInfo.#OFFSET_FONT_MATRIX,\n \"FontInfo.write: BBox properties offset mismatch\"\n );\n\n if (font.fontMatrix) {\n view.setUint8(offset++, 6);\n for (const point of font.fontMatrix) {\n view.setFloat64(offset, point, true);\n offset += 8;\n }\n } else {\n view.setUint8(offset++, 0);\n offset += 8 * 6; // TODO: optimize this padding away\n }\n\n assert(\n offset === FontInfo.#OFFSET_DEFAULT_VMETRICS,\n \"FontInfo.write: FontMatrix properties offset mismatch\"\n );\n\n if (font.defaultVMetrics) {\n view.setUint8(offset++, 1);\n for (const metric of font.defaultVMetrics) {\n view.setInt16(offset, metric, true);\n offset += 2;\n }\n } else {\n view.setUint8(offset++, 0);\n offset += 3 * 2; // TODO: optimize this padding away\n }\n\n assert(\n offset === FontInfo.#OFFSET_STRINGS,\n \"FontInfo.write: DefaultVMetrics properties offset mismatch\"\n );\n\n view.setUint32(FontInfo.#OFFSET_STRINGS, 0);\n offset += 4;\n for (const prop of FontInfo.strings) {\n const encoded = encodedStrings[prop];\n const length = encoded.length;\n view.setUint32(offset, length);\n data.set(encoded, offset + 4);\n offset += 4 + length;\n }\n view.setUint32(\n FontInfo.#OFFSET_STRINGS,\n offset - FontInfo.#OFFSET_STRINGS - 4\n );\n\n if (!systemFontInfoBuffer) {\n view.setUint32(offset, 0);\n offset += 4;\n } else {\n const length = systemFontInfoBuffer.byteLength;\n view.setUint32(offset, length);\n assert(\n offset + 4 + length <= buffer.byteLength,\n \"FontInfo.write: Buffer overflow at systemFontInfo\"\n );\n data.set(new Uint8Array(systemFontInfoBuffer), offset + 4);\n offset += 4 + length;\n }\n\n if (!cssFontInfoBuffer) {\n view.setUint32(offset, 0);\n offset += 4;\n } else {\n const length = cssFontInfoBuffer.byteLength;\n view.setUint32(offset, length);\n assert(\n offset + 4 + length <= buffer.byteLength,\n \"FontInfo.write: Buffer overflow at cssFontInfo\"\n );\n data.set(new Uint8Array(cssFontInfoBuffer), offset + 4);\n offset += 4 + length;\n }\n\n if (font.data === undefined) {\n view.setUint32(offset, 0);\n offset += 4;\n } else {\n view.setUint32(offset, font.data.length);\n data.set(font.data, offset + 4);\n offset += 4 + font.data.length;\n }\n\n assert(offset <= buffer.byteLength, \"FontInfo.write: Buffer overflow\");\n return buffer.transferToFixedLength(offset);\n }\n}\n\nclass PatternInfo {\n static #KIND = 0; // 1=axial, 2=radial, 3=mesh\n\n static #HAS_BBOX = 1; // 0/1\n\n static #HAS_BACKGROUND = 2; // 0/1 (background for mesh patterns)\n\n static #SHADING_TYPE = 3; // shadingType (only for mesh patterns)\n\n static #N_COORD = 4; // number of coordinate pairs\n\n static #N_COLOR = 8; // number of rgb triplets\n\n static #N_STOP = 12; // number of gradient stops\n\n static #N_FIGURES = 16; // number of figures\n\n constructor(buffer) {\n this.buffer = buffer;\n this.view = new DataView(buffer);\n this.data = new Uint8Array(buffer);\n }\n\n static write(ir) {\n let kind,\n bbox = null,\n coords = [],\n colors = [],\n colorStops = [],\n figures = [],\n shadingType = null, // only needed for mesh patterns\n background = null; // background for mesh patterns\n\n switch (ir[0]) {\n case \"RadialAxial\":\n kind = ir[1] === \"axial\" ? 1 : 2;\n bbox = ir[2];\n colorStops = ir[3];\n if (kind === 1) {\n coords.push(...ir[4], ...ir[5]);\n } else {\n coords.push(ir[4][0], ir[4][1], ir[6], ir[5][0], ir[5][1], ir[7]);\n }\n break;\n case \"Mesh\":\n kind = 3;\n shadingType = ir[1];\n coords = ir[2];\n colors = ir[3];\n figures = ir[4] || [];\n bbox = ir[6];\n background = ir[7];\n break;\n default:\n throw new Error(`Unsupported pattern type: ${ir[0]}`);\n }\n\n const nCoord = Math.floor(coords.length / 2);\n const nColor = Math.floor(colors.length / 3);\n const nStop = colorStops.length;\n const nFigures = figures.length;\n\n let figuresSize = 0;\n for (const figure of figures) {\n figuresSize += 1;\n figuresSize = Math.ceil(figuresSize / 4) * 4; // Ensure 4-byte alignment\n figuresSize += 4 + figure.coords.length * 4;\n figuresSize += 4 + figure.colors.length * 4;\n if (figure.verticesPerRow !== undefined) {\n figuresSize += 4;\n }\n }\n\n const byteLen =\n 20 +\n nCoord * 8 +\n nColor * 3 +\n nStop * 8 +\n (bbox ? 16 : 0) +\n (background ? 3 : 0) +\n figuresSize;\n const buffer = new ArrayBuffer(byteLen);\n const dataView = new DataView(buffer);\n const u8data = new Uint8Array(buffer);\n\n dataView.setUint8(PatternInfo.#KIND, kind);\n dataView.setUint8(PatternInfo.#HAS_BBOX, bbox ? 1 : 0);\n dataView.setUint8(PatternInfo.#HAS_BACKGROUND, background ? 1 : 0);\n dataView.setUint8(PatternInfo.#SHADING_TYPE, shadingType); // Only for mesh pattern, null otherwise\n dataView.setUint32(PatternInfo.#N_COORD, nCoord, true);\n dataView.setUint32(PatternInfo.#N_COLOR, nColor, true);\n dataView.setUint32(PatternInfo.#N_STOP, nStop, true);\n dataView.setUint32(PatternInfo.#N_FIGURES, nFigures, true);\n\n let offset = 20;\n const coordsView = new Float32Array(buffer, offset, nCoord * 2);\n coordsView.set(coords);\n offset += nCoord * 8;\n\n u8data.set(colors, offset);\n offset += nColor * 3;\n\n for (const [pos, hex] of colorStops) {\n dataView.setFloat32(offset, pos, true);\n offset += 4;\n dataView.setUint32(offset, parseInt(hex.slice(1), 16), true);\n offset += 4;\n }\n if (bbox) {\n for (const v of bbox) {\n dataView.setFloat32(offset, v, true);\n offset += 4;\n }\n }\n\n if (background) {\n u8data.set(background, offset);\n offset += 3;\n }\n\n for (let i = 0; i < figures.length; i++) {\n const figure = figures[i];\n dataView.setUint8(offset, figure.type);\n offset += 1;\n // Ensure 4-byte alignment\n offset = Math.ceil(offset / 4) * 4;\n dataView.setUint32(offset, figure.coords.length, true);\n offset += 4;\n const figureCoordsView = new Int32Array(\n buffer,\n offset,\n figure.coords.length\n );\n figureCoordsView.set(figure.coords);\n offset += figure.coords.length * 4;\n dataView.setUint32(offset, figure.colors.length, true);\n offset += 4;\n const colorsView = new Int32Array(buffer, offset, figure.colors.length);\n colorsView.set(figure.colors);\n offset += figure.colors.length * 4;\n\n if (figure.verticesPerRow !== undefined) {\n dataView.setUint32(offset, figure.verticesPerRow, true);\n offset += 4;\n }\n }\n return buffer;\n }\n\n getIR() {\n const dataView = this.view;\n const kind = this.data[PatternInfo.#KIND];\n const hasBBox = !!this.data[PatternInfo.#HAS_BBOX];\n const hasBackground = !!this.data[PatternInfo.#HAS_BACKGROUND];\n const nCoord = dataView.getUint32(PatternInfo.#N_COORD, true);\n const nColor = dataView.getUint32(PatternInfo.#N_COLOR, true);\n const nStop = dataView.getUint32(PatternInfo.#N_STOP, true);\n const nFigures = dataView.getUint32(PatternInfo.#N_FIGURES, true);\n\n let offset = 20;\n const coords = new Float32Array(this.buffer, offset, nCoord * 2);\n offset += nCoord * 8;\n const colors = new Uint8Array(this.buffer, offset, nColor * 3);\n offset += nColor * 3;\n const stops = [];\n for (let i = 0; i < nStop; ++i) {\n const p = dataView.getFloat32(offset, true);\n offset += 4;\n const rgb = dataView.getUint32(offset, true);\n offset += 4;\n stops.push([p, `#${rgb.toString(16).padStart(6, \"0\")}`]);\n }\n let bbox = null;\n if (hasBBox) {\n bbox = [];\n for (let i = 0; i < 4; ++i) {\n bbox.push(dataView.getFloat32(offset, true));\n offset += 4;\n }\n }\n\n let background = null;\n if (hasBackground) {\n background = new Uint8Array(this.buffer, offset, 3);\n offset += 3;\n }\n\n const figures = [];\n for (let i = 0; i < nFigures; ++i) {\n const type = dataView.getUint8(offset);\n offset += 1;\n // Ensure 4-byte alignment\n offset = Math.ceil(offset / 4) * 4;\n\n const coordsLength = dataView.getUint32(offset, true);\n offset += 4;\n const figureCoords = new Int32Array(this.buffer, offset, coordsLength);\n offset += coordsLength * 4;\n\n const colorsLength = dataView.getUint32(offset, true);\n offset += 4;\n const figureColors = new Int32Array(this.buffer, offset, colorsLength);\n offset += colorsLength * 4;\n\n const figure = {\n type,\n coords: figureCoords,\n colors: figureColors,\n };\n\n if (type === MeshFigureType.LATTICE) {\n figure.verticesPerRow = dataView.getUint32(offset, true);\n offset += 4;\n }\n\n figures.push(figure);\n }\n\n if (kind === 1) {\n // axial\n return [\n \"RadialAxial\",\n \"axial\",\n bbox,\n stops,\n Array.from(coords.slice(0, 2)),\n Array.from(coords.slice(2, 4)),\n null,\n null,\n ];\n }\n if (kind === 2) {\n return [\n \"RadialAxial\",\n \"radial\",\n bbox,\n stops,\n [coords[0], coords[1]],\n [coords[3], coords[4]],\n coords[2],\n coords[5],\n ];\n }\n if (kind === 3) {\n const shadingType = this.data[PatternInfo.#SHADING_TYPE];\n let bounds = null;\n if (coords.length > 0) {\n let minX = coords[0],\n maxX = coords[0];\n let minY = coords[1],\n maxY = coords[1];\n for (let i = 0; i < coords.length; i += 2) {\n const x = coords[i],\n y = coords[i + 1];\n minX = minX > x ? x : minX;\n minY = minY > y ? y : minY;\n maxX = maxX < x ? x : maxX;\n maxY = maxY < y ? y : maxY;\n }\n bounds = [minX, minY, maxX, maxY];\n }\n return [\n \"Mesh\",\n shadingType,\n coords,\n colors,\n figures,\n bounds,\n bbox,\n background,\n ];\n }\n throw new Error(`Unsupported pattern kind: ${kind}`);\n }\n}\nexport { CssFontInfo, FontInfo, PatternInfo, SystemFontInfo };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n _isValidExplicitDest,\n isNodeJS,\n stringToBytes,\n warn,\n} from \"../shared/util.js\";\n\nfunction getUrlProp(val) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n return null; // The 'url' is unused with `PDFDataRangeTransport`.\n }\n if (val instanceof URL) {\n return val.href;\n }\n if (typeof val === \"string\") {\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"GENERIC\") &&\n isNodeJS\n ) {\n return val; // Use the url as-is in Node.js environments.\n }\n\n // The full path is required in the 'url' field.\n const url = URL.parse(val, window.location);\n if (url) {\n return url.href;\n }\n }\n throw new Error(\n \"Invalid PDF url data: \" +\n \"either string or URL-object is expected in the url property.\"\n );\n}\n\nfunction getDataProp(val) {\n // Converting string or array-like data to Uint8Array.\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"GENERIC\") &&\n isNodeJS &&\n typeof Buffer !== \"undefined\" && // eslint-disable-line no-undef\n val instanceof Buffer // eslint-disable-line no-undef\n ) {\n throw new Error(\n \"Please provide binary data as `Uint8Array`, rather than `Buffer`.\"\n );\n }\n if (val instanceof Uint8Array && val.byteLength === val.buffer.byteLength) {\n // Use the data as-is when it's already a Uint8Array that completely\n // \"utilizes\" its underlying ArrayBuffer, to prevent any possible\n // issues when transferring it to the worker-thread.\n return val;\n }\n if (typeof val === \"string\") {\n return stringToBytes(val);\n }\n if (\n val instanceof ArrayBuffer ||\n ArrayBuffer.isView(val) ||\n (typeof val === \"object\" && !isNaN(val?.length))\n ) {\n return new Uint8Array(val);\n }\n throw new Error(\n \"Invalid PDF binary data: either TypedArray, \" +\n \"string, or array-like object is expected in the data property.\"\n );\n}\n\nfunction getFactoryUrlProp(val) {\n if (typeof val !== \"string\") {\n return null;\n }\n if (val.endsWith(\"/\")) {\n return val;\n }\n throw new Error(`Invalid factory url: \"${val}\" must include trailing slash.`);\n}\n\nconst isRefProxy = v =>\n typeof v === \"object\" &&\n Number.isInteger(v?.num) &&\n v.num >= 0 &&\n Number.isInteger(v?.gen) &&\n v.gen >= 0;\n\nconst isNameProxy = v => typeof v === \"object\" && typeof v?.name === \"string\";\n\nconst isValidExplicitDest = _isValidExplicitDest.bind(\n null,\n /* validRef = */ isRefProxy,\n /* validName = */ isNameProxy\n);\n\nclass LoopbackPort {\n #listeners = new Map();\n\n #deferred = Promise.resolve();\n\n postMessage(obj, transfer) {\n const event = {\n data: structuredClone(obj, transfer ? { transfer } : null),\n };\n\n this.#deferred.then(() => {\n for (const [listener] of this.#listeners) {\n listener.call(this, event);\n }\n });\n }\n\n addEventListener(name, listener, options = null) {\n let rmAbort = null;\n if (options?.signal instanceof AbortSignal) {\n const { signal } = options;\n if (signal.aborted) {\n warn(\"LoopbackPort - cannot use an `aborted` signal.\");\n return;\n }\n const onAbort = () => this.removeEventListener(name, listener);\n rmAbort = () => signal.removeEventListener(\"abort\", onAbort);\n\n signal.addEventListener(\"abort\", onAbort);\n }\n this.#listeners.set(listener, rmAbort);\n }\n\n removeEventListener(name, listener) {\n const rmAbort = this.#listeners.get(listener);\n rmAbort?.();\n\n this.#listeners.delete(listener);\n }\n\n terminate() {\n for (const [, rmAbort] of this.#listeners) {\n rmAbort?.();\n }\n this.#listeners.clear();\n }\n}\n\nexport {\n getDataProp,\n getFactoryUrlProp,\n getUrlProp,\n isNameProxy,\n isRefProxy,\n isValidExplicitDest,\n LoopbackPort,\n};\n","/* Copyright 2018 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n AbortException,\n assert,\n InvalidPDFException,\n PasswordException,\n ResponseException,\n UnknownErrorException,\n unreachable,\n} from \"./util.js\";\n\nconst CallbackKind = {\n DATA: 1,\n ERROR: 2,\n};\n\nconst StreamKind = {\n CANCEL: 1,\n CANCEL_COMPLETE: 2,\n CLOSE: 3,\n ENQUEUE: 4,\n ERROR: 5,\n PULL: 6,\n PULL_COMPLETE: 7,\n START_COMPLETE: 8,\n};\n\nfunction onFn() {}\n\nfunction wrapReason(ex) {\n if (\n ex instanceof AbortException ||\n ex instanceof InvalidPDFException ||\n ex instanceof PasswordException ||\n ex instanceof ResponseException ||\n ex instanceof UnknownErrorException\n ) {\n // Avoid re-creating the exception when its type is already correct.\n return ex;\n }\n\n if (!(ex instanceof Error || (typeof ex === \"object\" && ex !== null))) {\n unreachable(\n 'wrapReason: Expected \"reason\" to be a (possibly cloned) Error.'\n );\n }\n switch (ex.name) {\n case \"AbortException\":\n return new AbortException(ex.message);\n case \"InvalidPDFException\":\n return new InvalidPDFException(ex.message);\n case \"PasswordException\":\n return new PasswordException(ex.message, ex.code);\n case \"ResponseException\":\n return new ResponseException(ex.message, ex.status, ex.missing);\n case \"UnknownErrorException\":\n return new UnknownErrorException(ex.message, ex.details);\n }\n return new UnknownErrorException(ex.message, ex.toString());\n}\n\nclass MessageHandler {\n #messageAC = new AbortController();\n\n constructor(sourceName, targetName, comObj) {\n this.sourceName = sourceName;\n this.targetName = targetName;\n this.comObj = comObj;\n this.callbackId = 1;\n this.streamId = 1;\n this.streamSinks = Object.create(null);\n this.streamControllers = Object.create(null);\n this.callbackCapabilities = Object.create(null);\n this.actionHandler = Object.create(null);\n\n comObj.addEventListener(\"message\", this.#onMessage.bind(this), {\n signal: this.#messageAC.signal,\n });\n }\n\n #onMessage({ data }) {\n if (data.targetName !== this.sourceName) {\n return;\n }\n if (data.stream) {\n this.#processStreamMessage(data);\n return;\n }\n if (data.callback) {\n const callbackId = data.callbackId;\n const capability = this.callbackCapabilities[callbackId];\n if (!capability) {\n throw new Error(`Cannot resolve callback ${callbackId}`);\n }\n delete this.callbackCapabilities[callbackId];\n\n if (data.callback === CallbackKind.DATA) {\n capability.resolve(data.data);\n } else if (data.callback === CallbackKind.ERROR) {\n capability.reject(wrapReason(data.reason));\n } else {\n throw new Error(\"Unexpected callback case\");\n }\n return;\n }\n const action = this.actionHandler[data.action];\n if (!action) {\n throw new Error(`Unknown action from worker: ${data.action}`);\n }\n if (data.callbackId) {\n const sourceName = this.sourceName,\n targetName = data.sourceName,\n comObj = this.comObj;\n\n Promise.try(action, data.data).then(\n function (result) {\n comObj.postMessage({\n sourceName,\n targetName,\n callback: CallbackKind.DATA,\n callbackId: data.callbackId,\n data: result,\n });\n },\n function (reason) {\n comObj.postMessage({\n sourceName,\n targetName,\n callback: CallbackKind.ERROR,\n callbackId: data.callbackId,\n reason: wrapReason(reason),\n });\n }\n );\n return;\n }\n if (data.streamId) {\n this.#createStreamSink(data);\n return;\n }\n action(data.data);\n }\n\n on(actionName, handler) {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n assert(\n typeof handler === \"function\",\n 'MessageHandler.on: Expected \"handler\" to be a function.'\n );\n }\n const ah = this.actionHandler;\n if (ah[actionName]) {\n throw new Error(`There is already an actionName called \"${actionName}\"`);\n }\n ah[actionName] = handler;\n }\n\n /**\n * Sends a message to the comObj to invoke the action with the supplied data.\n * @param {string} actionName - Action to call.\n * @param {JSON} data - JSON data to send.\n * @param {Array} [transfers] - List of transfers/ArrayBuffers.\n */\n send(actionName, data, transfers) {\n this.comObj.postMessage(\n {\n sourceName: this.sourceName,\n targetName: this.targetName,\n action: actionName,\n data,\n },\n transfers\n );\n }\n\n /**\n * Sends a message to the comObj to invoke the action with the supplied data.\n * Expects that the other side will callback with the response.\n * @param {string} actionName - Action to call.\n * @param {JSON} data - JSON data to send.\n * @param {Array} [transfers] - List of transfers/ArrayBuffers.\n * @returns {Promise} Promise to be resolved with response data.\n */\n sendWithPromise(actionName, data, transfers) {\n const callbackId = this.callbackId++;\n const capability = Promise.withResolvers();\n this.callbackCapabilities[callbackId] = capability;\n try {\n this.comObj.postMessage(\n {\n sourceName: this.sourceName,\n targetName: this.targetName,\n action: actionName,\n callbackId,\n data,\n },\n transfers\n );\n } catch (ex) {\n capability.reject(ex);\n }\n return capability.promise;\n }\n\n /**\n * Sends a message to the comObj to invoke the action with the supplied data.\n * Expect that the other side will callback to signal 'start_complete'.\n * @param {string} actionName - Action to call.\n * @param {JSON} data - JSON data to send.\n * @param {Object} queueingStrategy - Strategy to signal backpressure based on\n * internal queue.\n * @param {Array} [transfers] - List of transfers/ArrayBuffers.\n * @returns {ReadableStream} ReadableStream to read data in chunks.\n */\n sendWithStream(actionName, data, queueingStrategy, transfers) {\n const streamId = this.streamId++,\n sourceName = this.sourceName,\n targetName = this.targetName,\n comObj = this.comObj;\n\n return new ReadableStream(\n {\n start: controller => {\n const startCapability = Promise.withResolvers();\n this.streamControllers[streamId] = {\n controller,\n startCall: startCapability,\n pullCall: null,\n cancelCall: null,\n isClosed: false,\n };\n comObj.postMessage(\n {\n sourceName,\n targetName,\n action: actionName,\n streamId,\n data,\n desiredSize: controller.desiredSize,\n },\n transfers\n );\n // Return Promise for Async process, to signal success/failure.\n return startCapability.promise;\n },\n\n pull: controller => {\n const pullCapability = Promise.withResolvers();\n this.streamControllers[streamId].pullCall = pullCapability;\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.PULL,\n streamId,\n desiredSize: controller.desiredSize,\n });\n // Returning Promise will not call \"pull\"\n // again until current pull is resolved.\n return pullCapability.promise;\n },\n\n cancel: reason => {\n assert(reason instanceof Error, \"cancel must have a valid reason\");\n const cancelCapability = Promise.withResolvers();\n this.streamControllers[streamId].cancelCall = cancelCapability;\n this.streamControllers[streamId].isClosed = true;\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.CANCEL,\n streamId,\n reason: wrapReason(reason),\n });\n // Return Promise to signal success or failure.\n return cancelCapability.promise;\n },\n },\n queueingStrategy\n );\n }\n\n #createStreamSink(data) {\n const streamId = data.streamId,\n sourceName = this.sourceName,\n targetName = data.sourceName,\n comObj = this.comObj;\n const self = this,\n action = this.actionHandler[data.action];\n\n const streamSink = {\n enqueue(chunk, size = 1, transfers) {\n if (this.isCancelled) {\n return;\n }\n const lastDesiredSize = this.desiredSize;\n this.desiredSize -= size;\n // Enqueue decreases the desiredSize property of sink,\n // so when it changes from positive to negative,\n // set ready as unresolved promise.\n if (lastDesiredSize > 0 && this.desiredSize <= 0) {\n this.sinkCapability = Promise.withResolvers();\n this.ready = this.sinkCapability.promise;\n }\n comObj.postMessage(\n {\n sourceName,\n targetName,\n stream: StreamKind.ENQUEUE,\n streamId,\n chunk,\n },\n transfers\n );\n },\n\n close() {\n if (this.isCancelled) {\n return;\n }\n this.isCancelled = true;\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.CLOSE,\n streamId,\n });\n delete self.streamSinks[streamId];\n },\n\n error(reason) {\n assert(reason instanceof Error, \"error must have a valid reason\");\n if (this.isCancelled) {\n return;\n }\n this.isCancelled = true;\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.ERROR,\n streamId,\n reason: wrapReason(reason),\n });\n },\n\n sinkCapability: Promise.withResolvers(),\n onPull: null,\n onCancel: null,\n isCancelled: false,\n desiredSize: data.desiredSize,\n ready: null,\n };\n\n streamSink.sinkCapability.resolve();\n streamSink.ready = streamSink.sinkCapability.promise;\n this.streamSinks[streamId] = streamSink;\n\n Promise.try(action, data.data, streamSink).then(\n function () {\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.START_COMPLETE,\n streamId,\n success: true,\n });\n },\n function (reason) {\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.START_COMPLETE,\n streamId,\n reason: wrapReason(reason),\n });\n }\n );\n }\n\n #processStreamMessage(data) {\n const streamId = data.streamId,\n sourceName = this.sourceName,\n targetName = data.sourceName,\n comObj = this.comObj;\n const streamController = this.streamControllers[streamId],\n streamSink = this.streamSinks[streamId];\n\n switch (data.stream) {\n case StreamKind.START_COMPLETE:\n if (data.success) {\n streamController.startCall.resolve();\n } else {\n streamController.startCall.reject(wrapReason(data.reason));\n }\n break;\n case StreamKind.PULL_COMPLETE:\n if (data.success) {\n streamController.pullCall.resolve();\n } else {\n streamController.pullCall.reject(wrapReason(data.reason));\n }\n break;\n case StreamKind.PULL:\n // Ignore any pull after close is called.\n if (!streamSink) {\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.PULL_COMPLETE,\n streamId,\n success: true,\n });\n break;\n }\n // Pull increases the desiredSize property of sink, so when it changes\n // from negative to positive, set ready property as resolved promise.\n if (streamSink.desiredSize <= 0 && data.desiredSize > 0) {\n streamSink.sinkCapability.resolve();\n }\n // Reset desiredSize property of sink on every pull.\n streamSink.desiredSize = data.desiredSize;\n\n Promise.try(streamSink.onPull || onFn).then(\n function () {\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.PULL_COMPLETE,\n streamId,\n success: true,\n });\n },\n function (reason) {\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.PULL_COMPLETE,\n streamId,\n reason: wrapReason(reason),\n });\n }\n );\n break;\n case StreamKind.ENQUEUE:\n assert(streamController, \"enqueue should have stream controller\");\n if (streamController.isClosed) {\n break;\n }\n streamController.controller.enqueue(data.chunk);\n break;\n case StreamKind.CLOSE:\n assert(streamController, \"close should have stream controller\");\n if (streamController.isClosed) {\n break;\n }\n streamController.isClosed = true;\n streamController.controller.close();\n this.#deleteStreamController(streamController, streamId);\n break;\n case StreamKind.ERROR:\n assert(streamController, \"error should have stream controller\");\n streamController.controller.error(wrapReason(data.reason));\n this.#deleteStreamController(streamController, streamId);\n break;\n case StreamKind.CANCEL_COMPLETE:\n if (data.success) {\n streamController.cancelCall.resolve();\n } else {\n streamController.cancelCall.reject(wrapReason(data.reason));\n }\n this.#deleteStreamController(streamController, streamId);\n break;\n case StreamKind.CANCEL:\n if (!streamSink) {\n break;\n }\n const dataReason = wrapReason(data.reason);\n\n Promise.try(streamSink.onCancel || onFn, dataReason).then(\n function () {\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.CANCEL_COMPLETE,\n streamId,\n success: true,\n });\n },\n function (reason) {\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.CANCEL_COMPLETE,\n streamId,\n reason: wrapReason(reason),\n });\n }\n );\n streamSink.sinkCapability.reject(dataReason);\n streamSink.isCancelled = true;\n delete this.streamSinks[streamId];\n break;\n default:\n throw new Error(\"Unexpected stream case\");\n }\n }\n\n async #deleteStreamController(streamController, streamId) {\n // Delete the `streamController` only when the start, pull, and cancel\n // capabilities have settled, to prevent `TypeError`s.\n await Promise.allSettled([\n streamController.startCall?.promise,\n streamController.pullCall?.promise,\n streamController.cancelCall?.promise,\n ]);\n delete this.streamControllers[streamId];\n }\n\n destroy() {\n this.#messageAC?.abort();\n this.#messageAC = null;\n }\n}\n\nexport { MessageHandler, wrapReason };\n","/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { unreachable } from \"../shared/util.js\";\n\nclass BaseCanvasFactory {\n #enableHWA = false;\n\n constructor({ enableHWA = false }) {\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n this.constructor === BaseCanvasFactory\n ) {\n unreachable(\"Cannot initialize BaseCanvasFactory.\");\n }\n this.#enableHWA = enableHWA;\n }\n\n create(width, height) {\n if (width <= 0 || height <= 0) {\n throw new Error(\"Invalid canvas size\");\n }\n const canvas = this._createCanvas(width, height);\n return {\n canvas,\n context: canvas.getContext(\"2d\", {\n willReadFrequently: !this.#enableHWA,\n }),\n };\n }\n\n reset(canvasAndContext, width, height) {\n if (!canvasAndContext.canvas) {\n throw new Error(\"Canvas is not specified\");\n }\n if (width <= 0 || height <= 0) {\n throw new Error(\"Invalid canvas size\");\n }\n canvasAndContext.canvas.width = width;\n canvasAndContext.canvas.height = height;\n }\n\n destroy(canvasAndContext) {\n if (!canvasAndContext.canvas) {\n throw new Error(\"Canvas is not specified\");\n }\n // Zeroing the width and height cause Firefox to release graphics\n // resources immediately, which can greatly reduce memory consumption.\n canvasAndContext.canvas.width = 0;\n canvasAndContext.canvas.height = 0;\n canvasAndContext.canvas = null;\n canvasAndContext.context = null;\n }\n\n /**\n * @ignore\n */\n _createCanvas(width, height) {\n unreachable(\"Abstract method `_createCanvas` called.\");\n }\n}\n\nclass DOMCanvasFactory extends BaseCanvasFactory {\n constructor({ ownerDocument = globalThis.document, enableHWA = false }) {\n super({ enableHWA });\n this._document = ownerDocument;\n }\n\n /**\n * @ignore\n */\n _createCanvas(width, height) {\n const canvas = this._document.createElement(\"canvas\");\n canvas.width = width;\n canvas.height = height;\n return canvas;\n }\n}\n\nexport { BaseCanvasFactory, DOMCanvasFactory };\n","/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { stringToBytes, unreachable } from \"../shared/util.js\";\nimport { fetchData } from \"./display_utils.js\";\n\nclass BaseCMapReaderFactory {\n constructor({ baseUrl = null, isCompressed = true }) {\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n this.constructor === BaseCMapReaderFactory\n ) {\n unreachable(\"Cannot initialize BaseCMapReaderFactory.\");\n }\n this.baseUrl = baseUrl;\n this.isCompressed = isCompressed;\n }\n\n async fetch({ name }) {\n if (!this.baseUrl) {\n throw new Error(\n \"Ensure that the `cMapUrl` and `cMapPacked` API parameters are provided.\"\n );\n }\n if (!name) {\n throw new Error(\"CMap name must be specified.\");\n }\n const url = this.baseUrl + name + (this.isCompressed ? \".bcmap\" : \"\");\n\n return this._fetch(url)\n .then(cMapData => ({ cMapData, isCompressed: this.isCompressed }))\n .catch(reason => {\n throw new Error(\n `Unable to load ${this.isCompressed ? \"binary \" : \"\"}CMap at: ${url}`\n );\n });\n }\n\n /**\n * @ignore\n * @returns {Promise}\n */\n async _fetch(url) {\n unreachable(\"Abstract method `_fetch` called.\");\n }\n}\n\nclass DOMCMapReaderFactory extends BaseCMapReaderFactory {\n /**\n * @ignore\n */\n async _fetch(url) {\n const data = await fetchData(\n url,\n /* type = */ this.isCompressed ? \"arraybuffer\" : \"text\"\n );\n return data instanceof ArrayBuffer\n ? new Uint8Array(data)\n : stringToBytes(data);\n }\n}\n\nexport { BaseCMapReaderFactory, DOMCMapReaderFactory };\n","/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getRGB, isDataScheme, SVG_NS } from \"./display_utils.js\";\nimport { unreachable, updateUrlHash, Util, warn } from \"../shared/util.js\";\n\nclass BaseFilterFactory {\n constructor() {\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n this.constructor === BaseFilterFactory\n ) {\n unreachable(\"Cannot initialize BaseFilterFactory.\");\n }\n }\n\n addFilter(maps) {\n return \"none\";\n }\n\n addHCMFilter(fgColor, bgColor) {\n return \"none\";\n }\n\n addAlphaFilter(map) {\n return \"none\";\n }\n\n addLuminosityFilter(map) {\n return \"none\";\n }\n\n addHighlightHCMFilter(filterName, fgColor, bgColor, newFgColor, newBgColor) {\n return \"none\";\n }\n\n destroy(keepHCM = false) {}\n}\n\n/**\n * FilterFactory aims to create some SVG filters we can use when drawing an\n * image (or whatever) on a canvas.\n * Filters aren't applied with ctx.putImageData because it just overwrites the\n * underlying pixels.\n * With these filters, it's possible for example to apply some transfer maps on\n * an image without the need to apply them on the pixel arrays: the renderer\n * does the magic for us.\n */\nclass DOMFilterFactory extends BaseFilterFactory {\n #baseUrl;\n\n #_cache;\n\n #_defs;\n\n #docId;\n\n #document;\n\n #_hcmCache;\n\n #id = 0;\n\n constructor({ docId, ownerDocument = globalThis.document }) {\n super();\n this.#docId = docId;\n this.#document = ownerDocument;\n }\n\n get #cache() {\n return (this.#_cache ||= new Map());\n }\n\n get #hcmCache() {\n return (this.#_hcmCache ||= new Map());\n }\n\n get #defs() {\n if (!this.#_defs) {\n const div = this.#document.createElement(\"div\");\n const { style } = div;\n style.visibility = \"hidden\";\n style.contain = \"strict\";\n style.width = style.height = 0;\n style.position = \"absolute\";\n style.top = style.left = 0;\n style.zIndex = -1;\n\n const svg = this.#document.createElementNS(SVG_NS, \"svg\");\n svg.setAttribute(\"width\", 0);\n svg.setAttribute(\"height\", 0);\n this.#_defs = this.#document.createElementNS(SVG_NS, \"defs\");\n div.append(svg);\n svg.append(this.#_defs);\n this.#document.body.append(div);\n }\n return this.#_defs;\n }\n\n #createTables(maps) {\n if (maps.length === 1) {\n const mapR = maps[0];\n const buffer = new Array(256);\n for (let i = 0; i < 256; i++) {\n buffer[i] = mapR[i] / 255;\n }\n\n const table = buffer.join(\",\");\n return [table, table, table];\n }\n\n const [mapR, mapG, mapB] = maps;\n const bufferR = new Array(256);\n const bufferG = new Array(256);\n const bufferB = new Array(256);\n for (let i = 0; i < 256; i++) {\n bufferR[i] = mapR[i] / 255;\n bufferG[i] = mapG[i] / 255;\n bufferB[i] = mapB[i] / 255;\n }\n return [bufferR.join(\",\"), bufferG.join(\",\"), bufferB.join(\",\")];\n }\n\n #createUrl(id) {\n if (this.#baseUrl === undefined) {\n // Unless a ``-element is present a relative URL should work.\n this.#baseUrl = \"\";\n\n const url = this.#document.URL;\n if (url !== this.#document.baseURI) {\n if (isDataScheme(url)) {\n warn('#createUrl: ignore \"data:\"-URL for performance reasons.');\n } else {\n this.#baseUrl = updateUrlHash(url, \"\");\n }\n }\n }\n return `url(${this.#baseUrl}#${id})`;\n }\n\n addFilter(maps) {\n if (!maps) {\n return \"none\";\n }\n\n // When a page is zoomed the page is re-drawn but the maps are likely\n // the same.\n let value = this.#cache.get(maps);\n if (value) {\n return value;\n }\n\n const [tableR, tableG, tableB] = this.#createTables(maps);\n const key = maps.length === 1 ? tableR : `${tableR}${tableG}${tableB}`;\n\n value = this.#cache.get(key);\n if (value) {\n this.#cache.set(maps, value);\n return value;\n }\n\n // We create a SVG filter: feComponentTransferElement\n // https://www.w3.org/TR/SVG11/filters.html#feComponentTransferElement\n\n const id = `g_${this.#docId}_transfer_map_${this.#id++}`;\n const url = this.#createUrl(id);\n this.#cache.set(maps, url);\n this.#cache.set(key, url);\n\n const filter = this.#createFilter(id);\n this.#addTransferMapConversion(tableR, tableG, tableB, filter);\n\n return url;\n }\n\n addHCMFilter(fgColor, bgColor) {\n const key = `${fgColor}-${bgColor}`;\n const filterName = \"base\";\n let info = this.#hcmCache.get(filterName);\n if (info?.key === key) {\n return info.url;\n }\n\n if (info) {\n info.filter?.remove();\n info.key = key;\n info.url = \"none\";\n info.filter = null;\n } else {\n info = {\n key,\n url: \"none\",\n filter: null,\n };\n this.#hcmCache.set(filterName, info);\n }\n\n if (!fgColor || !bgColor) {\n return info.url;\n }\n\n const fgRGB = this.#getRGB(fgColor);\n fgColor = Util.makeHexColor(...fgRGB);\n const bgRGB = this.#getRGB(bgColor);\n bgColor = Util.makeHexColor(...bgRGB);\n this.#defs.style.color = \"\";\n\n if (\n (fgColor === \"#000000\" && bgColor === \"#ffffff\") ||\n fgColor === bgColor\n ) {\n return info.url;\n }\n\n // https://developer.mozilla.org/en-US/docs/Web/Accessibility/Understanding_Colors_and_Luminance\n //\n // Relative luminance:\n // https://www.w3.org/TR/WCAG20/#relativeluminancedef\n //\n // We compute the rounded luminance of the default background color.\n // Then for every color in the pdf, if its rounded luminance is the\n // same as the background one then it's replaced by the new\n // background color else by the foreground one.\n const map = new Array(256);\n for (let i = 0; i <= 255; i++) {\n const x = i / 255;\n map[i] = x <= 0.03928 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4;\n }\n const table = map.join(\",\");\n\n const id = `g_${this.#docId}_hcm_filter`;\n const filter = (info.filter = this.#createFilter(id));\n this.#addTransferMapConversion(table, table, table, filter);\n this.#addGrayConversion(filter);\n\n const getSteps = (c, n) => {\n const start = fgRGB[c] / 255;\n const end = bgRGB[c] / 255;\n const arr = new Array(n + 1);\n for (let i = 0; i <= n; i++) {\n arr[i] = start + (i / n) * (end - start);\n }\n return arr.join(\",\");\n };\n this.#addTransferMapConversion(\n getSteps(0, 5),\n getSteps(1, 5),\n getSteps(2, 5),\n filter\n );\n\n info.url = this.#createUrl(id);\n return info.url;\n }\n\n addAlphaFilter(map) {\n // When a page is zoomed the page is re-drawn but the maps are likely\n // the same.\n let value = this.#cache.get(map);\n if (value) {\n return value;\n }\n\n const [tableA] = this.#createTables([map]);\n const key = `alpha_${tableA}`;\n\n value = this.#cache.get(key);\n if (value) {\n this.#cache.set(map, value);\n return value;\n }\n\n const id = `g_${this.#docId}_alpha_map_${this.#id++}`;\n const url = this.#createUrl(id);\n this.#cache.set(map, url);\n this.#cache.set(key, url);\n\n const filter = this.#createFilter(id);\n this.#addTransferMapAlphaConversion(tableA, filter);\n\n return url;\n }\n\n addLuminosityFilter(map) {\n // When a page is zoomed the page is re-drawn but the maps are likely\n // the same.\n let value = this.#cache.get(map || \"luminosity\");\n if (value) {\n return value;\n }\n\n let tableA, key;\n if (map) {\n [tableA] = this.#createTables([map]);\n key = `luminosity_${tableA}`;\n } else {\n key = \"luminosity\";\n }\n\n value = this.#cache.get(key);\n if (value) {\n this.#cache.set(map, value);\n return value;\n }\n\n const id = `g_${this.#docId}_luminosity_map_${this.#id++}`;\n const url = this.#createUrl(id);\n this.#cache.set(map, url);\n this.#cache.set(key, url);\n\n const filter = this.#createFilter(id);\n this.#addLuminosityConversion(filter);\n if (map) {\n this.#addTransferMapAlphaConversion(tableA, filter);\n }\n\n return url;\n }\n\n addHighlightHCMFilter(filterName, fgColor, bgColor, newFgColor, newBgColor) {\n const key = `${fgColor}-${bgColor}-${newFgColor}-${newBgColor}`;\n let info = this.#hcmCache.get(filterName);\n if (info?.key === key) {\n return info.url;\n }\n\n if (info) {\n info.filter?.remove();\n info.key = key;\n info.url = \"none\";\n info.filter = null;\n } else {\n info = {\n key,\n url: \"none\",\n filter: null,\n };\n this.#hcmCache.set(filterName, info);\n }\n\n if (!fgColor || !bgColor) {\n return info.url;\n }\n\n const [fgRGB, bgRGB] = [fgColor, bgColor].map(this.#getRGB.bind(this));\n let fgGray = Math.round(\n 0.2126 * fgRGB[0] + 0.7152 * fgRGB[1] + 0.0722 * fgRGB[2]\n );\n let bgGray = Math.round(\n 0.2126 * bgRGB[0] + 0.7152 * bgRGB[1] + 0.0722 * bgRGB[2]\n );\n let [newFgRGB, newBgRGB] = [newFgColor, newBgColor].map(\n this.#getRGB.bind(this)\n );\n if (bgGray < fgGray) {\n [fgGray, bgGray, newFgRGB, newBgRGB] = [\n bgGray,\n fgGray,\n newBgRGB,\n newFgRGB,\n ];\n }\n this.#defs.style.color = \"\";\n\n // Now we can create the filters to highlight some canvas parts.\n // The colors in the pdf will almost be Canvas and CanvasText, hence we\n // want to filter them to finally get Highlight and HighlightText.\n // Since we're in HCM the background color and the foreground color should\n // be really different when converted to grayscale (if they're not then it\n // means that we've a poor contrast). Once the canvas colors are converted\n // to grayscale we can easily map them on their new colors.\n // The grayscale step is important because if we've something like:\n // fgColor = #FF....\n // bgColor = #FF....\n // then we are enable to map the red component on the new red components\n // which can be different.\n\n const getSteps = (fg, bg, n) => {\n const arr = new Array(256);\n const step = (bgGray - fgGray) / n;\n const newStart = fg / 255;\n const newStep = (bg - fg) / (255 * n);\n let prev = 0;\n for (let i = 0; i <= n; i++) {\n const k = Math.round(fgGray + i * step);\n const value = newStart + i * newStep;\n for (let j = prev; j <= k; j++) {\n arr[j] = value;\n }\n prev = k + 1;\n }\n for (let i = prev; i < 256; i++) {\n arr[i] = arr[prev - 1];\n }\n return arr.join(\",\");\n };\n\n const id = `g_${this.#docId}_hcm_${filterName}_filter`;\n const filter = (info.filter = this.#createFilter(id));\n\n this.#addGrayConversion(filter);\n this.#addTransferMapConversion(\n getSteps(newFgRGB[0], newBgRGB[0], 5),\n getSteps(newFgRGB[1], newBgRGB[1], 5),\n getSteps(newFgRGB[2], newBgRGB[2], 5),\n filter\n );\n\n info.url = this.#createUrl(id);\n return info.url;\n }\n\n destroy(keepHCM = false) {\n if (keepHCM && this.#_hcmCache?.size) {\n return;\n }\n this.#_defs?.parentNode.parentNode.remove();\n this.#_defs = null;\n\n this.#_cache?.clear();\n this.#_cache = null;\n\n this.#_hcmCache?.clear();\n this.#_hcmCache = null;\n\n this.#id = 0;\n }\n\n #addLuminosityConversion(filter) {\n const feColorMatrix = this.#document.createElementNS(\n SVG_NS,\n \"feColorMatrix\"\n );\n feColorMatrix.setAttribute(\"type\", \"matrix\");\n feColorMatrix.setAttribute(\n \"values\",\n \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.59 0.11 0 0\"\n );\n filter.append(feColorMatrix);\n }\n\n #addGrayConversion(filter) {\n const feColorMatrix = this.#document.createElementNS(\n SVG_NS,\n \"feColorMatrix\"\n );\n feColorMatrix.setAttribute(\"type\", \"matrix\");\n feColorMatrix.setAttribute(\n \"values\",\n \"0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0\"\n );\n filter.append(feColorMatrix);\n }\n\n #createFilter(id) {\n const filter = this.#document.createElementNS(SVG_NS, \"filter\");\n filter.setAttribute(\"color-interpolation-filters\", \"sRGB\");\n filter.setAttribute(\"id\", id);\n this.#defs.append(filter);\n\n return filter;\n }\n\n #appendFeFunc(feComponentTransfer, func, table) {\n const feFunc = this.#document.createElementNS(SVG_NS, func);\n feFunc.setAttribute(\"type\", \"discrete\");\n feFunc.setAttribute(\"tableValues\", table);\n feComponentTransfer.append(feFunc);\n }\n\n #addTransferMapConversion(rTable, gTable, bTable, filter) {\n const feComponentTransfer = this.#document.createElementNS(\n SVG_NS,\n \"feComponentTransfer\"\n );\n filter.append(feComponentTransfer);\n this.#appendFeFunc(feComponentTransfer, \"feFuncR\", rTable);\n this.#appendFeFunc(feComponentTransfer, \"feFuncG\", gTable);\n this.#appendFeFunc(feComponentTransfer, \"feFuncB\", bTable);\n }\n\n #addTransferMapAlphaConversion(aTable, filter) {\n const feComponentTransfer = this.#document.createElementNS(\n SVG_NS,\n \"feComponentTransfer\"\n );\n filter.append(feComponentTransfer);\n this.#appendFeFunc(feComponentTransfer, \"feFuncA\", aTable);\n }\n\n #getRGB(color) {\n this.#defs.style.color = color;\n return getRGB(getComputedStyle(this.#defs).getPropertyValue(\"color\"));\n }\n}\n\nexport { BaseFilterFactory, DOMFilterFactory };\n","/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { fetchData } from \"./display_utils.js\";\nimport { unreachable } from \"../shared/util.js\";\n\nclass BaseStandardFontDataFactory {\n constructor({ baseUrl = null }) {\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n this.constructor === BaseStandardFontDataFactory\n ) {\n unreachable(\"Cannot initialize BaseStandardFontDataFactory.\");\n }\n this.baseUrl = baseUrl;\n }\n\n async fetch({ filename }) {\n if (!this.baseUrl) {\n throw new Error(\n \"Ensure that the `standardFontDataUrl` API parameter is provided.\"\n );\n }\n if (!filename) {\n throw new Error(\"Font filename must be specified.\");\n }\n const url = `${this.baseUrl}${filename}`;\n\n return this._fetch(url).catch(reason => {\n throw new Error(`Unable to load font data at: ${url}`);\n });\n }\n\n /**\n * @ignore\n * @returns {Promise}\n */\n async _fetch(url) {\n unreachable(\"Abstract method `_fetch` called.\");\n }\n}\n\nclass DOMStandardFontDataFactory extends BaseStandardFontDataFactory {\n /**\n * @ignore\n */\n async _fetch(url) {\n const data = await fetchData(url, /* type = */ \"arraybuffer\");\n return new Uint8Array(data);\n }\n}\n\nexport { BaseStandardFontDataFactory, DOMStandardFontDataFactory };\n","/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { fetchData } from \"./display_utils.js\";\nimport { unreachable } from \"../shared/util.js\";\n\nclass BaseWasmFactory {\n constructor({ baseUrl = null }) {\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n this.constructor === BaseWasmFactory\n ) {\n unreachable(\"Cannot initialize BaseWasmFactory.\");\n }\n this.baseUrl = baseUrl;\n }\n\n async fetch({ filename }) {\n if (!this.baseUrl) {\n throw new Error(\"Ensure that the `wasmUrl` API parameter is provided.\");\n }\n if (!filename) {\n throw new Error(\"Wasm filename must be specified.\");\n }\n const url = `${this.baseUrl}${filename}`;\n\n return this._fetch(url).catch(reason => {\n throw new Error(`Unable to load wasm data at: ${url}`);\n });\n }\n\n /**\n * @ignore\n * @returns {Promise}\n */\n async _fetch(url) {\n unreachable(\"Abstract method `_fetch` called.\");\n }\n}\n\nclass DOMWasmFactory extends BaseWasmFactory {\n /**\n * @ignore\n */\n async _fetch(url) {\n const data = await fetchData(url, /* type = */ \"arraybuffer\");\n return new Uint8Array(data);\n }\n}\n\nexport { BaseWasmFactory, DOMWasmFactory };\n","/* Copyright 2020 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* globals process */\n\nimport { isNodeJS, warn } from \"../shared/util.js\";\nimport { BaseCanvasFactory } from \"./canvas_factory.js\";\nimport { BaseCMapReaderFactory } from \"./cmap_reader_factory.js\";\nimport { BaseFilterFactory } from \"./filter_factory.js\";\nimport { BaseStandardFontDataFactory } from \"./standard_fontdata_factory.js\";\nimport { BaseWasmFactory } from \"./wasm_factory.js\";\n\nif (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\n 'Module \"./node_utils.js\" shall not be used with MOZCENTRAL builds.'\n );\n}\n\nif (isNodeJS) {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"SKIP_BABEL\")) {\n warn(\"Please use the `legacy` build in Node.js environments.\");\n } else {\n let canvas;\n try {\n const require = process\n .getBuiltinModule(\"module\")\n .createRequire(import.meta.url);\n\n try {\n canvas = require(\"@napi-rs/canvas\");\n } catch (ex) {\n warn(`Cannot load \"@napi-rs/canvas\" package: \"${ex}\".`);\n }\n } catch (ex) {\n warn(`Cannot access the \\`require\\` function: \"${ex}\".`);\n }\n\n if (!globalThis.DOMMatrix) {\n if (canvas?.DOMMatrix) {\n globalThis.DOMMatrix = canvas.DOMMatrix;\n } else {\n warn(\"Cannot polyfill `DOMMatrix`, rendering may be broken.\");\n }\n }\n if (!globalThis.ImageData) {\n if (canvas?.ImageData) {\n globalThis.ImageData = canvas.ImageData;\n } else {\n warn(\"Cannot polyfill `ImageData`, rendering may be broken.\");\n }\n }\n if (!globalThis.Path2D) {\n if (canvas?.Path2D) {\n globalThis.Path2D = canvas.Path2D;\n } else {\n warn(\"Cannot polyfill `Path2D`, rendering may be broken.\");\n }\n }\n if (!globalThis.navigator?.language) {\n globalThis.navigator = {\n language: \"en-US\",\n platform: \"\",\n userAgent: \"\",\n };\n }\n }\n}\n\nasync function fetchData(url) {\n const fs = process.getBuiltinModule(\"fs\");\n const data = await fs.promises.readFile(url);\n return new Uint8Array(data);\n}\n\nclass NodeFilterFactory extends BaseFilterFactory {}\n\nclass NodeCanvasFactory extends BaseCanvasFactory {\n /**\n * @ignore\n */\n _createCanvas(width, height) {\n const require = process\n .getBuiltinModule(\"module\")\n .createRequire(import.meta.url);\n const canvas = require(\"@napi-rs/canvas\");\n return canvas.createCanvas(width, height);\n }\n}\n\nclass NodeCMapReaderFactory extends BaseCMapReaderFactory {\n /**\n * @ignore\n */\n async _fetch(url) {\n return fetchData(url);\n }\n}\n\nclass NodeStandardFontDataFactory extends BaseStandardFontDataFactory {\n /**\n * @ignore\n */\n async _fetch(url) {\n return fetchData(url);\n }\n}\n\nclass NodeWasmFactory extends BaseWasmFactory {\n /**\n * @ignore\n */\n async _fetch(url) {\n return fetchData(url);\n }\n}\n\nexport {\n fetchData,\n NodeCanvasFactory,\n NodeCMapReaderFactory,\n NodeFilterFactory,\n NodeStandardFontDataFactory,\n NodeWasmFactory,\n};\n","import { Util } from \"../shared/util.js\";\n\nconst FORCED_DEPENDENCY_LABEL = \"__forcedDependency\";\n\nconst { floor, ceil } = Math;\n\nfunction expandBBox(array, index, minX, minY, maxX, maxY) {\n array[index * 4 + 0] = Math.min(array[index * 4 + 0], minX);\n array[index * 4 + 1] = Math.min(array[index * 4 + 1], minY);\n array[index * 4 + 2] = Math.max(array[index * 4 + 2], maxX);\n array[index * 4 + 3] = Math.max(array[index * 4 + 3], maxY);\n}\n\n// This is computed rathter than hard-coded to keep into\n// account the platform's endianess.\nconst EMPTY_BBOX = new Uint32Array(new Uint8Array([255, 255, 0, 0]).buffer)[0];\n\nclass BBoxReader {\n #bboxes;\n\n #coords;\n\n constructor(bboxes, coords) {\n this.#bboxes = bboxes;\n this.#coords = coords;\n }\n\n get length() {\n return this.#bboxes.length;\n }\n\n isEmpty(i) {\n return this.#bboxes[i] === EMPTY_BBOX;\n }\n\n minX(i) {\n return this.#coords[i * 4 + 0] / 256;\n }\n\n minY(i) {\n return this.#coords[i * 4 + 1] / 256;\n }\n\n maxX(i) {\n return (this.#coords[i * 4 + 2] + 1) / 256;\n }\n\n maxY(i) {\n return (this.#coords[i * 4 + 3] + 1) / 256;\n }\n}\n\nconst ensureDebugMetadata = (map, key) => {\n if (!map) {\n return undefined;\n }\n let value = map.get(key);\n if (!value) {\n value = { dependencies: new Set(), isRenderingOperation: false };\n map.set(key, value);\n }\n return value;\n};\n\n/**\n * @typedef {\"lineWidth\" | \"lineCap\" | \"lineJoin\" | \"miterLimit\" | \"dash\" |\n * \"strokeAlpha\" | \"fillColor\" | \"fillAlpha\" | \"globalCompositeOperation\" |\n * \"path\" | \"filter\" | \"font\" | \"fontObj\"} SimpleDependency\n */\n\n/**\n * @typedef {\"transform\" | \"moveText\" | \"sameLineText\"} IncrementalDependency\n */\n\n/**\n * @typedef {IncrementalDependency |\n * typeof FORCED_DEPENDENCY_LABEL} InternalIncrementalDependency\n */\nclass CanvasDependencyTracker {\n /** @type {Record} */\n #simple = { __proto__: null };\n\n /** @type {Record} */\n #incremental = {\n __proto__: null,\n transform: [],\n moveText: [],\n sameLineText: [],\n [FORCED_DEPENDENCY_LABEL]: [],\n };\n\n #namedDependencies = new Map();\n\n #savesStack = [];\n\n #markedContentStack = [];\n\n #baseTransformStack = [[1, 0, 0, 1, 0, 0]];\n\n #clipBox = [-Infinity, -Infinity, Infinity, Infinity];\n\n // Float32Array\n #pendingBBox = new Float64Array([Infinity, Infinity, -Infinity, -Infinity]);\n\n #pendingBBoxIdx = -1;\n\n #pendingDependencies = new Set();\n\n #operations = new Map();\n\n #fontBBoxTrustworthy = new Map();\n\n #canvasWidth;\n\n #canvasHeight;\n\n // Uint8ClampedArray\n #bboxesCoords;\n\n #bboxes;\n\n #debugMetadata;\n\n constructor(canvas, operationsCount, recordDebugMetadata = false) {\n this.#canvasWidth = canvas.width;\n this.#canvasHeight = canvas.height;\n this.#initializeBBoxes(operationsCount);\n if (recordDebugMetadata) {\n this.#debugMetadata = new Map();\n }\n }\n\n growOperationsCount(operationsCount) {\n if (operationsCount >= this.#bboxes.length) {\n this.#initializeBBoxes(operationsCount, this.#bboxes);\n }\n }\n\n #initializeBBoxes(operationsCount, oldBBoxes) {\n const buffer = new ArrayBuffer(operationsCount * 4);\n this.#bboxesCoords = new Uint8ClampedArray(buffer);\n this.#bboxes = new Uint32Array(buffer);\n if (oldBBoxes && oldBBoxes.length > 0) {\n this.#bboxes.set(oldBBoxes);\n this.#bboxes.fill(EMPTY_BBOX, oldBBoxes.length);\n } else {\n this.#bboxes.fill(EMPTY_BBOX);\n }\n }\n\n save(opIdx) {\n this.#simple = { __proto__: this.#simple };\n this.#incremental = {\n __proto__: this.#incremental,\n transform: { __proto__: this.#incremental.transform },\n moveText: { __proto__: this.#incremental.moveText },\n sameLineText: { __proto__: this.#incremental.sameLineText },\n [FORCED_DEPENDENCY_LABEL]: {\n __proto__: this.#incremental[FORCED_DEPENDENCY_LABEL],\n },\n };\n this.#clipBox = { __proto__: this.#clipBox };\n this.#savesStack.push(opIdx);\n\n return this;\n }\n\n restore(opIdx) {\n const previous = Object.getPrototypeOf(this.#simple);\n if (previous === null) {\n // Sometimes we call more .restore() than .save(), for\n // example when using CanvasGraphics' #restoreInitialState()\n return this;\n }\n this.#simple = previous;\n this.#incremental = Object.getPrototypeOf(this.#incremental);\n this.#clipBox = Object.getPrototypeOf(this.#clipBox);\n\n const lastSave = this.#savesStack.pop();\n if (lastSave !== undefined) {\n ensureDebugMetadata(this.#debugMetadata, opIdx)?.dependencies.add(\n lastSave\n );\n this.#bboxes[opIdx] = this.#bboxes[lastSave];\n }\n\n return this;\n }\n\n /**\n * @param {number} idx\n */\n recordOpenMarker(idx) {\n this.#savesStack.push(idx);\n return this;\n }\n\n getOpenMarker() {\n if (this.#savesStack.length === 0) {\n return null;\n }\n return this.#savesStack.at(-1);\n }\n\n recordCloseMarker(opIdx) {\n const lastSave = this.#savesStack.pop();\n if (lastSave !== undefined) {\n ensureDebugMetadata(this.#debugMetadata, opIdx)?.dependencies.add(\n lastSave\n );\n this.#bboxes[opIdx] = this.#bboxes[lastSave];\n }\n return this;\n }\n\n // Marked content needs a separate stack from save/restore, because they\n // form two independent trees.\n beginMarkedContent(opIdx) {\n this.#markedContentStack.push(opIdx);\n return this;\n }\n\n endMarkedContent(opIdx) {\n const lastSave = this.#markedContentStack.pop();\n if (lastSave !== undefined) {\n ensureDebugMetadata(this.#debugMetadata, opIdx)?.dependencies.add(\n lastSave\n );\n this.#bboxes[opIdx] = this.#bboxes[lastSave];\n }\n return this;\n }\n\n pushBaseTransform(ctx) {\n this.#baseTransformStack.push(\n Util.multiplyByDOMMatrix(\n this.#baseTransformStack.at(-1),\n ctx.getTransform()\n )\n );\n return this;\n }\n\n popBaseTransform() {\n if (this.#baseTransformStack.length > 1) {\n this.#baseTransformStack.pop();\n }\n return this;\n }\n\n /**\n * @param {SimpleDependency} name\n * @param {number} idx\n */\n recordSimpleData(name, idx) {\n this.#simple[name] = idx;\n return this;\n }\n\n /**\n * @param {IncrementalDependency} name\n * @param {number} idx\n */\n recordIncrementalData(name, idx) {\n this.#incremental[name].push(idx);\n return this;\n }\n\n /**\n * @param {IncrementalDependency} name\n * @param {number} idx\n */\n resetIncrementalData(name, idx) {\n this.#incremental[name].length = 0;\n return this;\n }\n\n recordNamedData(name, idx) {\n this.#namedDependencies.set(name, idx);\n return this;\n }\n\n /**\n * @param {SimpleDependency} name\n * @param {string} depName\n * @param {number} fallbackIdx\n */\n recordSimpleDataFromNamed(name, depName, fallbackIdx) {\n this.#simple[name] = this.#namedDependencies.get(depName) ?? fallbackIdx;\n }\n\n // All next operations, until the next .restore(), will depend on this\n recordFutureForcedDependency(name, idx) {\n this.recordIncrementalData(FORCED_DEPENDENCY_LABEL, idx);\n return this;\n }\n\n // All next operations, until the next .restore(), will depend on all\n // the already recorded data with the given names.\n inheritSimpleDataAsFutureForcedDependencies(names) {\n for (const name of names) {\n if (name in this.#simple) {\n this.recordFutureForcedDependency(name, this.#simple[name]);\n }\n }\n return this;\n }\n\n inheritPendingDependenciesAsFutureForcedDependencies() {\n for (const dep of this.#pendingDependencies) {\n this.recordFutureForcedDependency(FORCED_DEPENDENCY_LABEL, dep);\n }\n return this;\n }\n\n resetBBox(idx) {\n if (this.#pendingBBoxIdx !== idx) {\n this.#pendingBBoxIdx = idx;\n this.#pendingBBox[0] = Infinity;\n this.#pendingBBox[1] = Infinity;\n this.#pendingBBox[2] = -Infinity;\n this.#pendingBBox[3] = -Infinity;\n }\n return this;\n }\n\n recordClipBox(idx, ctx, minX, maxX, minY, maxY) {\n const transform = Util.multiplyByDOMMatrix(\n this.#baseTransformStack.at(-1),\n ctx.getTransform()\n );\n const clipBox = [Infinity, Infinity, -Infinity, -Infinity];\n Util.axialAlignedBoundingBox([minX, minY, maxX, maxY], transform, clipBox);\n const intersection = Util.intersect(this.#clipBox, clipBox);\n if (intersection) {\n this.#clipBox[0] = intersection[0];\n this.#clipBox[1] = intersection[1];\n this.#clipBox[2] = intersection[2];\n this.#clipBox[3] = intersection[3];\n } else {\n this.#clipBox[0] = this.#clipBox[1] = Infinity;\n this.#clipBox[2] = this.#clipBox[3] = -Infinity;\n }\n return this;\n }\n\n recordBBox(idx, ctx, minX, maxX, minY, maxY) {\n const clipBox = this.#clipBox;\n if (clipBox[0] === Infinity) {\n return this;\n }\n\n const transform = Util.multiplyByDOMMatrix(\n this.#baseTransformStack.at(-1),\n ctx.getTransform()\n );\n if (clipBox[0] === -Infinity) {\n Util.axialAlignedBoundingBox(\n [minX, minY, maxX, maxY],\n transform,\n this.#pendingBBox\n );\n return this;\n }\n\n const bbox = [Infinity, Infinity, -Infinity, -Infinity];\n Util.axialAlignedBoundingBox([minX, minY, maxX, maxY], transform, bbox);\n this.#pendingBBox[0] = Math.min(\n this.#pendingBBox[0],\n Math.max(bbox[0], clipBox[0])\n );\n this.#pendingBBox[1] = Math.min(\n this.#pendingBBox[1],\n Math.max(bbox[1], clipBox[1])\n );\n this.#pendingBBox[2] = Math.max(\n this.#pendingBBox[2],\n Math.min(bbox[2], clipBox[2])\n );\n this.#pendingBBox[3] = Math.max(\n this.#pendingBBox[3],\n Math.min(bbox[3], clipBox[3])\n );\n return this;\n }\n\n recordCharacterBBox(idx, ctx, font, scale = 1, x = 0, y = 0, getMeasure) {\n const fontBBox = font.bbox;\n let isBBoxTrustworthy;\n let computedBBox;\n\n if (fontBBox) {\n isBBoxTrustworthy =\n // Only use the bounding box defined by the font if it\n // has a non-empty area.\n fontBBox[2] !== fontBBox[0] &&\n fontBBox[3] !== fontBBox[1] &&\n this.#fontBBoxTrustworthy.get(font);\n\n if (isBBoxTrustworthy !== false) {\n computedBBox = [0, 0, 0, 0];\n Util.axialAlignedBoundingBox(fontBBox, font.fontMatrix, computedBBox);\n if (scale !== 1 || x !== 0 || y !== 0) {\n Util.scaleMinMax([scale, 0, 0, -scale, x, y], computedBBox);\n }\n\n if (isBBoxTrustworthy) {\n return this.recordBBox(\n idx,\n ctx,\n computedBBox[0],\n computedBBox[2],\n computedBBox[1],\n computedBBox[3]\n );\n }\n }\n }\n\n if (!getMeasure) {\n // We have no way of telling how big this character actually is, record\n // a full page bounding box.\n return this.recordFullPageBBox(idx);\n }\n\n const measure = getMeasure();\n\n if (fontBBox && computedBBox && isBBoxTrustworthy === undefined) {\n // If it's the first time we can compare the font bbox with the actual\n // bbox measured when drawing it, check if the one recorded in the font\n // is large enough to cover the actual bbox. If it is, we assume that the\n // font is well-formed and we can use the declared bbox without having to\n // measure it again for every character.\n isBBoxTrustworthy =\n computedBBox[0] <= x - measure.actualBoundingBoxLeft &&\n computedBBox[2] >= x + measure.actualBoundingBoxRight &&\n computedBBox[1] <= y - measure.actualBoundingBoxAscent &&\n computedBBox[3] >= y + measure.actualBoundingBoxDescent;\n this.#fontBBoxTrustworthy.set(font, isBBoxTrustworthy);\n if (isBBoxTrustworthy) {\n return this.recordBBox(\n idx,\n ctx,\n computedBBox[0],\n computedBBox[2],\n computedBBox[1],\n computedBBox[3]\n );\n }\n }\n\n // The font has no bbox or it is not trustworthy, so we need to\n // return the bounding box based on .measureText().\n return this.recordBBox(\n idx,\n ctx,\n x - measure.actualBoundingBoxLeft,\n x + measure.actualBoundingBoxRight,\n y - measure.actualBoundingBoxAscent,\n y + measure.actualBoundingBoxDescent\n );\n }\n\n recordFullPageBBox(idx) {\n this.#pendingBBox[0] = Math.max(0, this.#clipBox[0]);\n this.#pendingBBox[1] = Math.max(0, this.#clipBox[1]);\n this.#pendingBBox[2] = Math.min(this.#canvasWidth, this.#clipBox[2]);\n this.#pendingBBox[3] = Math.min(this.#canvasHeight, this.#clipBox[3]);\n\n return this;\n }\n\n getSimpleIndex(dependencyName) {\n return this.#simple[dependencyName];\n }\n\n recordDependencies(idx, dependencyNames) {\n const pendingDependencies = this.#pendingDependencies;\n const simple = this.#simple;\n const incremental = this.#incremental;\n for (const name of dependencyNames) {\n if (name in this.#simple) {\n pendingDependencies.add(simple[name]);\n } else if (name in incremental) {\n incremental[name].forEach(pendingDependencies.add, pendingDependencies);\n }\n }\n\n return this;\n }\n\n recordNamedDependency(idx, name) {\n if (this.#namedDependencies.has(name)) {\n this.#pendingDependencies.add(this.#namedDependencies.get(name));\n }\n\n return this;\n }\n\n /**\n * @param {number} idx\n */\n recordOperation(idx, preserve = false) {\n this.recordDependencies(idx, [FORCED_DEPENDENCY_LABEL]);\n\n if (this.#debugMetadata) {\n const metadata = ensureDebugMetadata(this.#debugMetadata, idx);\n const { dependencies } = metadata;\n this.#pendingDependencies.forEach(dependencies.add, dependencies);\n this.#savesStack.forEach(dependencies.add, dependencies);\n this.#markedContentStack.forEach(dependencies.add, dependencies);\n dependencies.delete(idx);\n metadata.isRenderingOperation = true;\n }\n\n if (this.#pendingBBoxIdx === idx) {\n const minX = floor((this.#pendingBBox[0] * 256) / this.#canvasWidth);\n const minY = floor((this.#pendingBBox[1] * 256) / this.#canvasHeight);\n const maxX = ceil((this.#pendingBBox[2] * 256) / this.#canvasWidth);\n const maxY = ceil((this.#pendingBBox[3] * 256) / this.#canvasHeight);\n\n expandBBox(this.#bboxesCoords, idx, minX, minY, maxX, maxY);\n for (const depIdx of this.#pendingDependencies) {\n if (depIdx !== idx) {\n expandBBox(this.#bboxesCoords, depIdx, minX, minY, maxX, maxY);\n }\n }\n for (const saveIdx of this.#savesStack) {\n if (saveIdx !== idx) {\n expandBBox(this.#bboxesCoords, saveIdx, minX, minY, maxX, maxY);\n }\n }\n for (const saveIdx of this.#markedContentStack) {\n if (saveIdx !== idx) {\n expandBBox(this.#bboxesCoords, saveIdx, minX, minY, maxX, maxY);\n }\n }\n\n if (!preserve) {\n this.#pendingDependencies.clear();\n this.#pendingBBoxIdx = -1;\n }\n }\n\n return this;\n }\n\n recordShowTextOperation(idx, preserve = false) {\n const deps = Array.from(this.#pendingDependencies);\n this.recordOperation(idx, preserve);\n this.recordIncrementalData(\"sameLineText\", idx);\n for (const dep of deps) {\n this.recordIncrementalData(\"sameLineText\", dep);\n }\n return this;\n }\n\n bboxToClipBoxDropOperation(idx, preserve = false) {\n if (this.#pendingBBoxIdx === idx) {\n this.#pendingBBoxIdx = -1;\n\n this.#clipBox[0] = Math.max(this.#clipBox[0], this.#pendingBBox[0]);\n this.#clipBox[1] = Math.max(this.#clipBox[1], this.#pendingBBox[1]);\n this.#clipBox[2] = Math.min(this.#clipBox[2], this.#pendingBBox[2]);\n this.#clipBox[3] = Math.min(this.#clipBox[3], this.#pendingBBox[3]);\n\n if (!preserve) {\n this.#pendingDependencies.clear();\n }\n }\n return this;\n }\n\n _takePendingDependencies() {\n const pendingDependencies = this.#pendingDependencies;\n this.#pendingDependencies = new Set();\n return pendingDependencies;\n }\n\n _extractOperation(idx) {\n const operation = this.#operations.get(idx);\n this.#operations.delete(idx);\n return operation;\n }\n\n _pushPendingDependencies(dependencies) {\n for (const dep of dependencies) {\n this.#pendingDependencies.add(dep);\n }\n }\n\n take() {\n this.#fontBBoxTrustworthy.clear();\n return new BBoxReader(this.#bboxes, this.#bboxesCoords);\n }\n\n takeDebugMetadata() {\n return this.#debugMetadata;\n }\n}\n\n/**\n * Used to track dependencies of nested operations list, that\n * should actually all map to the index of the operation that\n * contains the nested list.\n *\n * @implements {CanvasDependencyTracker}\n */\nclass CanvasNestedDependencyTracker {\n /** @type {CanvasDependencyTracker} */\n #dependencyTracker;\n\n /** @type {number} */\n #opIdx;\n\n #ignoreBBoxes;\n\n #nestingLevel = 0;\n\n #savesLevel = 0;\n\n constructor(dependencyTracker, opIdx, ignoreBBoxes) {\n if (\n dependencyTracker instanceof CanvasNestedDependencyTracker &&\n dependencyTracker.#ignoreBBoxes === !!ignoreBBoxes\n ) {\n // The goal of CanvasNestedDependencyTracker is to collapse all operations\n // into a single one. If we are already in a\n // CanvasNestedDependencyTracker, that is already happening.\n return dependencyTracker;\n }\n\n this.#dependencyTracker = dependencyTracker;\n this.#opIdx = opIdx;\n this.#ignoreBBoxes = !!ignoreBBoxes;\n }\n\n growOperationsCount() {\n throw new Error(\"Unreachable\");\n }\n\n save(opIdx) {\n this.#savesLevel++;\n this.#dependencyTracker.save(this.#opIdx);\n return this;\n }\n\n restore(opIdx) {\n if (this.#savesLevel > 0) {\n this.#dependencyTracker.restore(this.#opIdx);\n this.#savesLevel--;\n }\n return this;\n }\n\n recordOpenMarker(idx) {\n this.#nestingLevel++;\n return this;\n }\n\n getOpenMarker() {\n return this.#nestingLevel > 0\n ? this.#opIdx\n : this.#dependencyTracker.getOpenMarker();\n }\n\n recordCloseMarker(idx) {\n this.#nestingLevel--;\n return this;\n }\n\n beginMarkedContent(opIdx) {\n return this;\n }\n\n endMarkedContent(opIdx) {\n return this;\n }\n\n pushBaseTransform(ctx) {\n this.#dependencyTracker.pushBaseTransform(ctx);\n return this;\n }\n\n popBaseTransform() {\n this.#dependencyTracker.popBaseTransform();\n return this;\n }\n\n /**\n * @param {SimpleDependency} name\n * @param {number} idx\n */\n recordSimpleData(name, idx) {\n this.#dependencyTracker.recordSimpleData(name, this.#opIdx);\n return this;\n }\n\n /**\n * @param {IncrementalDependency} name\n * @param {number} idx\n */\n recordIncrementalData(name, idx) {\n this.#dependencyTracker.recordIncrementalData(name, this.#opIdx);\n return this;\n }\n\n /**\n * @param {IncrementalDependency} name\n * @param {number} idx\n */\n resetIncrementalData(name, idx) {\n this.#dependencyTracker.resetIncrementalData(name, this.#opIdx);\n return this;\n }\n\n recordNamedData(name, idx) {\n // Nested dependencies are not visible to the outside.\n return this;\n }\n\n /**\n * @param {SimpleDependency} name\n * @param {string} depName\n * @param {number} fallbackIdx\n */\n recordSimpleDataFromNamed(name, depName, fallbackIdx) {\n this.#dependencyTracker.recordSimpleDataFromNamed(\n name,\n depName,\n this.#opIdx\n );\n return this;\n }\n\n // All next operations, until the next .restore(), will depend on this\n recordFutureForcedDependency(name, idx) {\n this.#dependencyTracker.recordFutureForcedDependency(name, this.#opIdx);\n return this;\n }\n\n // All next operations, until the next .restore(), will depend on all\n // the already recorded data with the given names.\n inheritSimpleDataAsFutureForcedDependencies(names) {\n this.#dependencyTracker.inheritSimpleDataAsFutureForcedDependencies(names);\n return this;\n }\n\n inheritPendingDependenciesAsFutureForcedDependencies() {\n this.#dependencyTracker.inheritPendingDependenciesAsFutureForcedDependencies();\n return this;\n }\n\n resetBBox(idx) {\n if (!this.#ignoreBBoxes) {\n this.#dependencyTracker.resetBBox(this.#opIdx);\n }\n return this;\n }\n\n recordClipBox(idx, ctx, minX, maxX, minY, maxY) {\n if (!this.#ignoreBBoxes) {\n this.#dependencyTracker.recordClipBox(\n this.#opIdx,\n ctx,\n minX,\n maxX,\n minY,\n maxY\n );\n }\n return this;\n }\n\n recordBBox(idx, ctx, minX, maxX, minY, maxY) {\n if (!this.#ignoreBBoxes) {\n this.#dependencyTracker.recordBBox(\n this.#opIdx,\n ctx,\n minX,\n maxX,\n minY,\n maxY\n );\n }\n return this;\n }\n\n recordCharacterBBox(idx, ctx, font, scale, x, y, getMeasure) {\n if (!this.#ignoreBBoxes) {\n this.#dependencyTracker.recordCharacterBBox(\n this.#opIdx,\n ctx,\n font,\n scale,\n x,\n y,\n getMeasure\n );\n }\n return this;\n }\n\n recordFullPageBBox(idx) {\n if (!this.#ignoreBBoxes) {\n this.#dependencyTracker.recordFullPageBBox(this.#opIdx);\n }\n return this;\n }\n\n getSimpleIndex(dependencyName) {\n return this.#dependencyTracker.getSimpleIndex(dependencyName);\n }\n\n recordDependencies(idx, dependencyNames) {\n this.#dependencyTracker.recordDependencies(this.#opIdx, dependencyNames);\n return this;\n }\n\n recordNamedDependency(idx, name) {\n this.#dependencyTracker.recordNamedDependency(this.#opIdx, name);\n return this;\n }\n\n /**\n * @param {number} idx\n * @param {SimpleDependency[]} dependencyNames\n */\n recordOperation(idx) {\n this.#dependencyTracker.recordOperation(this.#opIdx, true);\n return this;\n }\n\n recordShowTextOperation(idx) {\n this.#dependencyTracker.recordShowTextOperation(this.#opIdx, true);\n return this;\n }\n\n bboxToClipBoxDropOperation(idx) {\n if (!this.#ignoreBBoxes) {\n this.#dependencyTracker.bboxToClipBoxDropOperation(this.#opIdx, true);\n }\n return this;\n }\n\n take() {\n throw new Error(\"Unreachable\");\n }\n\n takeDebugMetadata() {\n throw new Error(\"Unreachable\");\n }\n}\n\n/** @satisfies {Record} */\nconst Dependencies = {\n stroke: [\n \"path\",\n \"transform\",\n \"filter\",\n \"strokeColor\",\n \"strokeAlpha\",\n \"lineWidth\",\n \"lineCap\",\n \"lineJoin\",\n \"miterLimit\",\n \"dash\",\n ],\n fill: [\n \"path\",\n \"transform\",\n \"filter\",\n \"fillColor\",\n \"fillAlpha\",\n \"globalCompositeOperation\",\n \"SMask\",\n ],\n imageXObject: [\n \"transform\",\n \"SMask\",\n \"filter\",\n \"fillAlpha\",\n \"strokeAlpha\",\n \"globalCompositeOperation\",\n ],\n rawFillPath: [\"filter\", \"fillColor\", \"fillAlpha\"],\n showText: [\n \"transform\",\n \"leading\",\n \"charSpacing\",\n \"wordSpacing\",\n \"hScale\",\n \"textRise\",\n \"moveText\",\n \"textMatrix\",\n \"font\",\n \"fontObj\",\n \"filter\",\n \"fillColor\",\n \"textRenderingMode\",\n \"SMask\",\n \"fillAlpha\",\n \"strokeAlpha\",\n \"globalCompositeOperation\",\n\n \"sameLineText\",\n ],\n transform: [\"transform\"],\n transformAndFill: [\"transform\", \"fillColor\"],\n};\n\nexport { CanvasDependencyTracker, CanvasNestedDependencyTracker, Dependencies };\n","/* Copyright 2014 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n FormatError,\n info,\n MeshFigureType,\n unreachable,\n Util,\n} from \"../shared/util.js\";\nimport { getCurrentTransform } from \"./display_utils.js\";\n\nconst PathType = {\n FILL: \"Fill\",\n STROKE: \"Stroke\",\n SHADING: \"Shading\",\n};\n\nfunction applyBoundingBox(ctx, bbox) {\n if (!bbox) {\n return;\n }\n const width = bbox[2] - bbox[0];\n const height = bbox[3] - bbox[1];\n const region = new Path2D();\n region.rect(bbox[0], bbox[1], width, height);\n ctx.clip(region);\n}\n\nclass BaseShadingPattern {\n constructor() {\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n this.constructor === BaseShadingPattern\n ) {\n unreachable(\"Cannot initialize BaseShadingPattern.\");\n }\n }\n\n isModifyingCurrentTransform() {\n return false;\n }\n\n getPattern() {\n unreachable(\"Abstract method `getPattern` called.\");\n }\n}\n\nclass RadialAxialShadingPattern extends BaseShadingPattern {\n constructor(IR) {\n super();\n this._type = IR[1];\n this._bbox = IR[2];\n this._colorStops = IR[3];\n this._p0 = IR[4];\n this._p1 = IR[5];\n this._r0 = IR[6];\n this._r1 = IR[7];\n this.matrix = null;\n }\n\n _createGradient(ctx) {\n let grad;\n if (this._type === \"axial\") {\n grad = ctx.createLinearGradient(\n this._p0[0],\n this._p0[1],\n this._p1[0],\n this._p1[1]\n );\n } else if (this._type === \"radial\") {\n grad = ctx.createRadialGradient(\n this._p0[0],\n this._p0[1],\n this._r0,\n this._p1[0],\n this._p1[1],\n this._r1\n );\n }\n\n for (const colorStop of this._colorStops) {\n grad.addColorStop(colorStop[0], colorStop[1]);\n }\n return grad;\n }\n\n getPattern(ctx, owner, inverse, pathType) {\n let pattern;\n if (pathType === PathType.STROKE || pathType === PathType.FILL) {\n const ownerBBox = owner.current.getClippedPathBoundingBox(\n pathType,\n getCurrentTransform(ctx)\n ) || [0, 0, 0, 0];\n // Create a canvas that is only as big as the current path. This doesn't\n // allow us to cache the pattern, but it generally creates much smaller\n // canvases and saves memory use. See bug 1722807 for an example.\n const width = Math.ceil(ownerBBox[2] - ownerBBox[0]) || 1;\n const height = Math.ceil(ownerBBox[3] - ownerBBox[1]) || 1;\n\n const tmpCanvas = owner.cachedCanvases.getCanvas(\n \"pattern\",\n width,\n height\n );\n\n const tmpCtx = tmpCanvas.context;\n tmpCtx.clearRect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height);\n tmpCtx.beginPath();\n tmpCtx.rect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height);\n // Non shading fill patterns are positioned relative to the base transform\n // (usually the page's initial transform), but we may have created a\n // smaller canvas based on the path, so we must account for the shift.\n tmpCtx.translate(-ownerBBox[0], -ownerBBox[1]);\n inverse = Util.transform(inverse, [\n 1,\n 0,\n 0,\n 1,\n ownerBBox[0],\n ownerBBox[1],\n ]);\n\n tmpCtx.transform(...owner.baseTransform);\n if (this.matrix) {\n tmpCtx.transform(...this.matrix);\n }\n applyBoundingBox(tmpCtx, this._bbox);\n\n tmpCtx.fillStyle = this._createGradient(tmpCtx);\n tmpCtx.fill();\n\n pattern = ctx.createPattern(tmpCanvas.canvas, \"no-repeat\");\n const domMatrix = new DOMMatrix(inverse);\n pattern.setTransform(domMatrix);\n } else {\n // Shading fills are applied relative to the current matrix which is also\n // how canvas gradients work, so there's no need to do anything special\n // here.\n applyBoundingBox(ctx, this._bbox);\n pattern = this._createGradient(ctx);\n }\n return pattern;\n }\n}\n\nfunction drawTriangle(data, context, p1, p2, p3, c1, c2, c3) {\n // Very basic Gouraud-shaded triangle rasterization algorithm.\n const coords = context.coords,\n colors = context.colors;\n const bytes = data.data,\n rowSize = data.width * 4;\n let tmp;\n if (coords[p1 + 1] > coords[p2 + 1]) {\n tmp = p1;\n p1 = p2;\n p2 = tmp;\n tmp = c1;\n c1 = c2;\n c2 = tmp;\n }\n if (coords[p2 + 1] > coords[p3 + 1]) {\n tmp = p2;\n p2 = p3;\n p3 = tmp;\n tmp = c2;\n c2 = c3;\n c3 = tmp;\n }\n if (coords[p1 + 1] > coords[p2 + 1]) {\n tmp = p1;\n p1 = p2;\n p2 = tmp;\n tmp = c1;\n c1 = c2;\n c2 = tmp;\n }\n const x1 = (coords[p1] + context.offsetX) * context.scaleX;\n const y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY;\n const x2 = (coords[p2] + context.offsetX) * context.scaleX;\n const y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY;\n const x3 = (coords[p3] + context.offsetX) * context.scaleX;\n const y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY;\n if (y1 >= y3) {\n return;\n }\n const c1r = colors[c1],\n c1g = colors[c1 + 1],\n c1b = colors[c1 + 2];\n const c2r = colors[c2],\n c2g = colors[c2 + 1],\n c2b = colors[c2 + 2];\n const c3r = colors[c3],\n c3g = colors[c3 + 1],\n c3b = colors[c3 + 2];\n\n const minY = Math.round(y1),\n maxY = Math.round(y3);\n let xa, car, cag, cab;\n let xb, cbr, cbg, cbb;\n for (let y = minY; y <= maxY; y++) {\n if (y < y2) {\n const k = y < y1 ? 0 : (y1 - y) / (y1 - y2);\n xa = x1 - (x1 - x2) * k;\n car = c1r - (c1r - c2r) * k;\n cag = c1g - (c1g - c2g) * k;\n cab = c1b - (c1b - c2b) * k;\n } else {\n let k;\n if (y > y3) {\n k = 1;\n } else if (y2 === y3) {\n k = 0;\n } else {\n k = (y2 - y) / (y2 - y3);\n }\n xa = x2 - (x2 - x3) * k;\n car = c2r - (c2r - c3r) * k;\n cag = c2g - (c2g - c3g) * k;\n cab = c2b - (c2b - c3b) * k;\n }\n\n let k;\n if (y < y1) {\n k = 0;\n } else if (y > y3) {\n k = 1;\n } else {\n k = (y1 - y) / (y1 - y3);\n }\n xb = x1 - (x1 - x3) * k;\n cbr = c1r - (c1r - c3r) * k;\n cbg = c1g - (c1g - c3g) * k;\n cbb = c1b - (c1b - c3b) * k;\n const x1_ = Math.round(Math.min(xa, xb));\n const x2_ = Math.round(Math.max(xa, xb));\n let j = rowSize * y + x1_ * 4;\n for (let x = x1_; x <= x2_; x++) {\n k = (xa - x) / (xa - xb);\n if (k < 0) {\n k = 0;\n } else if (k > 1) {\n k = 1;\n }\n bytes[j++] = (car - (car - cbr) * k) | 0;\n bytes[j++] = (cag - (cag - cbg) * k) | 0;\n bytes[j++] = (cab - (cab - cbb) * k) | 0;\n bytes[j++] = 255;\n }\n }\n}\n\nfunction drawFigure(data, figure, context) {\n const ps = figure.coords;\n const cs = figure.colors;\n let i, ii;\n switch (figure.type) {\n case MeshFigureType.LATTICE:\n const verticesPerRow = figure.verticesPerRow;\n const rows = Math.floor(ps.length / verticesPerRow) - 1;\n const cols = verticesPerRow - 1;\n for (i = 0; i < rows; i++) {\n let q = i * verticesPerRow;\n for (let j = 0; j < cols; j++, q++) {\n drawTriangle(\n data,\n context,\n ps[q],\n ps[q + 1],\n ps[q + verticesPerRow],\n cs[q],\n cs[q + 1],\n cs[q + verticesPerRow]\n );\n drawTriangle(\n data,\n context,\n ps[q + verticesPerRow + 1],\n ps[q + 1],\n ps[q + verticesPerRow],\n cs[q + verticesPerRow + 1],\n cs[q + 1],\n cs[q + verticesPerRow]\n );\n }\n }\n break;\n case MeshFigureType.TRIANGLES:\n for (i = 0, ii = ps.length; i < ii; i += 3) {\n drawTriangle(\n data,\n context,\n ps[i],\n ps[i + 1],\n ps[i + 2],\n cs[i],\n cs[i + 1],\n cs[i + 2]\n );\n }\n break;\n default:\n throw new Error(\"illegal figure\");\n }\n}\n\nclass MeshShadingPattern extends BaseShadingPattern {\n constructor(IR) {\n super();\n this._coords = IR[2];\n this._colors = IR[3];\n this._figures = IR[4];\n this._bounds = IR[5];\n this._bbox = IR[6];\n this._background = IR[7];\n this.matrix = null;\n }\n\n _createMeshCanvas(combinedScale, backgroundColor, cachedCanvases) {\n // we will increase scale on some weird factor to let antialiasing take\n // care of \"rough\" edges\n const EXPECTED_SCALE = 1.1;\n // MAX_PATTERN_SIZE is used to avoid OOM situation.\n const MAX_PATTERN_SIZE = 3000; // 10in @ 300dpi shall be enough\n // We need to keep transparent border around our pattern for fill():\n // createPattern with 'no-repeat' will bleed edges across entire area.\n const BORDER_SIZE = 2;\n\n const offsetX = Math.floor(this._bounds[0]);\n const offsetY = Math.floor(this._bounds[1]);\n const boundsWidth = Math.ceil(this._bounds[2]) - offsetX;\n const boundsHeight = Math.ceil(this._bounds[3]) - offsetY;\n\n const width = Math.min(\n Math.ceil(Math.abs(boundsWidth * combinedScale[0] * EXPECTED_SCALE)),\n MAX_PATTERN_SIZE\n );\n const height = Math.min(\n Math.ceil(Math.abs(boundsHeight * combinedScale[1] * EXPECTED_SCALE)),\n MAX_PATTERN_SIZE\n );\n const scaleX = boundsWidth / width;\n const scaleY = boundsHeight / height;\n\n const context = {\n coords: this._coords,\n colors: this._colors,\n offsetX: -offsetX,\n offsetY: -offsetY,\n scaleX: 1 / scaleX,\n scaleY: 1 / scaleY,\n };\n\n const paddedWidth = width + BORDER_SIZE * 2;\n const paddedHeight = height + BORDER_SIZE * 2;\n\n const tmpCanvas = cachedCanvases.getCanvas(\n \"mesh\",\n paddedWidth,\n paddedHeight\n );\n const tmpCtx = tmpCanvas.context;\n\n const data = tmpCtx.createImageData(width, height);\n if (backgroundColor) {\n const bytes = data.data;\n for (let i = 0, ii = bytes.length; i < ii; i += 4) {\n bytes[i] = backgroundColor[0];\n bytes[i + 1] = backgroundColor[1];\n bytes[i + 2] = backgroundColor[2];\n bytes[i + 3] = 255;\n }\n }\n for (const figure of this._figures) {\n drawFigure(data, figure, context);\n }\n tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE);\n const canvas = tmpCanvas.canvas;\n\n return {\n canvas,\n offsetX: offsetX - BORDER_SIZE * scaleX,\n offsetY: offsetY - BORDER_SIZE * scaleY,\n scaleX,\n scaleY,\n };\n }\n\n isModifyingCurrentTransform() {\n return true;\n }\n\n getPattern(ctx, owner, inverse, pathType) {\n applyBoundingBox(ctx, this._bbox);\n const scale = new Float32Array(2);\n if (pathType === PathType.SHADING) {\n Util.singularValueDecompose2dScale(getCurrentTransform(ctx), scale);\n } else if (this.matrix) {\n // Obtain scale from matrix and current transformation matrix.\n Util.singularValueDecompose2dScale(this.matrix, scale);\n const [matrixScaleX, matrixScaleY] = scale;\n Util.singularValueDecompose2dScale(owner.baseTransform, scale);\n scale[0] *= matrixScaleX;\n scale[1] *= matrixScaleY;\n } else {\n Util.singularValueDecompose2dScale(owner.baseTransform, scale);\n }\n\n // Rasterizing on the main thread since sending/queue large canvases\n // might cause OOM.\n const temporaryPatternCanvas = this._createMeshCanvas(\n scale,\n pathType === PathType.SHADING ? null : this._background,\n owner.cachedCanvases\n );\n\n if (pathType !== PathType.SHADING) {\n ctx.setTransform(...owner.baseTransform);\n if (this.matrix) {\n ctx.transform(...this.matrix);\n }\n }\n\n ctx.translate(\n temporaryPatternCanvas.offsetX,\n temporaryPatternCanvas.offsetY\n );\n ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY);\n\n return ctx.createPattern(temporaryPatternCanvas.canvas, \"no-repeat\");\n }\n}\n\nclass DummyShadingPattern extends BaseShadingPattern {\n getPattern() {\n return \"hotpink\";\n }\n}\n\nfunction getShadingPattern(IR) {\n switch (IR[0]) {\n case \"RadialAxial\":\n return new RadialAxialShadingPattern(IR);\n case \"Mesh\":\n return new MeshShadingPattern(IR);\n case \"Dummy\":\n return new DummyShadingPattern();\n }\n throw new Error(`Unknown IR type: ${IR[0]}`);\n}\n\nconst PaintType = {\n COLORED: 1,\n UNCOLORED: 2,\n};\n\nclass TilingPattern {\n // 10in @ 300dpi shall be enough.\n static MAX_PATTERN_SIZE = 3000;\n\n constructor(IR, ctx, canvasGraphicsFactory, baseTransform) {\n this.color = IR[1];\n this.operatorList = IR[2];\n this.matrix = IR[3];\n this.bbox = IR[4];\n this.xstep = IR[5];\n this.ystep = IR[6];\n this.paintType = IR[7];\n this.tilingType = IR[8];\n this.ctx = ctx;\n this.canvasGraphicsFactory = canvasGraphicsFactory;\n this.baseTransform = baseTransform;\n }\n\n createPatternCanvas(owner, opIdx) {\n const {\n bbox,\n operatorList,\n paintType,\n tilingType,\n color,\n canvasGraphicsFactory,\n } = this;\n let { xstep, ystep } = this;\n xstep = Math.abs(xstep);\n ystep = Math.abs(ystep);\n\n info(\"TilingType: \" + tilingType);\n\n // A tiling pattern as defined by PDF spec 8.7.2 is a cell whose size is\n // described by bbox, and may repeat regularly by shifting the cell by\n // xstep and ystep.\n // Because the HTML5 canvas API does not support pattern repetition with\n // gaps in between, we use the xstep/ystep instead of the bbox's size.\n //\n // This has the following consequences (similarly for ystep):\n //\n // - If xstep is the same as bbox, then there is no observable difference.\n //\n // - If xstep is larger than bbox, then the pattern canvas is partially\n // empty: the area bounded by bbox is painted, the outside area is void.\n //\n // - If xstep is smaller than bbox, then the pixels between xstep and the\n // bbox boundary will be missing. This is INCORRECT behavior.\n // \"Figures on adjacent tiles should not overlap\" (PDF spec 8.7.3.1),\n // but overlapping cells without common pixels are still valid.\n\n const x0 = bbox[0],\n y0 = bbox[1],\n x1 = bbox[2],\n y1 = bbox[3];\n const width = x1 - x0;\n const height = y1 - y0;\n\n // Obtain scale from matrix and current transformation matrix.\n const scale = new Float32Array(2);\n Util.singularValueDecompose2dScale(this.matrix, scale);\n const [matrixScaleX, matrixScaleY] = scale;\n Util.singularValueDecompose2dScale(this.baseTransform, scale);\n const combinedScaleX = matrixScaleX * scale[0];\n const combinedScaleY = matrixScaleY * scale[1];\n\n let canvasWidth = width,\n canvasHeight = height,\n redrawHorizontally = false,\n redrawVertically = false;\n\n const xScaledStep = Math.ceil(xstep * combinedScaleX);\n const yScaledStep = Math.ceil(ystep * combinedScaleY);\n const xScaledWidth = Math.ceil(width * combinedScaleX);\n const yScaledHeight = Math.ceil(height * combinedScaleY);\n\n if (xScaledStep >= xScaledWidth) {\n canvasWidth = xstep;\n } else {\n redrawHorizontally = true;\n }\n if (yScaledStep >= yScaledHeight) {\n canvasHeight = ystep;\n } else {\n redrawVertically = true;\n }\n\n // Use width and height values that are as close as possible to the end\n // result when the pattern is used. Too low value makes the pattern look\n // blurry. Too large value makes it look too crispy.\n const dimx = this.getSizeAndScale(\n canvasWidth,\n this.ctx.canvas.width,\n combinedScaleX\n );\n const dimy = this.getSizeAndScale(\n canvasHeight,\n this.ctx.canvas.height,\n combinedScaleY\n );\n\n const tmpCanvas = owner.cachedCanvases.getCanvas(\n \"pattern\",\n dimx.size,\n dimy.size\n );\n const tmpCtx = tmpCanvas.context;\n const graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx, opIdx);\n graphics.groupLevel = owner.groupLevel;\n\n this.setFillAndStrokeStyleToContext(graphics, paintType, color);\n\n tmpCtx.translate(-dimx.scale * x0, -dimy.scale * y0);\n graphics.transform(\n // We pass 0 as the 'opIdx' argument, but the value is irrelevant.\n // We know that we are in a 'CanvasNestedDependencyTracker' that captures\n // all the sub-operations needed to create this pattern canvas and uses\n // the top-level operation index as their index.\n 0,\n dimx.scale,\n 0,\n 0,\n dimy.scale,\n 0,\n 0\n );\n\n // To match CanvasGraphics beginDrawing we must save the context here or\n // else we end up with unbalanced save/restores.\n tmpCtx.save();\n graphics.dependencyTracker?.save();\n\n this.clipBbox(graphics, x0, y0, x1, y1);\n\n graphics.baseTransform = getCurrentTransform(graphics.ctx);\n\n graphics.executeOperatorList(operatorList);\n\n graphics.endDrawing();\n\n graphics.dependencyTracker?.restore();\n tmpCtx.restore();\n\n if (redrawHorizontally || redrawVertically) {\n // The tile is overlapping itself, so we create a new tile with\n // dimensions xstep * ystep.\n // Then we draw the overlapping parts of the original tile on the new\n // tile.\n // Just as a side note, the code here works correctly even if we don't\n // have to redraw the tile horizontally or vertically. In that case, the\n // original tile is drawn on the new tile only once, but it's useless.\n const image = tmpCanvas.canvas;\n if (redrawHorizontally) {\n canvasWidth = xstep;\n }\n if (redrawVertically) {\n canvasHeight = ystep;\n }\n\n const dimx2 = this.getSizeAndScale(\n canvasWidth,\n this.ctx.canvas.width,\n combinedScaleX\n );\n const dimy2 = this.getSizeAndScale(\n canvasHeight,\n this.ctx.canvas.height,\n combinedScaleY\n );\n\n const xSize = dimx2.size;\n const ySize = dimy2.size;\n const tmpCanvas2 = owner.cachedCanvases.getCanvas(\n \"pattern-workaround\",\n xSize,\n ySize\n );\n const tmpCtx2 = tmpCanvas2.context;\n const ii = redrawHorizontally ? Math.floor(width / xstep) : 0;\n const jj = redrawVertically ? Math.floor(height / ystep) : 0;\n\n // Draw the overlapping parts of the original tile on the new tile.\n for (let i = 0; i <= ii; i++) {\n for (let j = 0; j <= jj; j++) {\n tmpCtx2.drawImage(\n image,\n xSize * i,\n ySize * j,\n xSize,\n ySize,\n 0,\n 0,\n xSize,\n ySize\n );\n }\n }\n return {\n canvas: tmpCanvas2.canvas,\n scaleX: dimx2.scale,\n scaleY: dimy2.scale,\n offsetX: x0,\n offsetY: y0,\n };\n }\n\n return {\n canvas: tmpCanvas.canvas,\n scaleX: dimx.scale,\n scaleY: dimy.scale,\n offsetX: x0,\n offsetY: y0,\n };\n }\n\n getSizeAndScale(step, realOutputSize, scale) {\n // MAX_PATTERN_SIZE is used to avoid OOM situation.\n // Use the destination canvas's size if it is bigger than the hard-coded\n // limit of MAX_PATTERN_SIZE to avoid clipping patterns that cover the\n // whole canvas.\n const maxSize = Math.max(TilingPattern.MAX_PATTERN_SIZE, realOutputSize);\n let size = Math.ceil(step * scale);\n if (size >= maxSize) {\n size = maxSize;\n } else {\n scale = size / step;\n }\n return { scale, size };\n }\n\n clipBbox(graphics, x0, y0, x1, y1) {\n const bboxWidth = x1 - x0;\n const bboxHeight = y1 - y0;\n graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight);\n Util.axialAlignedBoundingBox(\n [x0, y0, x1, y1],\n getCurrentTransform(graphics.ctx),\n graphics.current.minMax\n );\n graphics.clip();\n graphics.endPath();\n }\n\n setFillAndStrokeStyleToContext(graphics, paintType, color) {\n const context = graphics.ctx,\n current = graphics.current;\n switch (paintType) {\n case PaintType.COLORED:\n const { fillStyle, strokeStyle } = this.ctx;\n context.fillStyle = current.fillColor = fillStyle;\n context.strokeStyle = current.strokeColor = strokeStyle;\n break;\n case PaintType.UNCOLORED:\n context.fillStyle = context.strokeStyle = color;\n // Set color needed by image masks (fixes issues 3226 and 8741).\n current.fillColor = current.strokeColor = color;\n break;\n default:\n throw new FormatError(`Unsupported paint type: ${paintType}`);\n }\n }\n\n isModifyingCurrentTransform() {\n return false;\n }\n\n getPattern(ctx, owner, inverse, pathType, opIdx) {\n // PDF spec 8.7.2 NOTE 1: pattern's matrix is relative to initial matrix.\n let matrix = inverse;\n if (pathType !== PathType.SHADING) {\n matrix = Util.transform(matrix, owner.baseTransform);\n if (this.matrix) {\n matrix = Util.transform(matrix, this.matrix);\n }\n }\n\n const temporaryPatternCanvas = this.createPatternCanvas(owner, opIdx);\n\n let domMatrix = new DOMMatrix(matrix);\n // Rescale and so that the ctx.createPattern call generates a pattern with\n // the desired size.\n domMatrix = domMatrix.translate(\n temporaryPatternCanvas.offsetX,\n temporaryPatternCanvas.offsetY\n );\n domMatrix = domMatrix.scale(\n 1 / temporaryPatternCanvas.scaleX,\n 1 / temporaryPatternCanvas.scaleY\n );\n\n const pattern = ctx.createPattern(temporaryPatternCanvas.canvas, \"repeat\");\n pattern.setTransform(domMatrix);\n\n return pattern;\n }\n}\n\nexport { getShadingPattern, PathType, TilingPattern };\n","/* Copyright 2022 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FeatureTest, ImageKind } from \"./util.js\";\n\nfunction convertToRGBA(params) {\n switch (params.kind) {\n case ImageKind.GRAYSCALE_1BPP:\n return convertBlackAndWhiteToRGBA(params);\n case ImageKind.RGB_24BPP:\n return convertRGBToRGBA(params);\n }\n\n return null;\n}\n\nfunction convertBlackAndWhiteToRGBA({\n src,\n srcPos = 0,\n dest,\n width,\n height,\n nonBlackColor = 0xffffffff,\n inverseDecode = false,\n}) {\n const black = FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff;\n const [zeroMapping, oneMapping] = inverseDecode\n ? [nonBlackColor, black]\n : [black, nonBlackColor];\n const widthInSource = width >> 3;\n const widthRemainder = width & 7;\n const srcLength = src.length;\n dest = new Uint32Array(dest.buffer);\n let destPos = 0;\n\n for (let i = 0; i < height; i++) {\n for (const max = srcPos + widthInSource; srcPos < max; srcPos++) {\n const elem = srcPos < srcLength ? src[srcPos] : 255;\n dest[destPos++] = elem & 0b10000000 ? oneMapping : zeroMapping;\n dest[destPos++] = elem & 0b1000000 ? oneMapping : zeroMapping;\n dest[destPos++] = elem & 0b100000 ? oneMapping : zeroMapping;\n dest[destPos++] = elem & 0b10000 ? oneMapping : zeroMapping;\n dest[destPos++] = elem & 0b1000 ? oneMapping : zeroMapping;\n dest[destPos++] = elem & 0b100 ? oneMapping : zeroMapping;\n dest[destPos++] = elem & 0b10 ? oneMapping : zeroMapping;\n dest[destPos++] = elem & 0b1 ? oneMapping : zeroMapping;\n }\n if (widthRemainder === 0) {\n continue;\n }\n const elem = srcPos < srcLength ? src[srcPos++] : 255;\n for (let j = 0; j < widthRemainder; j++) {\n dest[destPos++] = elem & (1 << (7 - j)) ? oneMapping : zeroMapping;\n }\n }\n return { srcPos, destPos };\n}\n\nfunction convertRGBToRGBA({\n src,\n srcPos = 0,\n dest,\n destPos = 0,\n width,\n height,\n}) {\n let i = 0;\n const len = width * height * 3;\n const len32 = len >> 2;\n const src32 = new Uint32Array(src.buffer, srcPos, len32);\n\n if (FeatureTest.isLittleEndian) {\n // It's a way faster to do the shuffle manually instead of working\n // component by component with some Uint8 arrays.\n for (; i < len32 - 2; i += 3, destPos += 4) {\n const s1 = src32[i]; // R2B1G1R1\n const s2 = src32[i + 1]; // G3R3B2G2\n const s3 = src32[i + 2]; // B4G4R4B3\n\n dest[destPos] = s1 | 0xff000000;\n dest[destPos + 1] = (s1 >>> 24) | (s2 << 8) | 0xff000000;\n dest[destPos + 2] = (s2 >>> 16) | (s3 << 16) | 0xff000000;\n dest[destPos + 3] = (s3 >>> 8) | 0xff000000;\n }\n\n for (let j = i * 4, jj = srcPos + len; j < jj; j += 3) {\n dest[destPos++] =\n src[j] | (src[j + 1] << 8) | (src[j + 2] << 16) | 0xff000000;\n }\n } else {\n for (; i < len32 - 2; i += 3, destPos += 4) {\n const s1 = src32[i]; // R1G1B1R2\n const s2 = src32[i + 1]; // G2B2R3G3\n const s3 = src32[i + 2]; // B3R4G4B4\n\n dest[destPos] = s1 | 0xff;\n dest[destPos + 1] = (s1 << 24) | (s2 >>> 8) | 0xff;\n dest[destPos + 2] = (s2 << 16) | (s3 >>> 16) | 0xff;\n dest[destPos + 3] = (s3 << 8) | 0xff;\n }\n\n for (let j = i * 4, jj = srcPos + len; j < jj; j += 3) {\n dest[destPos++] =\n (src[j] << 24) | (src[j + 1] << 16) | (src[j + 2] << 8) | 0xff;\n }\n }\n\n return { srcPos: srcPos + len, destPos };\n}\n\nfunction grayToRGBA(src, dest) {\n if (FeatureTest.isLittleEndian) {\n for (let i = 0, ii = src.length; i < ii; i++) {\n dest[i] = (src[i] * 0x10101) | 0xff000000;\n }\n } else {\n for (let i = 0, ii = src.length; i < ii; i++) {\n dest[i] = (src[i] * 0x1010100) | 0x000000ff;\n }\n }\n}\n\nexport { convertBlackAndWhiteToRGBA, convertToRGBA, grayToRGBA };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n CanvasNestedDependencyTracker,\n Dependencies,\n} from \"./canvas_dependency_tracker.js\";\nimport {\n FeatureTest,\n FONT_IDENTITY_MATRIX,\n ImageKind,\n info,\n OPS,\n shadow,\n TextRenderingMode,\n unreachable,\n Util,\n warn,\n} from \"../shared/util.js\";\nimport {\n getCurrentTransform,\n getCurrentTransformInverse,\n makePathFromDrawOPS,\n OutputScale,\n PixelsPerInch,\n} from \"./display_utils.js\";\nimport {\n getShadingPattern,\n PathType,\n TilingPattern,\n} from \"./pattern_helper.js\";\nimport { convertBlackAndWhiteToRGBA } from \"../shared/image_utils.js\";\n\n// contexts store most of the state we need natively.\n// However, PDF needs a bit more state, which we store here.\n// Minimal font size that would be used during canvas fillText operations.\nconst MIN_FONT_SIZE = 16;\n// Maximum font size that would be used during canvas fillText operations.\nconst MAX_FONT_SIZE = 100;\n\n// Defines the time the `executeOperatorList`-method is going to be executing\n// before it stops and schedules a continue of execution.\nconst EXECUTION_TIME = 15; // ms\n// Defines the number of steps before checking the execution time.\nconst EXECUTION_STEPS = 10;\n\nconst FULL_CHUNK_HEIGHT = 16;\n\n// Only used in rescaleAndStroke. The goal is to avoid\n// creating a new DOMMatrix object each time we need it.\nconst SCALE_MATRIX = new DOMMatrix();\n\n// Used to get some coordinates.\nconst XY = new Float32Array(2);\n\n// Initial rectangle values for the minMax array.\nconst MIN_MAX_INIT = new Float32Array([\n Infinity,\n Infinity,\n -Infinity,\n -Infinity,\n]);\n\n/**\n * Overrides certain methods on a 2d ctx so that when they are called they\n * will also call the same method on the destCtx. The methods that are\n * overridden are all the transformation state modifiers, path creation, and\n * save/restore. We only forward these specific methods because they are the\n * only state modifiers that we cannot copy over when we switch contexts.\n *\n * To remove mirroring call `ctx._removeMirroring()`.\n *\n * @param {Object} ctx - The 2d canvas context that will duplicate its calls on\n * the destCtx.\n * @param {Object} destCtx - The 2d canvas context that will receive the\n * forwarded calls.\n */\nfunction mirrorContextOperations(ctx, destCtx) {\n if (ctx._removeMirroring) {\n throw new Error(\"Context is already forwarding operations.\");\n }\n ctx.__originalSave = ctx.save;\n ctx.__originalRestore = ctx.restore;\n ctx.__originalRotate = ctx.rotate;\n ctx.__originalScale = ctx.scale;\n ctx.__originalTranslate = ctx.translate;\n ctx.__originalTransform = ctx.transform;\n ctx.__originalSetTransform = ctx.setTransform;\n ctx.__originalResetTransform = ctx.resetTransform;\n ctx.__originalClip = ctx.clip;\n ctx.__originalMoveTo = ctx.moveTo;\n ctx.__originalLineTo = ctx.lineTo;\n ctx.__originalBezierCurveTo = ctx.bezierCurveTo;\n ctx.__originalRect = ctx.rect;\n ctx.__originalClosePath = ctx.closePath;\n ctx.__originalBeginPath = ctx.beginPath;\n\n ctx._removeMirroring = () => {\n ctx.save = ctx.__originalSave;\n ctx.restore = ctx.__originalRestore;\n ctx.rotate = ctx.__originalRotate;\n ctx.scale = ctx.__originalScale;\n ctx.translate = ctx.__originalTranslate;\n ctx.transform = ctx.__originalTransform;\n ctx.setTransform = ctx.__originalSetTransform;\n ctx.resetTransform = ctx.__originalResetTransform;\n\n ctx.clip = ctx.__originalClip;\n ctx.moveTo = ctx.__originalMoveTo;\n ctx.lineTo = ctx.__originalLineTo;\n ctx.bezierCurveTo = ctx.__originalBezierCurveTo;\n ctx.rect = ctx.__originalRect;\n ctx.closePath = ctx.__originalClosePath;\n ctx.beginPath = ctx.__originalBeginPath;\n delete ctx._removeMirroring;\n };\n\n ctx.save = function () {\n destCtx.save();\n this.__originalSave();\n };\n\n ctx.restore = function () {\n destCtx.restore();\n this.__originalRestore();\n };\n\n ctx.translate = function (x, y) {\n destCtx.translate(x, y);\n this.__originalTranslate(x, y);\n };\n\n ctx.scale = function (x, y) {\n destCtx.scale(x, y);\n this.__originalScale(x, y);\n };\n\n ctx.transform = function (a, b, c, d, e, f) {\n destCtx.transform(a, b, c, d, e, f);\n this.__originalTransform(a, b, c, d, e, f);\n };\n\n ctx.setTransform = function (a, b, c, d, e, f) {\n destCtx.setTransform(a, b, c, d, e, f);\n this.__originalSetTransform(a, b, c, d, e, f);\n };\n\n ctx.resetTransform = function () {\n destCtx.resetTransform();\n this.__originalResetTransform();\n };\n\n ctx.rotate = function (angle) {\n destCtx.rotate(angle);\n this.__originalRotate(angle);\n };\n\n ctx.clip = function (rule) {\n destCtx.clip(rule);\n this.__originalClip(rule);\n };\n\n ctx.moveTo = function (x, y) {\n destCtx.moveTo(x, y);\n this.__originalMoveTo(x, y);\n };\n\n ctx.lineTo = function (x, y) {\n destCtx.lineTo(x, y);\n this.__originalLineTo(x, y);\n };\n\n ctx.bezierCurveTo = function (cp1x, cp1y, cp2x, cp2y, x, y) {\n destCtx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n this.__originalBezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n };\n\n ctx.rect = function (x, y, width, height) {\n destCtx.rect(x, y, width, height);\n this.__originalRect(x, y, width, height);\n };\n\n ctx.closePath = function () {\n destCtx.closePath();\n this.__originalClosePath();\n };\n\n ctx.beginPath = function () {\n destCtx.beginPath();\n this.__originalBeginPath();\n };\n}\n\nclass CachedCanvases {\n constructor(canvasFactory) {\n this.canvasFactory = canvasFactory;\n this.cache = Object.create(null);\n }\n\n getCanvas(id, width, height) {\n let canvasEntry;\n if (this.cache[id] !== undefined) {\n canvasEntry = this.cache[id];\n this.canvasFactory.reset(canvasEntry, width, height);\n } else {\n canvasEntry = this.canvasFactory.create(width, height);\n this.cache[id] = canvasEntry;\n }\n return canvasEntry;\n }\n\n delete(id) {\n delete this.cache[id];\n }\n\n clear() {\n for (const id in this.cache) {\n const canvasEntry = this.cache[id];\n this.canvasFactory.destroy(canvasEntry);\n delete this.cache[id];\n }\n }\n}\n\nfunction drawImageAtIntegerCoords(\n ctx,\n srcImg,\n srcX,\n srcY,\n srcW,\n srcH,\n destX,\n destY,\n destW,\n destH\n) {\n const [a, b, c, d, tx, ty] = getCurrentTransform(ctx);\n if (b === 0 && c === 0) {\n // top-left corner is at (X, Y) and\n // bottom-right one is at (X + width, Y + height).\n\n // If leftX is 4.321 then it's rounded to 4.\n // If width is 10.432 then it's rounded to 11 because\n // rightX = leftX + width = 14.753 which is rounded to 15\n // so after rounding the total width is 11 (15 - 4).\n // It's why we can't just floor/ceil uniformly, it just depends\n // on the values we've.\n\n const tlX = destX * a + tx;\n const rTlX = Math.round(tlX);\n const tlY = destY * d + ty;\n const rTlY = Math.round(tlY);\n const brX = (destX + destW) * a + tx;\n\n // Some pdf contains images with 1x1 images so in case of 0-width after\n // scaling we must fallback on 1 to be sure there is something.\n const rWidth = Math.abs(Math.round(brX) - rTlX) || 1;\n const brY = (destY + destH) * d + ty;\n const rHeight = Math.abs(Math.round(brY) - rTlY) || 1;\n\n // We must apply a transformation in order to apply it on the image itself.\n // For example if a == 1 && d == -1, it means that the image itself is\n // mirrored w.r.t. the x-axis.\n ctx.setTransform(Math.sign(a), 0, 0, Math.sign(d), rTlX, rTlY);\n ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rWidth, rHeight);\n ctx.setTransform(a, b, c, d, tx, ty);\n\n return [rWidth, rHeight];\n }\n\n if (a === 0 && d === 0) {\n // This path is taken in issue9462.pdf (page 3).\n const tlX = destY * c + tx;\n const rTlX = Math.round(tlX);\n const tlY = destX * b + ty;\n const rTlY = Math.round(tlY);\n const brX = (destY + destH) * c + tx;\n const rWidth = Math.abs(Math.round(brX) - rTlX) || 1;\n const brY = (destX + destW) * b + ty;\n const rHeight = Math.abs(Math.round(brY) - rTlY) || 1;\n\n ctx.setTransform(0, Math.sign(b), Math.sign(c), 0, rTlX, rTlY);\n ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rHeight, rWidth);\n ctx.setTransform(a, b, c, d, tx, ty);\n\n return [rHeight, rWidth];\n }\n\n // Not a scale matrix so let the render handle the case without rounding.\n ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH);\n\n const scaleX = Math.hypot(a, b);\n const scaleY = Math.hypot(c, d);\n return [scaleX * destW, scaleY * destH];\n}\n\nclass CanvasExtraState {\n // Are soft masks and alpha values shapes or opacities?\n alphaIsShape = false;\n\n fontSize = 0;\n\n fontSizeScale = 1;\n\n textMatrix = null;\n\n textMatrixScale = 1;\n\n fontMatrix = FONT_IDENTITY_MATRIX;\n\n leading = 0;\n\n // Current point (in user coordinates)\n x = 0;\n\n y = 0;\n\n // Start of text line (in text coordinates)\n lineX = 0;\n\n lineY = 0;\n\n // Character and word spacing\n charSpacing = 0;\n\n wordSpacing = 0;\n\n textHScale = 1;\n\n textRenderingMode = TextRenderingMode.FILL;\n\n textRise = 0;\n\n // Default fore and background colors\n fillColor = \"#000000\";\n\n strokeColor = \"#000000\";\n\n patternFill = false;\n\n patternStroke = false;\n\n // Note: fill alpha applies to all non-stroking operations\n fillAlpha = 1;\n\n strokeAlpha = 1;\n\n lineWidth = 1;\n\n activeSMask = null;\n\n transferMaps = \"none\";\n\n constructor(width, height, preInit) {\n preInit?.(this);\n\n this.clipBox = new Float32Array([0, 0, width, height]);\n this.minMax = MIN_MAX_INIT.slice();\n }\n\n clone() {\n const clone = Object.create(this);\n clone.clipBox = this.clipBox.slice();\n clone.minMax = this.minMax.slice();\n return clone;\n }\n\n getPathBoundingBox(pathType = PathType.FILL, transform = null) {\n const box = this.minMax.slice();\n if (pathType === PathType.STROKE) {\n if (!transform) {\n unreachable(\"Stroke bounding box must include transform.\");\n }\n // Stroked paths can be outside of the path bounding box by 1/2 the line\n // width.\n Util.singularValueDecompose2dScale(transform, XY);\n const xStrokePad = (XY[0] * this.lineWidth) / 2;\n const yStrokePad = (XY[1] * this.lineWidth) / 2;\n box[0] -= xStrokePad;\n box[1] -= yStrokePad;\n box[2] += xStrokePad;\n box[3] += yStrokePad;\n }\n return box;\n }\n\n updateClipFromPath() {\n const intersect = Util.intersect(this.clipBox, this.getPathBoundingBox());\n this.startNewPathAndClipBox(intersect || [0, 0, 0, 0]);\n }\n\n isEmptyClip() {\n return this.minMax[0] === Infinity;\n }\n\n startNewPathAndClipBox(box) {\n this.clipBox.set(box, 0);\n this.minMax.set(MIN_MAX_INIT, 0);\n }\n\n getClippedPathBoundingBox(pathType = PathType.FILL, transform = null) {\n return Util.intersect(\n this.clipBox,\n this.getPathBoundingBox(pathType, transform)\n );\n }\n}\n\nfunction putBinaryImageData(ctx, imgData) {\n if (imgData instanceof ImageData) {\n ctx.putImageData(imgData, 0, 0);\n return;\n }\n\n // Put the image data to the canvas in chunks, rather than putting the\n // whole image at once. This saves JS memory, because the ImageData object\n // is smaller. It also possibly saves C++ memory within the implementation\n // of putImageData(). (E.g. in Firefox we make two short-lived copies of\n // the data passed to putImageData()). |n| shouldn't be too small, however,\n // because too many putImageData() calls will slow things down.\n //\n // Note: as written, if the last chunk is partial, the putImageData() call\n // will (conceptually) put pixels past the bounds of the canvas. But\n // that's ok; any such pixels are ignored.\n\n const height = imgData.height,\n width = imgData.width;\n const partialChunkHeight = height % FULL_CHUNK_HEIGHT;\n const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;\n const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;\n\n const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);\n let srcPos = 0,\n destPos;\n const src = imgData.data;\n const dest = chunkImgData.data;\n let i, j, thisChunkHeight, elemsInThisChunk;\n\n // There are multiple forms in which the pixel data can be passed, and\n // imgData.kind tells us which one this is.\n if (imgData.kind === ImageKind.GRAYSCALE_1BPP) {\n // Grayscale, 1 bit per pixel (i.e. black-and-white).\n const srcLength = src.byteLength;\n const dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2);\n const dest32DataLength = dest32.length;\n const fullSrcDiff = (width + 7) >> 3;\n const white = 0xffffffff;\n const black = FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff;\n\n for (i = 0; i < totalChunks; i++) {\n thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;\n destPos = 0;\n for (j = 0; j < thisChunkHeight; j++) {\n const srcDiff = srcLength - srcPos;\n let k = 0;\n const kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7;\n const kEndUnrolled = kEnd & ~7;\n let mask = 0;\n let srcByte = 0;\n for (; k < kEndUnrolled; k += 8) {\n srcByte = src[srcPos++];\n dest32[destPos++] = srcByte & 128 ? white : black;\n dest32[destPos++] = srcByte & 64 ? white : black;\n dest32[destPos++] = srcByte & 32 ? white : black;\n dest32[destPos++] = srcByte & 16 ? white : black;\n dest32[destPos++] = srcByte & 8 ? white : black;\n dest32[destPos++] = srcByte & 4 ? white : black;\n dest32[destPos++] = srcByte & 2 ? white : black;\n dest32[destPos++] = srcByte & 1 ? white : black;\n }\n for (; k < kEnd; k++) {\n if (mask === 0) {\n srcByte = src[srcPos++];\n mask = 128;\n }\n\n dest32[destPos++] = srcByte & mask ? white : black;\n mask >>= 1;\n }\n }\n // We ran out of input. Make all remaining pixels transparent.\n while (destPos < dest32DataLength) {\n dest32[destPos++] = 0;\n }\n\n ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);\n }\n } else if (imgData.kind === ImageKind.RGBA_32BPP) {\n // RGBA, 32-bits per pixel.\n j = 0;\n elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4;\n for (i = 0; i < fullChunks; i++) {\n dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));\n srcPos += elemsInThisChunk;\n\n ctx.putImageData(chunkImgData, 0, j);\n j += FULL_CHUNK_HEIGHT;\n }\n if (i < totalChunks) {\n elemsInThisChunk = width * partialChunkHeight * 4;\n dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));\n\n ctx.putImageData(chunkImgData, 0, j);\n }\n } else if (imgData.kind === ImageKind.RGB_24BPP) {\n // RGB, 24-bits per pixel.\n thisChunkHeight = FULL_CHUNK_HEIGHT;\n elemsInThisChunk = width * thisChunkHeight;\n for (i = 0; i < totalChunks; i++) {\n if (i >= fullChunks) {\n thisChunkHeight = partialChunkHeight;\n elemsInThisChunk = width * thisChunkHeight;\n }\n\n destPos = 0;\n for (j = elemsInThisChunk; j--; ) {\n dest[destPos++] = src[srcPos++];\n dest[destPos++] = src[srcPos++];\n dest[destPos++] = src[srcPos++];\n dest[destPos++] = 255;\n }\n\n ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);\n }\n } else {\n throw new Error(`bad image kind: ${imgData.kind}`);\n }\n}\n\nfunction putBinaryImageMask(ctx, imgData) {\n if (imgData.bitmap) {\n // The bitmap has been created in the worker.\n ctx.drawImage(imgData.bitmap, 0, 0);\n return;\n }\n\n // Slow path: OffscreenCanvas isn't available in the worker.\n const height = imgData.height,\n width = imgData.width;\n const partialChunkHeight = height % FULL_CHUNK_HEIGHT;\n const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;\n const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;\n\n const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);\n let srcPos = 0;\n const src = imgData.data;\n const dest = chunkImgData.data;\n\n for (let i = 0; i < totalChunks; i++) {\n const thisChunkHeight =\n i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;\n\n // Expand the mask so it can be used by the canvas. Any required\n // inversion has already been handled.\n\n ({ srcPos } = convertBlackAndWhiteToRGBA({\n src,\n srcPos,\n dest,\n width,\n height: thisChunkHeight,\n nonBlackColor: 0,\n }));\n\n ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);\n }\n}\n\nfunction copyCtxState(sourceCtx, destCtx) {\n const properties = [\n \"strokeStyle\",\n \"fillStyle\",\n \"fillRule\",\n \"globalAlpha\",\n \"lineWidth\",\n \"lineCap\",\n \"lineJoin\",\n \"miterLimit\",\n \"globalCompositeOperation\",\n \"font\",\n \"filter\",\n ];\n for (const property of properties) {\n if (sourceCtx[property] !== undefined) {\n destCtx[property] = sourceCtx[property];\n }\n }\n if (sourceCtx.setLineDash !== undefined) {\n destCtx.setLineDash(sourceCtx.getLineDash());\n destCtx.lineDashOffset = sourceCtx.lineDashOffset;\n }\n}\n\nfunction resetCtxToDefault(ctx) {\n ctx.strokeStyle = ctx.fillStyle = \"#000000\";\n ctx.fillRule = \"nonzero\";\n ctx.globalAlpha = 1;\n ctx.lineWidth = 1;\n ctx.lineCap = \"butt\";\n ctx.lineJoin = \"miter\";\n ctx.miterLimit = 10;\n ctx.globalCompositeOperation = \"source-over\";\n ctx.font = \"10px sans-serif\";\n if (ctx.setLineDash !== undefined) {\n ctx.setLineDash([]);\n ctx.lineDashOffset = 0;\n }\n const { filter } = ctx;\n if (filter !== \"none\" && filter !== \"\") {\n ctx.filter = \"none\";\n }\n}\n\nfunction getImageSmoothingEnabled(transform, interpolate) {\n // In section 8.9.5.3 of the PDF spec, it's mentioned that the interpolate\n // flag should be used when the image is upscaled.\n // In Firefox, smoothing is always used when downscaling images (bug 1360415).\n\n if (interpolate) {\n return true;\n }\n\n Util.singularValueDecompose2dScale(transform, XY);\n // Round to a 32bit float so that `<=` check below will pass for numbers that\n // are very close, but not exactly the same 64bit floats.\n const actualScale = Math.fround(\n OutputScale.pixelRatio * PixelsPerInch.PDF_TO_CSS_UNITS\n );\n // `XY` is a Float32Array.\n return XY[0] <= actualScale && XY[1] <= actualScale;\n}\n\nconst LINE_CAP_STYLES = [\"butt\", \"round\", \"square\"];\nconst LINE_JOIN_STYLES = [\"miter\", \"round\", \"bevel\"];\nconst NORMAL_CLIP = {};\nconst EO_CLIP = {};\n\nclass CanvasGraphics {\n constructor(\n canvasCtx,\n commonObjs,\n objs,\n canvasFactory,\n filterFactory,\n { optionalContentConfig, markedContentStack = null },\n annotationCanvasMap,\n pageColors,\n dependencyTracker\n ) {\n this.ctx = canvasCtx;\n this.current = new CanvasExtraState(\n this.ctx.canvas.width,\n this.ctx.canvas.height\n );\n this.stateStack = [];\n this.pendingClip = null;\n this.pendingEOFill = false;\n this.res = null;\n this.xobjs = null;\n this.commonObjs = commonObjs;\n this.objs = objs;\n this.canvasFactory = canvasFactory;\n this.filterFactory = filterFactory;\n this.groupStack = [];\n // Patterns are painted relative to the initial page/form transform, see\n // PDF spec 8.7.2 NOTE 1.\n this.baseTransform = null;\n this.baseTransformStack = [];\n this.groupLevel = 0;\n this.smaskStack = [];\n this.smaskCounter = 0;\n this.tempSMask = null;\n this.suspendedCtx = null;\n this.contentVisible = true;\n this.markedContentStack = markedContentStack || [];\n this.optionalContentConfig = optionalContentConfig;\n this.cachedCanvases = new CachedCanvases(this.canvasFactory);\n this.cachedPatterns = new Map();\n this.annotationCanvasMap = annotationCanvasMap;\n this.viewportScale = 1;\n this.outputScaleX = 1;\n this.outputScaleY = 1;\n this.pageColors = pageColors;\n\n this._cachedScaleForStroking = [-1, 0];\n this._cachedGetSinglePixelWidth = null;\n this._cachedBitmapsMap = new Map();\n\n this.dependencyTracker = dependencyTracker ?? null;\n }\n\n getObject(opIdx, data, fallback = null) {\n if (typeof data === \"string\") {\n this.dependencyTracker?.recordNamedDependency(opIdx, data);\n return data.startsWith(\"g_\")\n ? this.commonObjs.get(data)\n : this.objs.get(data);\n }\n return fallback;\n }\n\n beginDrawing({\n transform,\n viewport,\n transparency = false,\n background = null,\n }) {\n // For pdfs that use blend modes we have to clear the canvas else certain\n // blend modes can look wrong since we'd be blending with a white\n // backdrop. The problem with a transparent backdrop though is we then\n // don't get sub pixel anti aliasing on text, creating temporary\n // transparent canvas when we have blend modes.\n const width = this.ctx.canvas.width;\n const height = this.ctx.canvas.height;\n\n const savedFillStyle = this.ctx.fillStyle;\n this.ctx.fillStyle = background || \"#ffffff\";\n this.ctx.fillRect(0, 0, width, height);\n this.ctx.fillStyle = savedFillStyle;\n\n if (transparency) {\n const transparentCanvas = this.cachedCanvases.getCanvas(\n \"transparent\",\n width,\n height\n );\n this.compositeCtx = this.ctx;\n this.transparentCanvas = transparentCanvas.canvas;\n this.ctx = transparentCanvas.context;\n this.ctx.save();\n // The transform can be applied before rendering, transferring it to\n // the new canvas.\n this.ctx.transform(...getCurrentTransform(this.compositeCtx));\n }\n\n this.ctx.save();\n resetCtxToDefault(this.ctx);\n if (transform) {\n this.ctx.transform(...transform);\n this.outputScaleX = transform[0];\n this.outputScaleY = transform[0];\n }\n this.ctx.transform(...viewport.transform);\n this.viewportScale = viewport.scale;\n\n this.baseTransform = getCurrentTransform(this.ctx);\n }\n\n executeOperatorList(\n operatorList,\n executionStartIdx,\n continueCallback,\n stepper,\n operationsFilter\n ) {\n const argsArray = operatorList.argsArray;\n const fnArray = operatorList.fnArray;\n let i = executionStartIdx || 0;\n const argsArrayLen = argsArray.length;\n\n // Sometimes the OperatorList to execute is empty.\n if (argsArrayLen === i) {\n return i;\n }\n\n const chunkOperations =\n argsArrayLen - i > EXECUTION_STEPS &&\n typeof continueCallback === \"function\";\n const endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0;\n let steps = 0;\n\n const commonObjs = this.commonObjs;\n const objs = this.objs;\n let fnId, fnArgs;\n\n while (true) {\n if (stepper !== undefined && i === stepper.nextBreakPoint) {\n stepper.breakIt(i, continueCallback);\n return i;\n }\n\n if (!operationsFilter || operationsFilter(i)) {\n fnId = fnArray[i];\n // TODO: There is a `undefined` coming from somewhere.\n fnArgs = argsArray[i] ?? null;\n\n if (fnId !== OPS.dependency) {\n if (fnArgs === null) {\n this[fnId](i);\n } else {\n this[fnId](i, ...fnArgs);\n }\n } else {\n for (const depObjId of fnArgs) {\n this.dependencyTracker?.recordNamedData(depObjId, i);\n const objsPool = depObjId.startsWith(\"g_\") ? commonObjs : objs;\n\n // If the promise isn't resolved yet, add the continueCallback\n // to the promise and bail out.\n if (!objsPool.has(depObjId)) {\n objsPool.get(depObjId, continueCallback);\n return i;\n }\n }\n }\n }\n\n i++;\n\n // If the entire operatorList was executed, stop as were done.\n if (i === argsArrayLen) {\n return i;\n }\n\n // If the execution took longer then a certain amount of time and\n // `continueCallback` is specified, interrupt the execution.\n if (chunkOperations && ++steps > EXECUTION_STEPS) {\n if (Date.now() > endTime) {\n continueCallback();\n return i;\n }\n steps = 0;\n }\n\n // If the operatorList isn't executed completely yet OR the execution\n // time was short enough, do another execution round.\n }\n }\n\n #restoreInitialState() {\n // Finishing all opened operations such as SMask group painting.\n while (this.stateStack.length || this.inSMaskMode) {\n this.restore();\n }\n\n this.current.activeSMask = null;\n this.ctx.restore();\n\n if (this.transparentCanvas) {\n this.ctx = this.compositeCtx;\n this.ctx.save();\n this.ctx.setTransform(1, 0, 0, 1, 0, 0); // Avoid apply transform twice\n this.ctx.drawImage(this.transparentCanvas, 0, 0);\n this.ctx.restore();\n this.transparentCanvas = null;\n }\n }\n\n endDrawing() {\n this.#restoreInitialState();\n\n this.cachedCanvases.clear();\n this.cachedPatterns.clear();\n\n for (const cache of this._cachedBitmapsMap.values()) {\n for (const canvas of cache.values()) {\n if (\n typeof HTMLCanvasElement !== \"undefined\" &&\n canvas instanceof HTMLCanvasElement\n ) {\n canvas.width = canvas.height = 0;\n }\n }\n cache.clear();\n }\n this._cachedBitmapsMap.clear();\n this.#drawFilter();\n }\n\n #drawFilter() {\n if (this.pageColors) {\n const hcmFilterId = this.filterFactory.addHCMFilter(\n this.pageColors.foreground,\n this.pageColors.background\n );\n if (hcmFilterId !== \"none\") {\n const savedFilter = this.ctx.filter;\n this.ctx.filter = hcmFilterId;\n this.ctx.drawImage(this.ctx.canvas, 0, 0);\n this.ctx.filter = savedFilter;\n }\n }\n }\n\n _scaleImage(img, inverseTransform) {\n // Vertical or horizontal scaling shall not be more than 2 to not lose the\n // pixels during drawImage operation, painting on the temporary canvas(es)\n // that are twice smaller in size.\n\n // displayWidth and displayHeight are used for VideoFrame.\n const width = img.width ?? img.displayWidth;\n const height = img.height ?? img.displayHeight;\n let widthScale = Math.max(\n Math.hypot(inverseTransform[0], inverseTransform[1]),\n 1\n );\n let heightScale = Math.max(\n Math.hypot(inverseTransform[2], inverseTransform[3]),\n 1\n );\n\n let paintWidth = width,\n paintHeight = height;\n let tmpCanvasId = \"prescale1\";\n let tmpCanvas, tmpCtx;\n while (\n (widthScale > 2 && paintWidth > 1) ||\n (heightScale > 2 && paintHeight > 1)\n ) {\n let newWidth = paintWidth,\n newHeight = paintHeight;\n if (widthScale > 2 && paintWidth > 1) {\n // See bug 1820511 (Windows specific bug).\n // TODO: once the above bug is fixed we could revert to:\n // newWidth = Math.ceil(paintWidth / 2);\n newWidth =\n paintWidth >= 16384\n ? Math.floor(paintWidth / 2) - 1 || 1\n : Math.ceil(paintWidth / 2);\n widthScale /= paintWidth / newWidth;\n }\n if (heightScale > 2 && paintHeight > 1) {\n // TODO: see the comment above.\n newHeight =\n paintHeight >= 16384\n ? Math.floor(paintHeight / 2) - 1 || 1\n : Math.ceil(paintHeight) / 2;\n heightScale /= paintHeight / newHeight;\n }\n tmpCanvas = this.cachedCanvases.getCanvas(\n tmpCanvasId,\n newWidth,\n newHeight\n );\n tmpCtx = tmpCanvas.context;\n tmpCtx.clearRect(0, 0, newWidth, newHeight);\n tmpCtx.drawImage(\n img,\n 0,\n 0,\n paintWidth,\n paintHeight,\n 0,\n 0,\n newWidth,\n newHeight\n );\n img = tmpCanvas.canvas;\n paintWidth = newWidth;\n paintHeight = newHeight;\n tmpCanvasId = tmpCanvasId === \"prescale1\" ? \"prescale2\" : \"prescale1\";\n }\n return {\n img,\n paintWidth,\n paintHeight,\n };\n }\n\n _createMaskCanvas(opIdx, img) {\n const ctx = this.ctx;\n const { width, height } = img;\n const fillColor = this.current.fillColor;\n const isPatternFill = this.current.patternFill;\n const currentTransform = getCurrentTransform(ctx);\n\n let cache, cacheKey, scaled, maskCanvas;\n if ((img.bitmap || img.data) && img.count > 1) {\n const mainKey = img.bitmap || img.data.buffer;\n // We're reusing the same image several times, so we can cache it.\n // In case we've a pattern fill we just keep the scaled version of\n // the image.\n // Only the scaling part matters, the translation part is just used\n // to compute offsets (but not when filling patterns see #15573).\n // TODO: handle the case of a pattern fill if it's possible.\n cacheKey = JSON.stringify(\n isPatternFill\n ? currentTransform\n : [currentTransform.slice(0, 4), fillColor]\n );\n\n cache = this._cachedBitmapsMap.get(mainKey);\n if (!cache) {\n cache = new Map();\n this._cachedBitmapsMap.set(mainKey, cache);\n }\n const cachedImage = cache.get(cacheKey);\n if (cachedImage && !isPatternFill) {\n const offsetX = Math.round(\n Math.min(currentTransform[0], currentTransform[2]) +\n currentTransform[4]\n );\n const offsetY = Math.round(\n Math.min(currentTransform[1], currentTransform[3]) +\n currentTransform[5]\n );\n\n this.dependencyTracker?.recordDependencies(\n opIdx,\n Dependencies.transformAndFill\n );\n return {\n canvas: cachedImage,\n offsetX,\n offsetY,\n };\n }\n scaled = cachedImage;\n }\n\n if (!scaled) {\n maskCanvas = this.cachedCanvases.getCanvas(\"maskCanvas\", width, height);\n putBinaryImageMask(maskCanvas.context, img);\n }\n\n // Create the mask canvas at the size it will be drawn at and also set\n // its transform to match the current transform so if there are any\n // patterns applied they will be applied relative to the correct\n // transform.\n\n let maskToCanvas = Util.transform(currentTransform, [\n 1 / width,\n 0,\n 0,\n -1 / height,\n 0,\n 0,\n ]);\n maskToCanvas = Util.transform(maskToCanvas, [1, 0, 0, 1, 0, -height]);\n const minMax = MIN_MAX_INIT.slice();\n Util.axialAlignedBoundingBox([0, 0, width, height], maskToCanvas, minMax);\n const [minX, minY, maxX, maxY] = minMax;\n const drawnWidth = Math.round(maxX - minX) || 1;\n const drawnHeight = Math.round(maxY - minY) || 1;\n const fillCanvas = this.cachedCanvases.getCanvas(\n \"fillCanvas\",\n drawnWidth,\n drawnHeight\n );\n const fillCtx = fillCanvas.context;\n\n // The offset will be the top-left coordinate mask.\n // If objToCanvas is [a,b,c,d,e,f] then:\n // - offsetX = min(a, c) + e\n // - offsetY = min(b, d) + f\n const offsetX = minX;\n const offsetY = minY;\n fillCtx.translate(-offsetX, -offsetY);\n fillCtx.transform(...maskToCanvas);\n\n if (!scaled) {\n // Pre-scale if needed to improve image smoothing.\n scaled = this._scaleImage(\n maskCanvas.canvas,\n getCurrentTransformInverse(fillCtx)\n );\n scaled = scaled.img;\n if (cache && isPatternFill) {\n cache.set(cacheKey, scaled);\n }\n }\n\n fillCtx.imageSmoothingEnabled = getImageSmoothingEnabled(\n getCurrentTransform(fillCtx),\n img.interpolate\n );\n\n drawImageAtIntegerCoords(\n fillCtx,\n scaled,\n 0,\n 0,\n scaled.width,\n scaled.height,\n 0,\n 0,\n width,\n height\n );\n fillCtx.globalCompositeOperation = \"source-in\";\n\n const inverse = Util.transform(getCurrentTransformInverse(fillCtx), [\n 1,\n 0,\n 0,\n 1,\n -offsetX,\n -offsetY,\n ]);\n fillCtx.fillStyle = isPatternFill\n ? fillColor.getPattern(ctx, this, inverse, PathType.FILL, opIdx)\n : fillColor;\n\n fillCtx.fillRect(0, 0, width, height);\n\n if (cache && !isPatternFill) {\n // The fill canvas is put in the cache associated to the mask image\n // so we must remove from the cached canvas: it mustn't be used again.\n this.cachedCanvases.delete(\"fillCanvas\");\n cache.set(cacheKey, fillCanvas.canvas);\n }\n\n this.dependencyTracker?.recordDependencies(\n opIdx,\n Dependencies.transformAndFill\n );\n\n // Round the offsets to avoid drawing fractional pixels.\n return {\n canvas: fillCanvas.canvas,\n offsetX: Math.round(offsetX),\n offsetY: Math.round(offsetY),\n };\n }\n\n // Graphics state\n setLineWidth(opIdx, width) {\n this.dependencyTracker?.recordSimpleData(\"lineWidth\", opIdx);\n if (width !== this.current.lineWidth) {\n this._cachedScaleForStroking[0] = -1;\n }\n this.current.lineWidth = width;\n this.ctx.lineWidth = width;\n }\n\n setLineCap(opIdx, style) {\n this.dependencyTracker?.recordSimpleData(\"lineCap\", opIdx);\n this.ctx.lineCap = LINE_CAP_STYLES[style];\n }\n\n setLineJoin(opIdx, style) {\n this.dependencyTracker?.recordSimpleData(\"lineJoin\", opIdx);\n this.ctx.lineJoin = LINE_JOIN_STYLES[style];\n }\n\n setMiterLimit(opIdx, limit) {\n this.dependencyTracker?.recordSimpleData(\"miterLimit\", opIdx);\n this.ctx.miterLimit = limit;\n }\n\n setDash(opIdx, dashArray, dashPhase) {\n this.dependencyTracker?.recordSimpleData(\"dash\", opIdx);\n const ctx = this.ctx;\n if (ctx.setLineDash !== undefined) {\n ctx.setLineDash(dashArray);\n ctx.lineDashOffset = dashPhase;\n }\n }\n\n setRenderingIntent(opIdx, intent) {\n // This operation is ignored since we haven't found a use case for it yet.\n }\n\n setFlatness(opIdx, flatness) {\n // This operation is ignored since we haven't found a use case for it yet.\n }\n\n setGState(opIdx, states) {\n for (const [key, value] of states) {\n switch (key) {\n case \"LW\":\n this.setLineWidth(opIdx, value);\n break;\n case \"LC\":\n this.setLineCap(opIdx, value);\n break;\n case \"LJ\":\n this.setLineJoin(opIdx, value);\n break;\n case \"ML\":\n this.setMiterLimit(opIdx, value);\n break;\n case \"D\":\n this.setDash(opIdx, value[0], value[1]);\n break;\n case \"RI\":\n this.setRenderingIntent(opIdx, value);\n break;\n case \"FL\":\n this.setFlatness(opIdx, value);\n break;\n case \"Font\":\n this.setFont(opIdx, value[0], value[1]);\n break;\n case \"CA\":\n this.dependencyTracker?.recordSimpleData(\"strokeAlpha\", opIdx);\n this.current.strokeAlpha = value;\n break;\n case \"ca\":\n this.dependencyTracker?.recordSimpleData(\"fillAlpha\", opIdx);\n this.ctx.globalAlpha = this.current.fillAlpha = value;\n break;\n case \"BM\":\n this.dependencyTracker?.recordSimpleData(\n \"globalCompositeOperation\",\n opIdx\n );\n this.ctx.globalCompositeOperation = value;\n break;\n case \"SMask\":\n this.dependencyTracker?.recordSimpleData(\"SMask\", opIdx);\n this.current.activeSMask = value ? this.tempSMask : null;\n this.tempSMask = null;\n this.checkSMaskState();\n break;\n case \"TR\":\n this.dependencyTracker?.recordSimpleData(\"filter\", opIdx);\n this.ctx.filter = this.current.transferMaps =\n this.filterFactory.addFilter(value);\n break;\n }\n }\n }\n\n get inSMaskMode() {\n return !!this.suspendedCtx;\n }\n\n checkSMaskState() {\n const inSMaskMode = this.inSMaskMode;\n if (this.current.activeSMask && !inSMaskMode) {\n this.beginSMaskMode();\n } else if (!this.current.activeSMask && inSMaskMode) {\n this.endSMaskMode();\n }\n // Else, the state is okay and nothing needs to be done.\n }\n\n /**\n * Soft mask mode takes the current main drawing canvas and replaces it with\n * a temporary canvas. Any drawing operations that happen on the temporary\n * canvas need to be composed with the main canvas that was suspended (see\n * `compose()`). The temporary canvas also duplicates many of its operations\n * on the suspended canvas to keep them in sync, so that when the soft mask\n * mode ends any clipping paths or transformations will still be active and in\n * the right order on the canvas' graphics state stack.\n */\n beginSMaskMode(opIdx) {\n if (this.inSMaskMode) {\n throw new Error(\"beginSMaskMode called while already in smask mode\");\n }\n const drawnWidth = this.ctx.canvas.width;\n const drawnHeight = this.ctx.canvas.height;\n const cacheId = \"smaskGroupAt\" + this.groupLevel;\n const scratchCanvas = this.cachedCanvases.getCanvas(\n cacheId,\n drawnWidth,\n drawnHeight\n );\n this.suspendedCtx = this.ctx;\n const ctx = (this.ctx = scratchCanvas.context);\n ctx.setTransform(this.suspendedCtx.getTransform());\n copyCtxState(this.suspendedCtx, ctx);\n mirrorContextOperations(ctx, this.suspendedCtx);\n\n this.setGState(opIdx, [[\"BM\", \"source-over\"]]);\n }\n\n endSMaskMode() {\n if (!this.inSMaskMode) {\n throw new Error(\"endSMaskMode called while not in smask mode\");\n }\n // The soft mask is done, now restore the suspended canvas as the main\n // drawing canvas.\n this.ctx._removeMirroring();\n copyCtxState(this.ctx, this.suspendedCtx);\n this.ctx = this.suspendedCtx;\n\n this.suspendedCtx = null;\n }\n\n compose(dirtyBox) {\n if (!this.current.activeSMask) {\n return;\n }\n\n if (!dirtyBox) {\n dirtyBox = [0, 0, this.ctx.canvas.width, this.ctx.canvas.height];\n } else {\n dirtyBox[0] = Math.floor(dirtyBox[0]);\n dirtyBox[1] = Math.floor(dirtyBox[1]);\n dirtyBox[2] = Math.ceil(dirtyBox[2]);\n dirtyBox[3] = Math.ceil(dirtyBox[3]);\n }\n const smask = this.current.activeSMask;\n const suspendedCtx = this.suspendedCtx;\n\n this.composeSMask(suspendedCtx, smask, this.ctx, dirtyBox);\n // Whatever was drawn has been moved to the suspended canvas, now clear it\n // out of the current canvas.\n this.ctx.save();\n this.ctx.setTransform(1, 0, 0, 1, 0, 0);\n this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);\n this.ctx.restore();\n }\n\n composeSMask(ctx, smask, layerCtx, layerBox) {\n const layerOffsetX = layerBox[0];\n const layerOffsetY = layerBox[1];\n const layerWidth = layerBox[2] - layerOffsetX;\n const layerHeight = layerBox[3] - layerOffsetY;\n if (layerWidth === 0 || layerHeight === 0) {\n return;\n }\n this.genericComposeSMask(\n smask.context,\n layerCtx,\n layerWidth,\n layerHeight,\n smask.subtype,\n smask.backdrop,\n smask.transferMap,\n layerOffsetX,\n layerOffsetY,\n smask.offsetX,\n smask.offsetY\n );\n ctx.save();\n ctx.globalAlpha = 1;\n ctx.globalCompositeOperation = \"source-over\";\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n ctx.drawImage(layerCtx.canvas, 0, 0);\n ctx.restore();\n }\n\n genericComposeSMask(\n maskCtx,\n layerCtx,\n width,\n height,\n subtype,\n backdrop,\n transferMap,\n layerOffsetX,\n layerOffsetY,\n maskOffsetX,\n maskOffsetY\n ) {\n let maskCanvas = maskCtx.canvas;\n let maskX = layerOffsetX - maskOffsetX;\n let maskY = layerOffsetY - maskOffsetY;\n\n if (backdrop) {\n if (\n maskX < 0 ||\n maskY < 0 ||\n maskX + width > maskCanvas.width ||\n maskY + height > maskCanvas.height\n ) {\n const canvas = this.cachedCanvases.getCanvas(\n \"maskExtension\",\n width,\n height\n );\n const ctx = canvas.context;\n ctx.drawImage(maskCanvas, -maskX, -maskY);\n ctx.globalCompositeOperation = \"destination-atop\";\n ctx.fillStyle = backdrop;\n ctx.fillRect(0, 0, width, height);\n ctx.globalCompositeOperation = \"source-over\";\n\n maskCanvas = canvas.canvas;\n maskX = maskY = 0;\n } else {\n maskCtx.save();\n maskCtx.globalAlpha = 1;\n maskCtx.setTransform(1, 0, 0, 1, 0, 0);\n const clip = new Path2D();\n clip.rect(maskX, maskY, width, height);\n maskCtx.clip(clip);\n maskCtx.globalCompositeOperation = \"destination-atop\";\n maskCtx.fillStyle = backdrop;\n maskCtx.fillRect(maskX, maskY, width, height);\n maskCtx.restore();\n }\n }\n\n layerCtx.save();\n layerCtx.globalAlpha = 1;\n layerCtx.setTransform(1, 0, 0, 1, 0, 0);\n\n if (subtype === \"Alpha\" && transferMap) {\n layerCtx.filter = this.filterFactory.addAlphaFilter(transferMap);\n } else if (subtype === \"Luminosity\") {\n layerCtx.filter = this.filterFactory.addLuminosityFilter(transferMap);\n }\n\n const clip = new Path2D();\n clip.rect(layerOffsetX, layerOffsetY, width, height);\n layerCtx.clip(clip);\n layerCtx.globalCompositeOperation = \"destination-in\";\n layerCtx.drawImage(\n maskCanvas,\n maskX,\n maskY,\n width,\n height,\n layerOffsetX,\n layerOffsetY,\n width,\n height\n );\n layerCtx.restore();\n }\n\n save(opIdx) {\n if (this.inSMaskMode) {\n // SMask mode may be turned on/off causing us to lose graphics state.\n // Copy the temporary canvas state to the main(suspended) canvas to keep\n // it in sync.\n copyCtxState(this.ctx, this.suspendedCtx);\n }\n this.ctx.save();\n const old = this.current;\n this.stateStack.push(old);\n this.current = old.clone();\n this.dependencyTracker?.save(opIdx);\n }\n\n restore(opIdx) {\n this.dependencyTracker?.restore(opIdx);\n\n if (this.stateStack.length === 0) {\n if (this.inSMaskMode) {\n this.endSMaskMode();\n }\n return;\n }\n\n this.current = this.stateStack.pop();\n this.ctx.restore();\n if (this.inSMaskMode) {\n // Graphics state is stored on the main(suspended) canvas. Restore its\n // state then copy it over to the temporary canvas.\n copyCtxState(this.suspendedCtx, this.ctx);\n }\n this.checkSMaskState();\n\n // Ensure that the clipping path is reset (fixes issue6413.pdf).\n this.pendingClip = null;\n\n this._cachedScaleForStroking[0] = -1;\n this._cachedGetSinglePixelWidth = null;\n }\n\n transform(opIdx, a, b, c, d, e, f) {\n this.dependencyTracker?.recordIncrementalData(\"transform\", opIdx);\n this.ctx.transform(a, b, c, d, e, f);\n\n this._cachedScaleForStroking[0] = -1;\n this._cachedGetSinglePixelWidth = null;\n }\n\n // Path\n constructPath(opIdx, op, data, minMax) {\n let [path] = data;\n if (!minMax) {\n // The path is empty, so no need to update the current minMax.\n path ||= data[0] = new Path2D();\n this[op](opIdx, path);\n return;\n }\n\n if (this.dependencyTracker !== null) {\n const outerExtraSize = op === OPS.stroke ? this.current.lineWidth / 2 : 0;\n this.dependencyTracker\n .resetBBox(opIdx)\n .recordBBox(\n opIdx,\n this.ctx,\n minMax[0] - outerExtraSize,\n minMax[2] + outerExtraSize,\n minMax[1] - outerExtraSize,\n minMax[3] + outerExtraSize\n )\n .recordDependencies(opIdx, [\"transform\"]);\n }\n\n if (!(path instanceof Path2D)) {\n path = data[0] = makePathFromDrawOPS(path);\n }\n Util.axialAlignedBoundingBox(\n minMax,\n getCurrentTransform(this.ctx),\n this.current.minMax\n );\n this[op](opIdx, path);\n\n this._pathStartIdx = opIdx;\n }\n\n closePath(opIdx) {\n this.ctx.closePath();\n }\n\n stroke(opIdx, path, consumePath = true) {\n const ctx = this.ctx;\n const strokeColor = this.current.strokeColor;\n // For stroke we want to temporarily change the global alpha to the\n // stroking alpha.\n ctx.globalAlpha = this.current.strokeAlpha;\n if (this.contentVisible) {\n if (typeof strokeColor === \"object\" && strokeColor?.getPattern) {\n const baseTransform = strokeColor.isModifyingCurrentTransform()\n ? ctx.getTransform()\n : null;\n ctx.save();\n ctx.strokeStyle = strokeColor.getPattern(\n ctx,\n this,\n getCurrentTransformInverse(ctx),\n PathType.STROKE,\n opIdx\n );\n if (baseTransform) {\n const newPath = new Path2D();\n newPath.addPath(\n path,\n ctx.getTransform().invertSelf().multiplySelf(baseTransform)\n );\n path = newPath;\n }\n this.rescaleAndStroke(path, /* saveRestore */ false);\n ctx.restore();\n } else {\n this.rescaleAndStroke(path, /* saveRestore */ true);\n }\n }\n\n this.dependencyTracker?.recordDependencies(opIdx, Dependencies.stroke);\n\n if (consumePath) {\n this.consumePath(\n opIdx,\n path,\n this.current.getClippedPathBoundingBox(\n PathType.STROKE,\n getCurrentTransform(this.ctx)\n )\n );\n }\n\n // Restore the global alpha to the fill alpha\n ctx.globalAlpha = this.current.fillAlpha;\n }\n\n closeStroke(opIdx, path) {\n this.stroke(opIdx, path);\n }\n\n fill(opIdx, path, consumePath = true) {\n const ctx = this.ctx;\n const fillColor = this.current.fillColor;\n const isPatternFill = this.current.patternFill;\n let needRestore = false;\n\n if (isPatternFill) {\n const baseTransform = fillColor.isModifyingCurrentTransform()\n ? ctx.getTransform()\n : null;\n this.dependencyTracker?.save(opIdx);\n ctx.save();\n ctx.fillStyle = fillColor.getPattern(\n ctx,\n this,\n getCurrentTransformInverse(ctx),\n PathType.FILL,\n opIdx\n );\n if (baseTransform) {\n const newPath = new Path2D();\n newPath.addPath(\n path,\n ctx.getTransform().invertSelf().multiplySelf(baseTransform)\n );\n path = newPath;\n }\n needRestore = true;\n }\n\n const intersect = this.current.getClippedPathBoundingBox();\n if (this.contentVisible && intersect !== null) {\n if (this.pendingEOFill) {\n ctx.fill(path, \"evenodd\");\n this.pendingEOFill = false;\n } else {\n ctx.fill(path);\n }\n }\n\n this.dependencyTracker?.recordDependencies(opIdx, Dependencies.fill);\n\n if (needRestore) {\n ctx.restore();\n this.dependencyTracker?.restore(opIdx);\n }\n if (consumePath) {\n this.consumePath(opIdx, path, intersect);\n }\n }\n\n eoFill(opIdx, path) {\n this.pendingEOFill = true;\n this.fill(opIdx, path);\n }\n\n fillStroke(opIdx, path) {\n this.fill(opIdx, path, false);\n this.stroke(opIdx, path, false);\n\n this.consumePath(opIdx, path);\n }\n\n eoFillStroke(opIdx, path) {\n this.pendingEOFill = true;\n this.fillStroke(opIdx, path);\n }\n\n closeFillStroke(opIdx, path) {\n this.fillStroke(opIdx, path);\n }\n\n closeEOFillStroke(opIdx, path) {\n this.pendingEOFill = true;\n this.fillStroke(opIdx, path);\n }\n\n endPath(opIdx, path) {\n this.consumePath(opIdx, path);\n }\n\n rawFillPath(opIdx, path) {\n this.ctx.fill(path);\n this.dependencyTracker\n ?.recordDependencies(opIdx, Dependencies.rawFillPath)\n .recordOperation(opIdx);\n }\n\n // Clipping\n clip(opIdx) {\n this.dependencyTracker?.recordFutureForcedDependency(\"clipMode\", opIdx);\n this.pendingClip = NORMAL_CLIP;\n }\n\n eoClip(opIdx) {\n this.dependencyTracker?.recordFutureForcedDependency(\"clipMode\", opIdx);\n this.pendingClip = EO_CLIP;\n }\n\n // Text\n beginText(opIdx) {\n this.current.textMatrix = null;\n this.current.textMatrixScale = 1;\n this.current.x = this.current.lineX = 0;\n this.current.y = this.current.lineY = 0;\n\n this.dependencyTracker\n ?.recordOpenMarker(opIdx)\n .resetIncrementalData(\"sameLineText\")\n .resetIncrementalData(\"moveText\", opIdx);\n }\n\n endText(opIdx) {\n const paths = this.pendingTextPaths;\n const ctx = this.ctx;\n\n if (this.dependencyTracker) {\n const { dependencyTracker } = this;\n if (paths !== undefined) {\n dependencyTracker\n .recordFutureForcedDependency(\n \"textClip\",\n dependencyTracker.getOpenMarker()\n )\n .recordFutureForcedDependency(\"textClip\", opIdx);\n }\n dependencyTracker.recordCloseMarker(opIdx);\n }\n\n if (paths !== undefined) {\n const newPath = new Path2D();\n const invTransf = ctx.getTransform().invertSelf();\n for (const { transform, x, y, fontSize, path } of paths) {\n if (!path) {\n continue; // Skip empty paths.\n }\n newPath.addPath(\n path,\n new DOMMatrix(transform)\n .preMultiplySelf(invTransf)\n .translate(x, y)\n .scale(fontSize, -fontSize)\n );\n }\n\n ctx.clip(newPath);\n }\n delete this.pendingTextPaths;\n }\n\n setCharSpacing(opIdx, spacing) {\n this.dependencyTracker?.recordSimpleData(\"charSpacing\", opIdx);\n this.current.charSpacing = spacing;\n }\n\n setWordSpacing(opIdx, spacing) {\n this.dependencyTracker?.recordSimpleData(\"wordSpacing\", opIdx);\n this.current.wordSpacing = spacing;\n }\n\n setHScale(opIdx, scale) {\n this.dependencyTracker?.recordSimpleData(\"hScale\", opIdx);\n this.current.textHScale = scale / 100;\n }\n\n setLeading(opIdx, leading) {\n this.dependencyTracker?.recordSimpleData(\"leading\", opIdx);\n this.current.leading = -leading;\n }\n\n setFont(opIdx, fontRefName, size) {\n this.dependencyTracker\n ?.recordSimpleData(\"font\", opIdx)\n .recordSimpleDataFromNamed(\"fontObj\", fontRefName, opIdx);\n const fontObj = this.commonObjs.get(fontRefName);\n const current = this.current;\n\n if (!fontObj) {\n throw new Error(`Can't find font for ${fontRefName}`);\n }\n current.fontMatrix = fontObj.fontMatrix || FONT_IDENTITY_MATRIX;\n\n // A valid matrix needs all main diagonal elements to be non-zero\n // This also ensures we bypass FF bugzilla bug #719844.\n if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) {\n warn(\"Invalid font matrix for font \" + fontRefName);\n }\n\n // The spec for Tf (setFont) says that 'size' specifies the font 'scale',\n // and in some docs this can be negative (inverted x-y axes).\n if (size < 0) {\n size = -size;\n current.fontDirection = -1;\n } else {\n current.fontDirection = 1;\n }\n\n this.current.font = fontObj;\n this.current.fontSize = size;\n\n if (fontObj.isType3Font) {\n return; // we don't need ctx.font for Type3 fonts\n }\n\n const name = fontObj.loadedName || \"sans-serif\";\n const typeface =\n fontObj.systemFontInfo?.css || `\"${name}\", ${fontObj.fallbackName}`;\n\n let bold = \"normal\";\n if (fontObj.black) {\n bold = \"900\";\n } else if (fontObj.bold) {\n bold = \"bold\";\n }\n const italic = fontObj.italic ? \"italic\" : \"normal\";\n\n // Some font backends cannot handle fonts below certain size.\n // Keeping the font at minimal size and using the fontSizeScale to change\n // the current transformation matrix before the fillText/strokeText.\n // See https://bugzilla.mozilla.org/show_bug.cgi?id=726227\n let browserFontSize = size;\n if (size < MIN_FONT_SIZE) {\n browserFontSize = MIN_FONT_SIZE;\n } else if (size > MAX_FONT_SIZE) {\n browserFontSize = MAX_FONT_SIZE;\n }\n this.current.fontSizeScale = size / browserFontSize;\n\n this.ctx.font = `${italic} ${bold} ${browserFontSize}px ${typeface}`;\n }\n\n setTextRenderingMode(opIdx, mode) {\n this.dependencyTracker?.recordSimpleData(\"textRenderingMode\", opIdx);\n this.current.textRenderingMode = mode;\n }\n\n setTextRise(opIdx, rise) {\n this.dependencyTracker?.recordSimpleData(\"textRise\", opIdx);\n this.current.textRise = rise;\n }\n\n moveText(opIdx, x, y) {\n this.dependencyTracker\n ?.resetIncrementalData(\"sameLineText\")\n .recordIncrementalData(\"moveText\", opIdx);\n this.current.x = this.current.lineX += x;\n this.current.y = this.current.lineY += y;\n }\n\n setLeadingMoveText(opIdx, x, y) {\n this.setLeading(opIdx, -y);\n this.moveText(opIdx, x, y);\n }\n\n setTextMatrix(opIdx, matrix) {\n this.dependencyTracker\n ?.resetIncrementalData(\"sameLineText\")\n .recordSimpleData(\"textMatrix\", opIdx);\n const { current } = this;\n current.textMatrix = matrix;\n current.textMatrixScale = Math.hypot(matrix[0], matrix[1]);\n\n current.x = current.lineX = 0;\n current.y = current.lineY = 0;\n }\n\n nextLine(opIdx) {\n this.moveText(opIdx, 0, this.current.leading);\n\n this.dependencyTracker?.recordIncrementalData(\n \"moveText\",\n // 'leading' affects 'nextLine' operations. Rather than dealing\n // with transitive dependencies, just mark everything that depends on\n // the 'moveText' operation as depending on the 'leading' value.\n this.dependencyTracker.getSimpleIndex(\"leading\") ?? opIdx\n );\n }\n\n #getScaledPath(path, currentTransform, transform) {\n const newPath = new Path2D();\n newPath.addPath(\n path,\n new DOMMatrix(transform).invertSelf().multiplySelf(currentTransform)\n );\n return newPath;\n }\n\n paintChar(\n opIdx,\n character,\n x,\n y,\n patternFillTransform,\n patternStrokeTransform\n ) {\n const ctx = this.ctx;\n const current = this.current;\n const font = current.font;\n const textRenderingMode = current.textRenderingMode;\n const fontSize = current.fontSize / current.fontSizeScale;\n const fillStrokeMode =\n textRenderingMode & TextRenderingMode.FILL_STROKE_MASK;\n const isAddToPathSet = !!(\n textRenderingMode & TextRenderingMode.ADD_TO_PATH_FLAG\n );\n const patternFill = current.patternFill && !font.missingFile;\n const patternStroke = current.patternStroke && !font.missingFile;\n\n let path;\n if (\n (font.disableFontFace ||\n isAddToPathSet ||\n patternFill ||\n patternStroke) &&\n !font.missingFile\n ) {\n path = font.getPathGenerator(this.commonObjs, character);\n }\n\n if (path && (font.disableFontFace || patternFill || patternStroke)) {\n ctx.save();\n ctx.translate(x, y);\n ctx.scale(fontSize, -fontSize);\n\n this.dependencyTracker?.recordCharacterBBox(opIdx, ctx, font);\n\n let currentTransform;\n if (\n fillStrokeMode === TextRenderingMode.FILL ||\n fillStrokeMode === TextRenderingMode.FILL_STROKE\n ) {\n if (patternFillTransform) {\n currentTransform = ctx.getTransform();\n ctx.setTransform(...patternFillTransform);\n const scaledPath = this.#getScaledPath(\n path,\n currentTransform,\n patternFillTransform\n );\n ctx.fill(scaledPath);\n } else {\n ctx.fill(path);\n }\n }\n if (\n fillStrokeMode === TextRenderingMode.STROKE ||\n fillStrokeMode === TextRenderingMode.FILL_STROKE\n ) {\n if (patternStrokeTransform) {\n currentTransform ||= ctx.getTransform();\n ctx.setTransform(...patternStrokeTransform);\n const { a, b, c, d } = currentTransform;\n const invPatternTransform = Util.inverseTransform(\n patternStrokeTransform\n );\n const transf = Util.transform(\n [a, b, c, d, 0, 0],\n invPatternTransform\n );\n Util.singularValueDecompose2dScale(transf, XY);\n\n // Cancel the pattern scaling of the line width.\n // If sx and sy are different, unfortunately we can't do anything and\n // we'll have a rendering bug.\n ctx.lineWidth *= Math.max(XY[0], XY[1]) / fontSize;\n ctx.stroke(\n this.#getScaledPath(path, currentTransform, patternStrokeTransform)\n );\n } else {\n ctx.lineWidth /= fontSize;\n ctx.stroke(path);\n }\n }\n ctx.restore();\n } else {\n if (\n fillStrokeMode === TextRenderingMode.FILL ||\n fillStrokeMode === TextRenderingMode.FILL_STROKE\n ) {\n ctx.fillText(character, x, y);\n this.dependencyTracker?.recordCharacterBBox(\n opIdx,\n ctx,\n font,\n fontSize,\n x,\n y,\n () => ctx.measureText(character)\n );\n }\n if (\n fillStrokeMode === TextRenderingMode.STROKE ||\n fillStrokeMode === TextRenderingMode.FILL_STROKE\n ) {\n if (this.dependencyTracker) {\n this.dependencyTracker\n ?.recordCharacterBBox(opIdx, ctx, font, fontSize, x, y, () =>\n ctx.measureText(character)\n )\n .recordDependencies(opIdx, Dependencies.stroke);\n }\n ctx.strokeText(character, x, y);\n }\n }\n\n if (isAddToPathSet) {\n const paths = (this.pendingTextPaths ||= []);\n paths.push({\n transform: getCurrentTransform(ctx),\n x,\n y,\n fontSize,\n path,\n });\n this.dependencyTracker?.recordCharacterBBox(\n opIdx,\n ctx,\n font,\n fontSize,\n x,\n y\n );\n }\n }\n\n get isFontSubpixelAAEnabled() {\n // Checks if anti-aliasing is enabled when scaled text is painted.\n // On Windows GDI scaled fonts looks bad.\n const { context: ctx } = this.cachedCanvases.getCanvas(\n \"isFontSubpixelAAEnabled\",\n 10,\n 10\n );\n ctx.scale(1.5, 1);\n ctx.fillText(\"I\", 0, 10);\n const data = ctx.getImageData(0, 0, 10, 10).data;\n let enabled = false;\n for (let i = 3; i < data.length; i += 4) {\n if (data[i] > 0 && data[i] < 255) {\n enabled = true;\n break;\n }\n }\n return shadow(this, \"isFontSubpixelAAEnabled\", enabled);\n }\n\n showText(opIdx, glyphs) {\n if (this.dependencyTracker) {\n this.dependencyTracker\n .recordDependencies(opIdx, Dependencies.showText)\n .resetBBox(opIdx);\n if (this.current.textRenderingMode & TextRenderingMode.ADD_TO_PATH_FLAG) {\n this.dependencyTracker\n .recordFutureForcedDependency(\"textClip\", opIdx)\n .inheritPendingDependenciesAsFutureForcedDependencies();\n }\n }\n\n const current = this.current;\n const font = current.font;\n if (font.isType3Font) {\n this.showType3Text(opIdx, glyphs);\n this.dependencyTracker?.recordShowTextOperation(opIdx);\n return undefined;\n }\n\n const fontSize = current.fontSize;\n if (fontSize === 0) {\n this.dependencyTracker?.recordOperation(opIdx);\n return undefined;\n }\n\n const ctx = this.ctx;\n const fontSizeScale = current.fontSizeScale;\n const charSpacing = current.charSpacing;\n const wordSpacing = current.wordSpacing;\n const fontDirection = current.fontDirection;\n const textHScale = current.textHScale * fontDirection;\n const glyphsLength = glyphs.length;\n const vertical = font.vertical;\n const spacingDir = vertical ? 1 : -1;\n const defaultVMetrics = font.defaultVMetrics;\n const widthAdvanceScale = fontSize * current.fontMatrix[0];\n\n const simpleFillText =\n current.textRenderingMode === TextRenderingMode.FILL &&\n !font.disableFontFace &&\n !current.patternFill;\n\n ctx.save();\n if (current.textMatrix) {\n ctx.transform(...current.textMatrix);\n }\n ctx.translate(current.x, current.y + current.textRise);\n\n if (fontDirection > 0) {\n ctx.scale(textHScale, -1);\n } else {\n ctx.scale(textHScale, 1);\n }\n\n let patternFillTransform, patternStrokeTransform;\n if (current.patternFill) {\n ctx.save();\n const pattern = current.fillColor.getPattern(\n ctx,\n this,\n getCurrentTransformInverse(ctx),\n PathType.FILL,\n opIdx\n );\n patternFillTransform = getCurrentTransform(ctx);\n ctx.restore();\n ctx.fillStyle = pattern;\n }\n\n if (current.patternStroke) {\n ctx.save();\n const pattern = current.strokeColor.getPattern(\n ctx,\n this,\n getCurrentTransformInverse(ctx),\n PathType.STROKE,\n opIdx\n );\n patternStrokeTransform = getCurrentTransform(ctx);\n ctx.restore();\n ctx.strokeStyle = pattern;\n }\n\n let lineWidth = current.lineWidth;\n const scale = current.textMatrixScale;\n if (scale === 0 || lineWidth === 0) {\n const fillStrokeMode =\n current.textRenderingMode & TextRenderingMode.FILL_STROKE_MASK;\n if (\n fillStrokeMode === TextRenderingMode.STROKE ||\n fillStrokeMode === TextRenderingMode.FILL_STROKE\n ) {\n lineWidth = this.getSinglePixelWidth();\n }\n } else {\n lineWidth /= scale;\n }\n\n if (fontSizeScale !== 1.0) {\n ctx.scale(fontSizeScale, fontSizeScale);\n lineWidth /= fontSizeScale;\n }\n\n ctx.lineWidth = lineWidth;\n\n if (font.isInvalidPDFjsFont) {\n const chars = [];\n let width = 0;\n for (const glyph of glyphs) {\n chars.push(glyph.unicode);\n width += glyph.width;\n }\n const joinedChars = chars.join(\"\");\n ctx.fillText(joinedChars, 0, 0);\n if (this.dependencyTracker !== null) {\n const measure = ctx.measureText(joinedChars);\n this.dependencyTracker\n .recordBBox(\n opIdx,\n this.ctx,\n -measure.actualBoundingBoxLeft,\n measure.actualBoundingBoxRight,\n -measure.actualBoundingBoxAscent,\n measure.actualBoundingBoxDescent\n )\n .recordShowTextOperation(opIdx);\n }\n current.x += width * widthAdvanceScale * textHScale;\n ctx.restore();\n this.compose();\n return undefined;\n }\n\n let x = 0,\n i;\n for (i = 0; i < glyphsLength; ++i) {\n const glyph = glyphs[i];\n if (typeof glyph === \"number\") {\n x += (spacingDir * glyph * fontSize) / 1000;\n continue;\n }\n\n let restoreNeeded = false;\n const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;\n const character = glyph.fontChar;\n const accent = glyph.accent;\n let scaledX, scaledY;\n let width = glyph.width;\n if (vertical) {\n const vmetric = glyph.vmetric || defaultVMetrics;\n const vx =\n -(glyph.vmetric ? vmetric[1] : width * 0.5) * widthAdvanceScale;\n const vy = vmetric[2] * widthAdvanceScale;\n\n width = vmetric ? -vmetric[0] : width;\n scaledX = vx / fontSizeScale;\n scaledY = (x + vy) / fontSizeScale;\n } else {\n scaledX = x / fontSizeScale;\n scaledY = 0;\n }\n\n let measure;\n\n if (font.remeasure && width > 0) {\n measure = ctx.measureText(character);\n\n // Some standard fonts may not have the exact width: rescale per\n // character if measured width is greater than expected glyph width\n // and subpixel-aa is enabled, otherwise just center the glyph.\n const measuredWidth =\n ((measure.width * 1000) / fontSize) * fontSizeScale;\n if (width < measuredWidth && this.isFontSubpixelAAEnabled) {\n const characterScaleX = width / measuredWidth;\n restoreNeeded = true;\n ctx.save();\n ctx.scale(characterScaleX, 1);\n scaledX /= characterScaleX;\n } else if (width !== measuredWidth) {\n scaledX +=\n (((width - measuredWidth) / 2000) * fontSize) / fontSizeScale;\n }\n }\n\n // Only attempt to draw the glyph if it is actually in the embedded font\n // file or if there isn't a font file so the fallback font is shown.\n if (this.contentVisible && (glyph.isInFont || font.missingFile)) {\n if (simpleFillText && !accent) {\n // common case\n ctx.fillText(character, scaledX, scaledY);\n\n this.dependencyTracker?.recordCharacterBBox(\n opIdx,\n ctx,\n // If we already measured the character, force usage of that\n measure ? { bbox: null } : font,\n fontSize / fontSizeScale,\n scaledX,\n scaledY,\n () => measure ?? ctx.measureText(character)\n );\n } else {\n this.paintChar(\n opIdx,\n character,\n scaledX,\n scaledY,\n patternFillTransform,\n patternStrokeTransform\n );\n if (accent) {\n const scaledAccentX =\n scaledX + (fontSize * accent.offset.x) / fontSizeScale;\n const scaledAccentY =\n scaledY - (fontSize * accent.offset.y) / fontSizeScale;\n this.paintChar(\n opIdx,\n accent.fontChar,\n scaledAccentX,\n scaledAccentY,\n patternFillTransform,\n patternStrokeTransform\n );\n }\n }\n }\n\n const charWidth = vertical\n ? width * widthAdvanceScale - spacing * fontDirection\n : width * widthAdvanceScale + spacing * fontDirection;\n x += charWidth;\n\n if (restoreNeeded) {\n ctx.restore();\n }\n }\n if (vertical) {\n current.y -= x;\n } else {\n current.x += x * textHScale;\n }\n ctx.restore();\n this.compose();\n\n this.dependencyTracker?.recordShowTextOperation(opIdx);\n return undefined;\n }\n\n showType3Text(opIdx, glyphs) {\n // Type3 fonts - each glyph is a \"mini-PDF\"\n const ctx = this.ctx;\n const current = this.current;\n const font = current.font;\n const fontSize = current.fontSize;\n const fontDirection = current.fontDirection;\n const spacingDir = font.vertical ? 1 : -1;\n const charSpacing = current.charSpacing;\n const wordSpacing = current.wordSpacing;\n const textHScale = current.textHScale * fontDirection;\n const fontMatrix = current.fontMatrix || FONT_IDENTITY_MATRIX;\n const glyphsLength = glyphs.length;\n const isTextInvisible =\n current.textRenderingMode === TextRenderingMode.INVISIBLE;\n let i, glyph, width, spacingLength;\n\n if (isTextInvisible || fontSize === 0) {\n return;\n }\n this._cachedScaleForStroking[0] = -1;\n this._cachedGetSinglePixelWidth = null;\n\n ctx.save();\n if (current.textMatrix) {\n ctx.transform(...current.textMatrix);\n }\n ctx.translate(current.x, current.y + current.textRise);\n\n ctx.scale(textHScale, fontDirection);\n\n // Type3 fonts have their own operator list. Avoid mixing it up with the\n // dependency tracker of the main operator list.\n const dependencyTracker = this.dependencyTracker;\n this.dependencyTracker = dependencyTracker\n ? new CanvasNestedDependencyTracker(dependencyTracker, opIdx)\n : null;\n\n for (i = 0; i < glyphsLength; ++i) {\n glyph = glyphs[i];\n if (typeof glyph === \"number\") {\n spacingLength = (spacingDir * glyph * fontSize) / 1000;\n this.ctx.translate(spacingLength, 0);\n current.x += spacingLength * textHScale;\n continue;\n }\n\n const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;\n const operatorList = font.charProcOperatorList[glyph.operatorListId];\n if (!operatorList) {\n warn(`Type3 character \"${glyph.operatorListId}\" is not available.`);\n } else if (this.contentVisible) {\n this.save();\n ctx.scale(fontSize, fontSize);\n ctx.transform(...fontMatrix);\n this.executeOperatorList(operatorList);\n this.restore();\n }\n\n const p = [glyph.width, 0];\n Util.applyTransform(p, fontMatrix);\n width = p[0] * fontSize + spacing;\n\n ctx.translate(width, 0);\n current.x += width * textHScale;\n }\n ctx.restore();\n if (dependencyTracker) {\n this.dependencyTracker = dependencyTracker;\n }\n }\n\n // Type3 fonts\n setCharWidth(opIdx, xWidth, yWidth) {\n // We can safely ignore this since the width should be the same\n // as the width in the Widths array.\n }\n\n setCharWidthAndBounds(opIdx, xWidth, yWidth, llx, lly, urx, ury) {\n const clip = new Path2D();\n clip.rect(llx, lly, urx - llx, ury - lly);\n this.ctx.clip(clip);\n this.dependencyTracker\n ?.recordBBox(opIdx, this.ctx, llx, urx, lly, ury)\n .recordClipBox(opIdx, this.ctx, llx, urx, lly, ury);\n this.endPath(opIdx);\n }\n\n // Color\n getColorN_Pattern(opIdx, IR) {\n let pattern;\n if (IR[0] === \"TilingPattern\") {\n const baseTransform = this.baseTransform || getCurrentTransform(this.ctx);\n const canvasGraphicsFactory = {\n createCanvasGraphics: (ctx, renderingOpIdx) =>\n new CanvasGraphics(\n ctx,\n this.commonObjs,\n this.objs,\n this.canvasFactory,\n this.filterFactory,\n {\n optionalContentConfig: this.optionalContentConfig,\n markedContentStack: this.markedContentStack,\n },\n undefined,\n undefined,\n this.dependencyTracker\n ? new CanvasNestedDependencyTracker(\n this.dependencyTracker,\n renderingOpIdx,\n /* ignoreBBoxes */ true\n )\n : null\n ),\n };\n pattern = new TilingPattern(\n IR,\n this.ctx,\n canvasGraphicsFactory,\n baseTransform\n );\n } else {\n pattern = this._getPattern(opIdx, IR[1], IR[2]);\n }\n return pattern;\n }\n\n setStrokeColorN(opIdx, ...args) {\n this.dependencyTracker?.recordSimpleData(\"strokeColor\", opIdx);\n this.current.strokeColor = this.getColorN_Pattern(opIdx, args);\n this.current.patternStroke = true;\n }\n\n setFillColorN(opIdx, ...args) {\n this.dependencyTracker?.recordSimpleData(\"fillColor\", opIdx);\n this.current.fillColor = this.getColorN_Pattern(opIdx, args);\n this.current.patternFill = true;\n }\n\n setStrokeRGBColor(opIdx, color) {\n this.dependencyTracker?.recordSimpleData(\"strokeColor\", opIdx);\n this.ctx.strokeStyle = this.current.strokeColor = color;\n this.current.patternStroke = false;\n }\n\n setStrokeTransparent(opIdx) {\n this.dependencyTracker?.recordSimpleData(\"strokeColor\", opIdx);\n this.ctx.strokeStyle = this.current.strokeColor = \"transparent\";\n this.current.patternStroke = false;\n }\n\n setFillRGBColor(opIdx, color) {\n this.dependencyTracker?.recordSimpleData(\"fillColor\", opIdx);\n this.ctx.fillStyle = this.current.fillColor = color;\n this.current.patternFill = false;\n }\n\n setFillTransparent(opIdx) {\n this.dependencyTracker?.recordSimpleData(\"fillColor\", opIdx);\n this.ctx.fillStyle = this.current.fillColor = \"transparent\";\n this.current.patternFill = false;\n }\n\n _getPattern(opIdx, objId, matrix = null) {\n let pattern;\n if (this.cachedPatterns.has(objId)) {\n pattern = this.cachedPatterns.get(objId);\n } else {\n pattern = getShadingPattern(this.getObject(opIdx, objId));\n this.cachedPatterns.set(objId, pattern);\n }\n if (matrix) {\n pattern.matrix = matrix;\n }\n return pattern;\n }\n\n shadingFill(opIdx, objId) {\n if (!this.contentVisible) {\n return;\n }\n const ctx = this.ctx;\n\n this.save(opIdx);\n const pattern = this._getPattern(opIdx, objId);\n ctx.fillStyle = pattern.getPattern(\n ctx,\n this,\n getCurrentTransformInverse(ctx),\n PathType.SHADING,\n opIdx\n );\n\n const inv = getCurrentTransformInverse(ctx);\n if (inv) {\n const { width, height } = ctx.canvas;\n const minMax = MIN_MAX_INIT.slice();\n Util.axialAlignedBoundingBox([0, 0, width, height], inv, minMax);\n const [x0, y0, x1, y1] = minMax;\n\n this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0);\n } else {\n // HACK to draw the gradient onto an infinite rectangle.\n // PDF gradients are drawn across the entire image while\n // Canvas only allows gradients to be drawn in a rectangle\n // The following bug should allow us to remove this.\n // https://bugzilla.mozilla.org/show_bug.cgi?id=664884\n\n this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10);\n }\n\n this.dependencyTracker\n ?.resetBBox(opIdx)\n // TODO: Track proper bbox\n .recordFullPageBBox(opIdx)\n .recordDependencies(opIdx, Dependencies.transform)\n .recordDependencies(opIdx, Dependencies.fill)\n .recordOperation(opIdx);\n\n this.compose(this.current.getClippedPathBoundingBox());\n this.restore(opIdx);\n }\n\n // Images\n beginInlineImage() {\n unreachable(\"Should not call beginInlineImage\");\n }\n\n beginImageData() {\n unreachable(\"Should not call beginImageData\");\n }\n\n paintFormXObjectBegin(opIdx, matrix, bbox) {\n if (!this.contentVisible) {\n return;\n }\n this.save(opIdx);\n this.baseTransformStack.push(this.baseTransform);\n\n if (matrix) {\n this.transform(opIdx, ...matrix);\n }\n this.baseTransform = getCurrentTransform(this.ctx);\n\n if (bbox) {\n Util.axialAlignedBoundingBox(\n bbox,\n this.baseTransform,\n this.current.minMax\n );\n const [x0, y0, x1, y1] = bbox;\n const clip = new Path2D();\n clip.rect(x0, y0, x1 - x0, y1 - y0);\n this.ctx.clip(clip);\n this.dependencyTracker?.recordClipBox(opIdx, this.ctx, x0, x1, y0, y1);\n this.endPath(opIdx);\n }\n }\n\n paintFormXObjectEnd(opIdx) {\n if (!this.contentVisible) {\n return;\n }\n this.restore(opIdx);\n this.baseTransform = this.baseTransformStack.pop();\n }\n\n beginGroup(opIdx, group) {\n if (!this.contentVisible) {\n return;\n }\n\n this.save(opIdx);\n // If there's an active soft mask we don't want it enabled for the group, so\n // clear it out. The mask and suspended canvas will be restored in endGroup.\n if (this.inSMaskMode) {\n this.endSMaskMode();\n this.current.activeSMask = null;\n }\n\n const currentCtx = this.ctx;\n // TODO non-isolated groups - according to Rik at adobe non-isolated\n // group results aren't usually that different and they even have tools\n // that ignore this setting. Notes from Rik on implementing:\n // - When you encounter an transparency group, create a new canvas with\n // the dimensions of the bbox\n // - copy the content from the previous canvas to the new canvas\n // - draw as usual\n // - remove the backdrop alpha:\n // alphaNew = 1 - (1 - alpha)/(1 - alphaBackdrop) with 'alpha' the alpha\n // value of your transparency group and 'alphaBackdrop' the alpha of the\n // backdrop\n // - remove background color:\n // colorNew = color - alphaNew *colorBackdrop /(1 - alphaNew)\n if (!group.isolated) {\n info(\"TODO: Support non-isolated groups.\");\n }\n\n // TODO knockout - supposedly possible with the clever use of compositing\n // modes.\n if (group.knockout) {\n warn(\"Knockout groups not supported.\");\n }\n\n const currentTransform = getCurrentTransform(currentCtx);\n if (group.matrix) {\n currentCtx.transform(...group.matrix);\n }\n if (!group.bbox) {\n throw new Error(\"Bounding box is required.\");\n }\n\n // Based on the current transform figure out how big the bounding box\n // will actually be.\n let bounds = MIN_MAX_INIT.slice();\n Util.axialAlignedBoundingBox(\n group.bbox,\n getCurrentTransform(currentCtx),\n bounds\n );\n\n // Clip the bounding box to the current canvas.\n const canvasBounds = [\n 0,\n 0,\n currentCtx.canvas.width,\n currentCtx.canvas.height,\n ];\n bounds = Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0];\n // Use ceil in case we're between sizes so we don't create canvas that is\n // too small and make the canvas at least 1x1 pixels.\n const offsetX = Math.floor(bounds[0]);\n const offsetY = Math.floor(bounds[1]);\n const drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1);\n const drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1);\n\n this.current.startNewPathAndClipBox([0, 0, drawnWidth, drawnHeight]);\n\n let cacheId = \"groupAt\" + this.groupLevel;\n if (group.smask) {\n // Using two cache entries is case if masks are used one after another.\n cacheId += \"_smask_\" + (this.smaskCounter++ % 2);\n }\n const scratchCanvas = this.cachedCanvases.getCanvas(\n cacheId,\n drawnWidth,\n drawnHeight\n );\n const groupCtx = scratchCanvas.context;\n\n // Since we created a new canvas that is just the size of the bounding box\n // we have to translate the group ctx.\n groupCtx.translate(-offsetX, -offsetY);\n groupCtx.transform(...currentTransform);\n\n // Apply the bbox to the group context.\n let clip = new Path2D();\n const [x0, y0, x1, y1] = group.bbox;\n clip.rect(x0, y0, x1 - x0, y1 - y0);\n if (group.matrix) {\n const path = new Path2D();\n path.addPath(clip, new DOMMatrix(group.matrix));\n clip = path;\n }\n groupCtx.clip(clip);\n\n if (group.smask) {\n // Saving state and cached mask to be used in setGState.\n this.smaskStack.push({\n canvas: scratchCanvas.canvas,\n context: groupCtx,\n offsetX,\n offsetY,\n subtype: group.smask.subtype,\n backdrop: group.smask.backdrop,\n transferMap: group.smask.transferMap || null,\n startTransformInverse: null, // used during suspend operation\n });\n }\n if (\n !group.smask ||\n // When this is not an SMask group, we only need to update the current\n // transform if recording operations bboxes, so they the bboxes have the\n // correct transform applied.\n this.dependencyTracker\n ) {\n // Setup the current ctx so when the group is popped we draw it at the\n // right location.\n currentCtx.setTransform(1, 0, 0, 1, 0, 0);\n currentCtx.translate(offsetX, offsetY);\n currentCtx.save();\n }\n // The transparency group inherits all off the current graphics state\n // except the blend mode, soft mask, and alpha constants.\n copyCtxState(currentCtx, groupCtx);\n this.ctx = groupCtx;\n this.dependencyTracker\n ?.inheritSimpleDataAsFutureForcedDependencies([\n \"fillAlpha\",\n \"strokeAlpha\",\n \"globalCompositeOperation\",\n ])\n .pushBaseTransform(currentCtx);\n this.setGState(opIdx, [\n [\"BM\", \"source-over\"],\n [\"ca\", 1],\n [\"CA\", 1],\n ]);\n this.groupStack.push(currentCtx);\n this.groupLevel++;\n }\n\n endGroup(opIdx, group) {\n if (!this.contentVisible) {\n return;\n }\n this.groupLevel--;\n const groupCtx = this.ctx;\n const ctx = this.groupStack.pop();\n this.ctx = ctx;\n // Turn off image smoothing to avoid sub pixel interpolation which can\n // look kind of blurry for some pdfs.\n this.ctx.imageSmoothingEnabled = false;\n\n this.dependencyTracker?.popBaseTransform();\n\n if (group.smask) {\n this.tempSMask = this.smaskStack.pop();\n this.restore(opIdx);\n if (this.dependencyTracker) {\n this.ctx.restore();\n }\n } else {\n this.ctx.restore();\n const currentMtx = getCurrentTransform(this.ctx);\n this.restore(opIdx);\n this.ctx.save();\n this.ctx.setTransform(...currentMtx);\n const dirtyBox = MIN_MAX_INIT.slice();\n Util.axialAlignedBoundingBox(\n [0, 0, groupCtx.canvas.width, groupCtx.canvas.height],\n currentMtx,\n dirtyBox\n );\n this.ctx.drawImage(groupCtx.canvas, 0, 0);\n this.ctx.restore();\n this.compose(dirtyBox);\n }\n }\n\n beginAnnotation(opIdx, id, rect, transform, matrix, hasOwnCanvas) {\n // The annotations are drawn just after the page content.\n // The page content drawing can potentially have set a transform,\n // a clipping path, whatever...\n // So in order to have something clean, we restore the initial state.\n this.#restoreInitialState();\n resetCtxToDefault(this.ctx);\n\n this.ctx.save();\n this.save(opIdx);\n\n if (this.baseTransform) {\n this.ctx.setTransform(...this.baseTransform);\n }\n\n if (rect) {\n const width = rect[2] - rect[0];\n const height = rect[3] - rect[1];\n\n if (hasOwnCanvas && this.annotationCanvasMap) {\n transform = transform.slice();\n transform[4] -= rect[0];\n transform[5] -= rect[1];\n\n rect = rect.slice();\n rect[0] = rect[1] = 0;\n rect[2] = width;\n rect[3] = height;\n\n Util.singularValueDecompose2dScale(getCurrentTransform(this.ctx), XY);\n const { viewportScale } = this;\n const canvasWidth = Math.ceil(\n width * this.outputScaleX * viewportScale\n );\n const canvasHeight = Math.ceil(\n height * this.outputScaleY * viewportScale\n );\n\n this.annotationCanvas = this.canvasFactory.create(\n canvasWidth,\n canvasHeight\n );\n const { canvas, context } = this.annotationCanvas;\n this.annotationCanvasMap.set(id, canvas);\n this.annotationCanvas.savedCtx = this.ctx;\n this.ctx = context;\n this.ctx.save();\n this.ctx.setTransform(XY[0], 0, 0, -XY[1], 0, height * XY[1]);\n\n resetCtxToDefault(this.ctx);\n } else {\n resetCtxToDefault(this.ctx);\n\n // Consume a potential path before clipping.\n this.endPath(opIdx);\n\n const clip = new Path2D();\n clip.rect(rect[0], rect[1], width, height);\n this.ctx.clip(clip);\n }\n }\n\n this.current = new CanvasExtraState(\n this.ctx.canvas.width,\n this.ctx.canvas.height\n );\n\n this.transform(opIdx, ...transform);\n this.transform(opIdx, ...matrix);\n }\n\n endAnnotation(opIdx) {\n if (this.annotationCanvas) {\n this.ctx.restore();\n this.#drawFilter();\n\n this.ctx = this.annotationCanvas.savedCtx;\n delete this.annotationCanvas.savedCtx;\n delete this.annotationCanvas;\n }\n }\n\n paintImageMaskXObject(opIdx, img) {\n if (!this.contentVisible) {\n return;\n }\n\n const count = img.count;\n img = this.getObject(opIdx, img.data, img);\n img.count = count;\n\n const ctx = this.ctx;\n const mask = this._createMaskCanvas(opIdx, img);\n const maskCanvas = mask.canvas;\n\n ctx.save();\n // The mask is drawn with the transform applied. Reset the current\n // transform to draw to the identity.\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n ctx.drawImage(maskCanvas, mask.offsetX, mask.offsetY);\n this.dependencyTracker\n ?.resetBBox(opIdx)\n .recordBBox(\n opIdx,\n this.ctx,\n mask.offsetX,\n mask.offsetX + maskCanvas.width,\n mask.offsetY,\n mask.offsetY + maskCanvas.height\n )\n .recordOperation(opIdx);\n ctx.restore();\n this.compose();\n }\n\n paintImageMaskXObjectRepeat(\n opIdx,\n img,\n scaleX,\n skewX = 0,\n skewY = 0,\n scaleY,\n positions\n ) {\n if (!this.contentVisible) {\n return;\n }\n\n img = this.getObject(opIdx, img.data, img);\n\n const ctx = this.ctx;\n ctx.save();\n const currentTransform = getCurrentTransform(ctx);\n ctx.transform(scaleX, skewX, skewY, scaleY, 0, 0);\n const mask = this._createMaskCanvas(opIdx, img);\n\n ctx.setTransform(\n 1,\n 0,\n 0,\n 1,\n mask.offsetX - currentTransform[4],\n mask.offsetY - currentTransform[5]\n );\n this.dependencyTracker?.resetBBox(opIdx);\n for (let i = 0, ii = positions.length; i < ii; i += 2) {\n const trans = Util.transform(currentTransform, [\n scaleX,\n skewX,\n skewY,\n scaleY,\n positions[i],\n positions[i + 1],\n ]);\n\n // Here we want to apply the transform at the origin,\n // hence no additional computation is necessary.\n ctx.drawImage(mask.canvas, trans[4], trans[5]);\n this.dependencyTracker?.recordBBox(\n opIdx,\n this.ctx,\n trans[4],\n trans[4] + mask.canvas.width,\n trans[5],\n trans[5] + mask.canvas.height\n );\n }\n ctx.restore();\n this.compose();\n\n this.dependencyTracker?.recordOperation(opIdx);\n }\n\n paintImageMaskXObjectGroup(opIdx, images) {\n if (!this.contentVisible) {\n return;\n }\n const ctx = this.ctx;\n\n const fillColor = this.current.fillColor;\n const isPatternFill = this.current.patternFill;\n\n this.dependencyTracker\n ?.resetBBox(opIdx)\n .recordDependencies(opIdx, Dependencies.transformAndFill);\n\n for (const image of images) {\n const { data, width, height, transform } = image;\n\n const maskCanvas = this.cachedCanvases.getCanvas(\n \"maskCanvas\",\n width,\n height\n );\n const maskCtx = maskCanvas.context;\n maskCtx.save();\n\n const img = this.getObject(opIdx, data, image);\n putBinaryImageMask(maskCtx, img);\n\n maskCtx.globalCompositeOperation = \"source-in\";\n\n maskCtx.fillStyle = isPatternFill\n ? fillColor.getPattern(\n maskCtx,\n this,\n getCurrentTransformInverse(ctx),\n PathType.FILL,\n opIdx\n )\n : fillColor;\n maskCtx.fillRect(0, 0, width, height);\n\n maskCtx.restore();\n\n ctx.save();\n ctx.transform(...transform);\n ctx.scale(1, -1);\n drawImageAtIntegerCoords(\n ctx,\n maskCanvas.canvas,\n 0,\n 0,\n width,\n height,\n 0,\n -1,\n 1,\n 1\n );\n\n this.dependencyTracker?.recordBBox(opIdx, ctx, 0, width, 0, height);\n ctx.restore();\n }\n this.compose();\n this.dependencyTracker?.recordOperation(opIdx);\n }\n\n paintImageXObject(opIdx, objId) {\n if (!this.contentVisible) {\n return;\n }\n const imgData = this.getObject(opIdx, objId);\n if (!imgData) {\n warn(\"Dependent image isn't ready yet\");\n return;\n }\n\n this.paintInlineImageXObject(opIdx, imgData);\n }\n\n paintImageXObjectRepeat(opIdx, objId, scaleX, scaleY, positions) {\n if (!this.contentVisible) {\n return;\n }\n const imgData = this.getObject(opIdx, objId);\n if (!imgData) {\n warn(\"Dependent image isn't ready yet\");\n return;\n }\n\n const width = imgData.width;\n const height = imgData.height;\n const map = [];\n for (let i = 0, ii = positions.length; i < ii; i += 2) {\n map.push({\n transform: [scaleX, 0, 0, scaleY, positions[i], positions[i + 1]],\n x: 0,\n y: 0,\n w: width,\n h: height,\n });\n }\n this.paintInlineImageXObjectGroup(opIdx, imgData, map);\n }\n\n applyTransferMapsToCanvas(ctx) {\n if (this.current.transferMaps !== \"none\") {\n ctx.filter = this.current.transferMaps;\n ctx.drawImage(ctx.canvas, 0, 0);\n ctx.filter = \"none\";\n }\n return ctx.canvas;\n }\n\n applyTransferMapsToBitmap(imgData) {\n if (this.current.transferMaps === \"none\") {\n return imgData.bitmap;\n }\n const { bitmap, width, height } = imgData;\n const tmpCanvas = this.cachedCanvases.getCanvas(\n \"inlineImage\",\n width,\n height\n );\n const tmpCtx = tmpCanvas.context;\n tmpCtx.filter = this.current.transferMaps;\n tmpCtx.drawImage(bitmap, 0, 0);\n tmpCtx.filter = \"none\";\n\n return tmpCanvas.canvas;\n }\n\n paintInlineImageXObject(opIdx, imgData) {\n if (!this.contentVisible) {\n return;\n }\n const width = imgData.width;\n const height = imgData.height;\n const ctx = this.ctx;\n\n this.save(opIdx);\n\n // The filter, if any, will be applied in applyTransferMapsToBitmap.\n // It must be applied to the image before rescaling else some artifacts\n // could appear.\n // The final restore will reset it to its value.\n const { filter } = ctx;\n if (filter !== \"none\" && filter !== \"\") {\n ctx.filter = \"none\";\n }\n\n // scale the image to the unit square\n ctx.scale(1 / width, -1 / height);\n\n let imgToPaint;\n if (imgData.bitmap) {\n imgToPaint = this.applyTransferMapsToBitmap(imgData);\n } else if (\n (typeof HTMLElement === \"function\" && imgData instanceof HTMLElement) ||\n !imgData.data\n ) {\n // typeof check is needed due to node.js support, see issue #8489\n imgToPaint = imgData;\n } else {\n const tmpCanvas = this.cachedCanvases.getCanvas(\n \"inlineImage\",\n width,\n height\n );\n const tmpCtx = tmpCanvas.context;\n putBinaryImageData(tmpCtx, imgData);\n imgToPaint = this.applyTransferMapsToCanvas(tmpCtx);\n }\n\n const scaled = this._scaleImage(\n imgToPaint,\n getCurrentTransformInverse(ctx)\n );\n ctx.imageSmoothingEnabled = getImageSmoothingEnabled(\n getCurrentTransform(ctx),\n imgData.interpolate\n );\n\n this.dependencyTracker\n ?.resetBBox(opIdx)\n .recordBBox(opIdx, ctx, 0, width, -height, 0)\n .recordDependencies(opIdx, Dependencies.imageXObject)\n .recordOperation(opIdx);\n\n drawImageAtIntegerCoords(\n ctx,\n scaled.img,\n 0,\n 0,\n scaled.paintWidth,\n scaled.paintHeight,\n 0,\n -height,\n width,\n height\n );\n this.compose();\n this.restore(opIdx);\n }\n\n paintInlineImageXObjectGroup(opIdx, imgData, map) {\n if (!this.contentVisible) {\n return;\n }\n const ctx = this.ctx;\n let imgToPaint;\n if (imgData.bitmap) {\n imgToPaint = imgData.bitmap;\n } else {\n const w = imgData.width;\n const h = imgData.height;\n\n const tmpCanvas = this.cachedCanvases.getCanvas(\"inlineImage\", w, h);\n const tmpCtx = tmpCanvas.context;\n putBinaryImageData(tmpCtx, imgData);\n imgToPaint = this.applyTransferMapsToCanvas(tmpCtx);\n }\n\n this.dependencyTracker?.resetBBox(opIdx);\n\n for (const entry of map) {\n ctx.save();\n ctx.transform(...entry.transform);\n ctx.scale(1, -1);\n drawImageAtIntegerCoords(\n ctx,\n imgToPaint,\n entry.x,\n entry.y,\n entry.w,\n entry.h,\n 0,\n -1,\n 1,\n 1\n );\n this.dependencyTracker?.recordBBox(opIdx, ctx, 0, 1, -1, 0);\n ctx.restore();\n }\n this.dependencyTracker?.recordOperation(opIdx);\n this.compose();\n }\n\n paintSolidColorImageMask(opIdx) {\n if (!this.contentVisible) {\n return;\n }\n this.dependencyTracker\n ?.resetBBox(opIdx)\n .recordBBox(opIdx, this.ctx, 0, 1, 0, 1)\n .recordDependencies(opIdx, Dependencies.fill)\n .recordOperation(opIdx);\n this.ctx.fillRect(0, 0, 1, 1);\n this.compose();\n }\n\n // Marked content\n\n markPoint(opIdx, tag) {\n // TODO Marked content.\n }\n\n markPointProps(opIdx, tag, properties) {\n // TODO Marked content.\n }\n\n beginMarkedContent(opIdx, tag) {\n this.dependencyTracker?.beginMarkedContent(opIdx);\n this.markedContentStack.push({\n visible: true,\n });\n }\n\n beginMarkedContentProps(opIdx, tag, properties) {\n this.dependencyTracker?.beginMarkedContent(opIdx);\n if (tag === \"OC\") {\n this.markedContentStack.push({\n visible: this.optionalContentConfig.isVisible(properties),\n });\n } else {\n this.markedContentStack.push({\n visible: true,\n });\n }\n this.contentVisible = this.isContentVisible();\n }\n\n endMarkedContent(opIdx) {\n this.dependencyTracker?.endMarkedContent(opIdx);\n this.markedContentStack.pop();\n this.contentVisible = this.isContentVisible();\n }\n\n // Compatibility\n\n beginCompat(opIdx) {\n // TODO ignore undefined operators (should we do that anyway?)\n }\n\n endCompat(opIdx) {\n // TODO stop ignoring undefined operators\n }\n\n // Helper functions\n\n consumePath(opIdx, path, clipBox) {\n const isEmpty = this.current.isEmptyClip();\n if (this.pendingClip) {\n this.current.updateClipFromPath();\n }\n if (!this.pendingClip) {\n this.compose(clipBox);\n }\n const ctx = this.ctx;\n if (this.pendingClip) {\n if (!isEmpty) {\n if (this.pendingClip === EO_CLIP) {\n ctx.clip(path, \"evenodd\");\n } else {\n ctx.clip(path);\n }\n }\n this.pendingClip = null;\n this.dependencyTracker\n ?.bboxToClipBoxDropOperation(opIdx)\n .recordFutureForcedDependency(\"clipPath\", opIdx);\n } else {\n this.dependencyTracker?.recordOperation(opIdx);\n }\n\n this.current.startNewPathAndClipBox(this.current.clipBox);\n }\n\n getSinglePixelWidth() {\n if (!this._cachedGetSinglePixelWidth) {\n const m = getCurrentTransform(this.ctx);\n if (m[1] === 0 && m[2] === 0) {\n // Fast path\n this._cachedGetSinglePixelWidth =\n 1 / Math.min(Math.abs(m[0]), Math.abs(m[3]));\n } else {\n const absDet = Math.abs(m[0] * m[3] - m[2] * m[1]);\n const normX = Math.hypot(m[0], m[2]);\n const normY = Math.hypot(m[1], m[3]);\n this._cachedGetSinglePixelWidth = Math.max(normX, normY) / absDet;\n }\n }\n return this._cachedGetSinglePixelWidth;\n }\n\n getScaleForStroking() {\n // A pixel has thicknessX = thicknessY = 1;\n // A transformed pixel is a parallelogram and the thicknesses\n // corresponds to the heights.\n // The goal of this function is to rescale before setting the\n // lineWidth in order to have both thicknesses greater or equal\n // to 1 after transform.\n if (this._cachedScaleForStroking[0] === -1) {\n const { lineWidth } = this.current;\n const { a, b, c, d } = this.ctx.getTransform();\n let scaleX, scaleY;\n\n if (b === 0 && c === 0) {\n // Fast path\n const normX = Math.abs(a);\n const normY = Math.abs(d);\n if (normX === normY) {\n if (lineWidth === 0) {\n scaleX = scaleY = 1 / normX;\n } else {\n const scaledLineWidth = normX * lineWidth;\n scaleX = scaleY = scaledLineWidth < 1 ? 1 / scaledLineWidth : 1;\n }\n } else if (lineWidth === 0) {\n scaleX = 1 / normX;\n scaleY = 1 / normY;\n } else {\n const scaledXLineWidth = normX * lineWidth;\n const scaledYLineWidth = normY * lineWidth;\n scaleX = scaledXLineWidth < 1 ? 1 / scaledXLineWidth : 1;\n scaleY = scaledYLineWidth < 1 ? 1 / scaledYLineWidth : 1;\n }\n } else {\n // A pixel (base (x, y)) is transformed by M into a parallelogram:\n // - its area is |det(M)|;\n // - heightY (orthogonal to Mx) has a length: |det(M)| / norm(Mx);\n // - heightX (orthogonal to My) has a length: |det(M)| / norm(My).\n // heightX and heightY are the thicknesses of the transformed pixel\n // and they must be both greater or equal to 1.\n const absDet = Math.abs(a * d - b * c);\n const normX = Math.hypot(a, b);\n const normY = Math.hypot(c, d);\n if (lineWidth === 0) {\n scaleX = normY / absDet;\n scaleY = normX / absDet;\n } else {\n const baseArea = lineWidth * absDet;\n scaleX = normY > baseArea ? normY / baseArea : 1;\n scaleY = normX > baseArea ? normX / baseArea : 1;\n }\n }\n this._cachedScaleForStroking[0] = scaleX;\n this._cachedScaleForStroking[1] = scaleY;\n }\n return this._cachedScaleForStroking;\n }\n\n // Rescale before stroking in order to have a final lineWidth\n // with both thicknesses greater or equal to 1.\n rescaleAndStroke(path, saveRestore) {\n const {\n ctx,\n current: { lineWidth },\n } = this;\n const [scaleX, scaleY] = this.getScaleForStroking();\n\n if (scaleX === scaleY) {\n ctx.lineWidth = (lineWidth || 1) * scaleX;\n ctx.stroke(path);\n return;\n }\n\n const dashes = ctx.getLineDash();\n if (saveRestore) {\n ctx.save();\n }\n\n ctx.scale(scaleX, scaleY);\n SCALE_MATRIX.a = 1 / scaleX;\n SCALE_MATRIX.d = 1 / scaleY;\n const newPath = new Path2D();\n newPath.addPath(path, SCALE_MATRIX);\n\n // How the dashed line is rendered depends on the current transform...\n // so we added a rescale to handle too thin lines and consequently\n // the way the line is dashed will be modified.\n // If scaleX === scaleY, the dashed lines will be rendered correctly\n // else we'll have some bugs (but only with too thin lines).\n // Here we take the max... why not taking the min... or something else.\n // Anyway, as said it's buggy when scaleX !== scaleY.\n if (dashes.length > 0) {\n const scale = Math.max(scaleX, scaleY);\n ctx.setLineDash(dashes.map(x => x / scale));\n ctx.lineDashOffset /= scale;\n }\n\n ctx.lineWidth = lineWidth || 1;\n ctx.stroke(newPath);\n\n if (saveRestore) {\n ctx.restore();\n }\n }\n\n isContentVisible() {\n for (let i = this.markedContentStack.length - 1; i >= 0; i--) {\n if (!this.markedContentStack[i].visible) {\n return false;\n }\n }\n return true;\n }\n}\n\nfor (const op in OPS) {\n if (CanvasGraphics.prototype[op] !== undefined) {\n CanvasGraphics.prototype[OPS[op]] = CanvasGraphics.prototype[op];\n }\n}\n\nexport { CanvasGraphics };\n","/* Copyright 2018 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nclass GlobalWorkerOptions {\n static #port = null;\n\n static #src = \"\";\n\n /**\n * @type {Worker | null}\n */\n static get workerPort() {\n return this.#port;\n }\n\n /**\n * @param {Worker | null} workerPort - Defines global port for worker process.\n * Overrides the `workerSrc` option.\n */\n static set workerPort(val) {\n if (\n !(typeof Worker !== \"undefined\" && val instanceof Worker) &&\n val !== null\n ) {\n throw new Error(\"Invalid `workerPort` type.\");\n }\n this.#port = val;\n }\n\n /**\n * @type {string}\n */\n static get workerSrc() {\n return this.#src;\n }\n\n /**\n * @param {string} workerSrc - A string containing the path and filename of\n * the worker file.\n *\n * NOTE: The `workerSrc` option should always be set, in order to prevent\n * any issues when using the PDF.js library.\n */\n static set workerSrc(val) {\n if (typeof val !== \"string\") {\n throw new Error(\"Invalid `workerSrc` type.\");\n }\n this.#src = val;\n }\n}\n\nexport { GlobalWorkerOptions };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nclass Metadata {\n #map;\n\n #data;\n\n constructor({ parsedData, rawData }) {\n this.#map = parsedData;\n this.#data = rawData;\n }\n\n getRaw() {\n return this.#data;\n }\n\n get(name) {\n return this.#map.get(name) ?? null;\n }\n\n [Symbol.iterator]() {\n return this.#map.entries();\n }\n}\n\nexport { Metadata };\n","/* Copyright 2020 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n info,\n RenderingIntentFlag,\n unreachable,\n warn,\n} from \"../shared/util.js\";\nimport { MurmurHash3_64 } from \"../shared/murmurhash3.js\";\n\nconst INTERNAL = Symbol(\"INTERNAL\");\n\nclass OptionalContentGroup {\n #isDisplay = false;\n\n #isPrint = false;\n\n #userSet = false;\n\n #visible = true;\n\n constructor(renderingIntent, { name, intent, usage, rbGroups }) {\n this.#isDisplay = !!(renderingIntent & RenderingIntentFlag.DISPLAY);\n this.#isPrint = !!(renderingIntent & RenderingIntentFlag.PRINT);\n\n this.name = name;\n this.intent = intent;\n this.usage = usage;\n this.rbGroups = rbGroups;\n }\n\n /**\n * @type {boolean}\n */\n get visible() {\n if (this.#userSet) {\n return this.#visible;\n }\n if (!this.#visible) {\n return false;\n }\n const { print, view } = this.usage;\n\n if (this.#isDisplay) {\n return view?.viewState !== \"OFF\";\n } else if (this.#isPrint) {\n return print?.printState !== \"OFF\";\n }\n return true;\n }\n\n /**\n * @ignore\n */\n _setVisible(internal, visible, userSet = false) {\n if (internal !== INTERNAL) {\n unreachable(\"Internal method `_setVisible` called.\");\n }\n this.#userSet = userSet;\n this.#visible = visible;\n }\n}\n\nclass OptionalContentConfig {\n #cachedGetHash = null;\n\n #groups = new Map();\n\n #initialHash = null;\n\n #order = null;\n\n constructor(data, renderingIntent = RenderingIntentFlag.DISPLAY) {\n this.renderingIntent = renderingIntent;\n\n this.name = null;\n this.creator = null;\n\n if (data === null) {\n return;\n }\n this.name = data.name;\n this.creator = data.creator;\n this.#order = data.order;\n for (const group of data.groups) {\n this.#groups.set(\n group.id,\n new OptionalContentGroup(renderingIntent, group)\n );\n }\n\n if (data.baseState === \"OFF\") {\n for (const group of this.#groups.values()) {\n group._setVisible(INTERNAL, false);\n }\n }\n\n for (const on of data.on) {\n this.#groups.get(on)._setVisible(INTERNAL, true);\n }\n\n for (const off of data.off) {\n this.#groups.get(off)._setVisible(INTERNAL, false);\n }\n\n // The following code must always run *last* in the constructor.\n this.#initialHash = this.getHash();\n }\n\n #evaluateVisibilityExpression(array) {\n const length = array.length;\n if (length < 2) {\n return true;\n }\n const operator = array[0];\n for (let i = 1; i < length; i++) {\n const element = array[i];\n let state;\n if (Array.isArray(element)) {\n state = this.#evaluateVisibilityExpression(element);\n } else if (this.#groups.has(element)) {\n state = this.#groups.get(element).visible;\n } else {\n warn(`Optional content group not found: ${element}`);\n return true;\n }\n switch (operator) {\n case \"And\":\n if (!state) {\n return false;\n }\n break;\n case \"Or\":\n if (state) {\n return true;\n }\n break;\n case \"Not\":\n return !state;\n default:\n return true;\n }\n }\n return operator === \"And\";\n }\n\n isVisible(group) {\n if (this.#groups.size === 0) {\n return true;\n }\n if (!group) {\n info(\"Optional content group not defined.\");\n return true;\n }\n if (group.type === \"OCG\") {\n if (!this.#groups.has(group.id)) {\n warn(`Optional content group not found: ${group.id}`);\n return true;\n }\n return this.#groups.get(group.id).visible;\n } else if (group.type === \"OCMD\") {\n // Per the spec, the expression should be preferred if available.\n if (group.expression) {\n return this.#evaluateVisibilityExpression(group.expression);\n }\n if (!group.policy || group.policy === \"AnyOn\") {\n // Default\n for (const id of group.ids) {\n if (!this.#groups.has(id)) {\n warn(`Optional content group not found: ${id}`);\n return true;\n }\n if (this.#groups.get(id).visible) {\n return true;\n }\n }\n return false;\n } else if (group.policy === \"AllOn\") {\n for (const id of group.ids) {\n if (!this.#groups.has(id)) {\n warn(`Optional content group not found: ${id}`);\n return true;\n }\n if (!this.#groups.get(id).visible) {\n return false;\n }\n }\n return true;\n } else if (group.policy === \"AnyOff\") {\n for (const id of group.ids) {\n if (!this.#groups.has(id)) {\n warn(`Optional content group not found: ${id}`);\n return true;\n }\n if (!this.#groups.get(id).visible) {\n return true;\n }\n }\n return false;\n } else if (group.policy === \"AllOff\") {\n for (const id of group.ids) {\n if (!this.#groups.has(id)) {\n warn(`Optional content group not found: ${id}`);\n return true;\n }\n if (this.#groups.get(id).visible) {\n return false;\n }\n }\n return true;\n }\n warn(`Unknown optional content policy ${group.policy}.`);\n return true;\n }\n warn(`Unknown group type ${group.type}.`);\n return true;\n }\n\n setVisibility(id, visible = true, preserveRB = true) {\n const group = this.#groups.get(id);\n if (!group) {\n warn(`Optional content group not found: ${id}`);\n return;\n }\n\n // If the visibility is about to be set to `true` and the group belongs to\n // any radiobutton groups, hide all other OCGs in these radiobutton groups,\n // provided that radiobutton state relationships are to be preserved.\n if (preserveRB && visible && group.rbGroups.length) {\n for (const rbGroup of group.rbGroups) {\n for (const otherId of rbGroup) {\n if (otherId !== id) {\n this.#groups.get(otherId)?._setVisible(INTERNAL, false, true);\n }\n }\n }\n }\n\n group._setVisible(INTERNAL, !!visible, /* userSet = */ true);\n\n this.#cachedGetHash = null;\n }\n\n setOCGState({ state, preserveRB }) {\n let operator;\n\n for (const elem of state) {\n switch (elem) {\n case \"ON\":\n case \"OFF\":\n case \"Toggle\":\n operator = elem;\n continue;\n }\n\n const group = this.#groups.get(elem);\n if (!group) {\n continue;\n }\n switch (operator) {\n case \"ON\":\n this.setVisibility(elem, true, preserveRB);\n break;\n case \"OFF\":\n this.setVisibility(elem, false, preserveRB);\n break;\n case \"Toggle\":\n this.setVisibility(elem, !group.visible, preserveRB);\n break;\n }\n }\n\n this.#cachedGetHash = null;\n }\n\n get hasInitialVisibility() {\n return this.#initialHash === null || this.getHash() === this.#initialHash;\n }\n\n getOrder() {\n if (!this.#groups.size) {\n return null;\n }\n if (this.#order) {\n return this.#order.slice();\n }\n return [...this.#groups.keys()];\n }\n\n getGroup(id) {\n return this.#groups.get(id) || null;\n }\n\n getHash() {\n if (this.#cachedGetHash !== null) {\n return this.#cachedGetHash;\n }\n const hash = new MurmurHash3_64();\n\n for (const [id, group] of this.#groups) {\n hash.update(`${id}:${group.visible}`);\n }\n return (this.#cachedGetHash = hash.hexdigest());\n }\n\n [Symbol.iterator]() {\n return this.#groups.entries();\n }\n}\n\nexport { OptionalContentConfig };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"../interfaces\").IPDFStream} IPDFStream */\n/** @typedef {import(\"../interfaces\").IPDFStreamReader} IPDFStreamReader */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../interfaces\").IPDFStreamRangeReader} IPDFStreamRangeReader */\n\nimport { assert } from \"../shared/util.js\";\nimport { isPdfFile } from \"./display_utils.js\";\n\n/** @implements {IPDFStream} */\nclass PDFDataTransportStream {\n constructor(\n pdfDataRangeTransport,\n { disableRange = false, disableStream = false }\n ) {\n assert(\n pdfDataRangeTransport,\n 'PDFDataTransportStream - missing required \"pdfDataRangeTransport\" argument.'\n );\n const { length, initialData, progressiveDone, contentDispositionFilename } =\n pdfDataRangeTransport;\n\n this._queuedChunks = [];\n this._progressiveDone = progressiveDone;\n this._contentDispositionFilename = contentDispositionFilename;\n\n if (initialData?.length > 0) {\n // Prevent any possible issues by only transferring a Uint8Array that\n // completely \"utilizes\" its underlying ArrayBuffer.\n const buffer =\n initialData instanceof Uint8Array &&\n initialData.byteLength === initialData.buffer.byteLength\n ? initialData.buffer\n : new Uint8Array(initialData).buffer;\n this._queuedChunks.push(buffer);\n }\n\n this._pdfDataRangeTransport = pdfDataRangeTransport;\n this._isStreamingSupported = !disableStream;\n this._isRangeSupported = !disableRange;\n this._contentLength = length;\n\n this._fullRequestReader = null;\n this._rangeReaders = [];\n\n pdfDataRangeTransport.addRangeListener((begin, chunk) => {\n this._onReceiveData({ begin, chunk });\n });\n\n pdfDataRangeTransport.addProgressListener((loaded, total) => {\n this._onProgress({ loaded, total });\n });\n\n pdfDataRangeTransport.addProgressiveReadListener(chunk => {\n this._onReceiveData({ chunk });\n });\n\n pdfDataRangeTransport.addProgressiveDoneListener(() => {\n this._onProgressiveDone();\n });\n\n pdfDataRangeTransport.transportReady();\n }\n\n _onReceiveData({ begin, chunk }) {\n // Prevent any possible issues by only transferring a Uint8Array that\n // completely \"utilizes\" its underlying ArrayBuffer.\n const buffer =\n chunk instanceof Uint8Array &&\n chunk.byteLength === chunk.buffer.byteLength\n ? chunk.buffer\n : new Uint8Array(chunk).buffer;\n\n if (begin === undefined) {\n if (this._fullRequestReader) {\n this._fullRequestReader._enqueue(buffer);\n } else {\n this._queuedChunks.push(buffer);\n }\n } else {\n const found = this._rangeReaders.some(function (rangeReader) {\n if (rangeReader._begin !== begin) {\n return false;\n }\n rangeReader._enqueue(buffer);\n return true;\n });\n assert(\n found,\n \"_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found.\"\n );\n }\n }\n\n get _progressiveDataLength() {\n return this._fullRequestReader?._loaded ?? 0;\n }\n\n _onProgress(evt) {\n if (evt.total === undefined) {\n // Reporting to first range reader, if it exists.\n this._rangeReaders[0]?.onProgress?.({ loaded: evt.loaded });\n } else {\n this._fullRequestReader?.onProgress?.({\n loaded: evt.loaded,\n total: evt.total,\n });\n }\n }\n\n _onProgressiveDone() {\n this._fullRequestReader?.progressiveDone();\n this._progressiveDone = true;\n }\n\n _removeRangeReader(reader) {\n const i = this._rangeReaders.indexOf(reader);\n if (i >= 0) {\n this._rangeReaders.splice(i, 1);\n }\n }\n\n getFullReader() {\n assert(\n !this._fullRequestReader,\n \"PDFDataTransportStream.getFullReader can only be called once.\"\n );\n const queuedChunks = this._queuedChunks;\n this._queuedChunks = null;\n return new PDFDataTransportStreamReader(\n this,\n queuedChunks,\n this._progressiveDone,\n this._contentDispositionFilename\n );\n }\n\n getRangeReader(begin, end) {\n if (end <= this._progressiveDataLength) {\n return null;\n }\n const reader = new PDFDataTransportStreamRangeReader(this, begin, end);\n this._pdfDataRangeTransport.requestDataRange(begin, end);\n this._rangeReaders.push(reader);\n return reader;\n }\n\n cancelAllRequests(reason) {\n this._fullRequestReader?.cancel(reason);\n\n for (const reader of this._rangeReaders.slice(0)) {\n reader.cancel(reason);\n }\n this._pdfDataRangeTransport.abort();\n }\n}\n\n/** @implements {IPDFStreamReader} */\nclass PDFDataTransportStreamReader {\n constructor(\n stream,\n queuedChunks,\n progressiveDone = false,\n contentDispositionFilename = null\n ) {\n this._stream = stream;\n this._done = progressiveDone || false;\n this._filename = isPdfFile(contentDispositionFilename)\n ? contentDispositionFilename\n : null;\n this._queuedChunks = queuedChunks || [];\n this._loaded = 0;\n for (const chunk of this._queuedChunks) {\n this._loaded += chunk.byteLength;\n }\n this._requests = [];\n this._headersReady = Promise.resolve();\n stream._fullRequestReader = this;\n\n this.onProgress = null;\n }\n\n _enqueue(chunk) {\n if (this._done) {\n return; // Ignore new data.\n }\n if (this._requests.length > 0) {\n const requestCapability = this._requests.shift();\n requestCapability.resolve({ value: chunk, done: false });\n } else {\n this._queuedChunks.push(chunk);\n }\n this._loaded += chunk.byteLength;\n }\n\n get headersReady() {\n return this._headersReady;\n }\n\n get filename() {\n return this._filename;\n }\n\n get isRangeSupported() {\n return this._stream._isRangeSupported;\n }\n\n get isStreamingSupported() {\n return this._stream._isStreamingSupported;\n }\n\n get contentLength() {\n return this._stream._contentLength;\n }\n\n async read() {\n if (this._queuedChunks.length > 0) {\n const chunk = this._queuedChunks.shift();\n return { value: chunk, done: false };\n }\n if (this._done) {\n return { value: undefined, done: true };\n }\n const requestCapability = Promise.withResolvers();\n this._requests.push(requestCapability);\n return requestCapability.promise;\n }\n\n cancel(reason) {\n this._done = true;\n for (const requestCapability of this._requests) {\n requestCapability.resolve({ value: undefined, done: true });\n }\n this._requests.length = 0;\n }\n\n progressiveDone() {\n if (this._done) {\n return;\n }\n this._done = true;\n }\n}\n\n/** @implements {IPDFStreamRangeReader} */\nclass PDFDataTransportStreamRangeReader {\n constructor(stream, begin, end) {\n this._stream = stream;\n this._begin = begin;\n this._end = end;\n this._queuedChunk = null;\n this._requests = [];\n this._done = false;\n\n this.onProgress = null;\n }\n\n _enqueue(chunk) {\n if (this._done) {\n return; // ignore new data\n }\n if (this._requests.length === 0) {\n this._queuedChunk = chunk;\n } else {\n const requestsCapability = this._requests.shift();\n requestsCapability.resolve({ value: chunk, done: false });\n for (const requestCapability of this._requests) {\n requestCapability.resolve({ value: undefined, done: true });\n }\n this._requests.length = 0;\n }\n this._done = true;\n this._stream._removeRangeReader(this);\n }\n\n get isStreamingSupported() {\n return false;\n }\n\n async read() {\n if (this._queuedChunk) {\n const chunk = this._queuedChunk;\n this._queuedChunk = null;\n return { value: chunk, done: false };\n }\n if (this._done) {\n return { value: undefined, done: true };\n }\n const requestCapability = Promise.withResolvers();\n this._requests.push(requestCapability);\n return requestCapability.promise;\n }\n\n cancel(reason) {\n this._done = true;\n for (const requestCapability of this._requests) {\n requestCapability.resolve({ value: undefined, done: true });\n }\n this._requests.length = 0;\n this._stream._removeRangeReader(this);\n }\n}\n\nexport { PDFDataTransportStream };\n","/* Copyright 2017 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { stringToBytes } from \"../shared/util.js\";\n\n// This getFilenameFromContentDispositionHeader function is adapted from\n// https://github.com/Rob--W/open-in-browser/blob/7e2e35a38b8b4e981b11da7b2f01df0149049e92/extension/content-disposition.js\n// with the following changes:\n// - Modified to conform to PDF.js's coding style.\n// - Move return to the end of the function to prevent Babel from dropping the\n// function declarations.\n\n/**\n * Extract file name from the Content-Disposition HTTP response header.\n *\n * @param {string} contentDisposition\n * @returns {string} Filename, if found in the Content-Disposition header.\n */\nfunction getFilenameFromContentDispositionHeader(contentDisposition) {\n let needsEncodingFixup = true;\n\n // filename*=ext-value (\"ext-value\" from RFC 5987, referenced by RFC 6266).\n let tmp = toParamRegExp(\"filename\\\\*\", \"i\").exec(contentDisposition);\n if (tmp) {\n tmp = tmp[1];\n let filename = rfc2616unquote(tmp);\n filename = unescape(filename);\n filename = rfc5987decode(filename);\n filename = rfc2047decode(filename);\n return fixupEncoding(filename);\n }\n\n // Continuations (RFC 2231 section 3, referenced by RFC 5987 section 3.1).\n // filename*n*=part\n // filename*n=part\n tmp = rfc2231getparam(contentDisposition);\n if (tmp) {\n // RFC 2047, section\n const filename = rfc2047decode(tmp);\n return fixupEncoding(filename);\n }\n\n // filename=value (RFC 5987, section 4.1).\n tmp = toParamRegExp(\"filename\", \"i\").exec(contentDisposition);\n if (tmp) {\n tmp = tmp[1];\n let filename = rfc2616unquote(tmp);\n filename = rfc2047decode(filename);\n return fixupEncoding(filename);\n }\n\n // After this line there are only function declarations. We cannot put\n // \"return\" here for readability because babel would then drop the function\n // declarations...\n function toParamRegExp(attributePattern, flags) {\n return new RegExp(\n \"(?:^|;)\\\\s*\" +\n attributePattern +\n \"\\\\s*=\\\\s*\" +\n // Captures: value = token | quoted-string\n // (RFC 2616, section 3.6 and referenced by RFC 6266 4.1)\n \"(\" +\n '[^\";\\\\s][^;\\\\s]*' +\n \"|\" +\n '\"(?:[^\"\\\\\\\\]|\\\\\\\\\"?)+\"?' +\n \")\",\n flags\n );\n }\n function textdecode(encoding, value) {\n if (encoding) {\n if (!/^[\\x00-\\xFF]+$/.test(value)) {\n return value;\n }\n try {\n const decoder = new TextDecoder(encoding, { fatal: true });\n const buffer = stringToBytes(value);\n value = decoder.decode(buffer);\n needsEncodingFixup = false;\n } catch {\n // TextDecoder constructor threw - unrecognized encoding.\n }\n }\n return value;\n }\n function fixupEncoding(value) {\n if (needsEncodingFixup && /[\\x80-\\xff]/.test(value)) {\n // Maybe multi-byte UTF-8.\n value = textdecode(\"utf-8\", value);\n if (needsEncodingFixup) {\n // Try iso-8859-1 encoding.\n value = textdecode(\"iso-8859-1\", value);\n }\n }\n return value;\n }\n function rfc2231getparam(contentDispositionStr) {\n const matches = [];\n let match;\n // Iterate over all filename*n= and filename*n*= with n being an integer\n // of at least zero. Any non-zero number must not start with '0'.\n const iter = toParamRegExp(\"filename\\\\*((?!0\\\\d)\\\\d+)(\\\\*?)\", \"ig\");\n while ((match = iter.exec(contentDispositionStr)) !== null) {\n let [, n, quot, part] = match; // eslint-disable-line prefer-const\n n = parseInt(n, 10);\n if (n in matches) {\n // Ignore anything after the invalid second filename*0.\n if (n === 0) {\n break;\n }\n continue;\n }\n matches[n] = [quot, part];\n }\n const parts = [];\n for (let n = 0; n < matches.length; ++n) {\n if (!(n in matches)) {\n // Numbers must be consecutive. Truncate when there is a hole.\n break;\n }\n let [quot, part] = matches[n]; // eslint-disable-line prefer-const\n part = rfc2616unquote(part);\n if (quot) {\n part = unescape(part);\n if (n === 0) {\n part = rfc5987decode(part);\n }\n }\n parts.push(part);\n }\n return parts.join(\"\");\n }\n function rfc2616unquote(value) {\n if (value.startsWith('\"')) {\n const parts = value.slice(1).split('\\\\\"');\n // Find the first unescaped \" and terminate there.\n for (let i = 0; i < parts.length; ++i) {\n const quotindex = parts[i].indexOf('\"');\n if (quotindex !== -1) {\n parts[i] = parts[i].slice(0, quotindex);\n parts.length = i + 1; // Truncates and stop the iteration.\n }\n parts[i] = parts[i].replaceAll(/\\\\(.)/g, \"$1\");\n }\n value = parts.join('\"');\n }\n return value;\n }\n function rfc5987decode(extvalue) {\n // Decodes \"ext-value\" from RFC 5987.\n const encodingend = extvalue.indexOf(\"'\");\n if (encodingend === -1) {\n // Some servers send \"filename*=\" without encoding 'language' prefix,\n // e.g. in https://github.com/Rob--W/open-in-browser/issues/26\n // Let's accept the value like Firefox (57) (Chrome 62 rejects it).\n return extvalue;\n }\n const encoding = extvalue.slice(0, encodingend);\n const langvalue = extvalue.slice(encodingend + 1);\n // Ignore language (RFC 5987 section 3.2.1, and RFC 6266 section 4.1 ).\n const value = langvalue.replace(/^[^']*'/, \"\");\n return textdecode(encoding, value);\n }\n function rfc2047decode(value) {\n // RFC 2047-decode the result. Firefox tried to drop support for it, but\n // backed out because some servers use it - https://bugzil.la/875615\n // Firefox's condition for decoding is here: https://searchfox.org/mozilla-central/rev/4a590a5a15e35d88a3b23dd6ac3c471cf85b04a8/netwerk/mime/nsMIMEHeaderParamImpl.cpp#742-748\n\n // We are more strict and only recognize RFC 2047-encoding if the value\n // starts with \"=?\", since then it is likely that the full value is\n // RFC 2047-encoded.\n\n // Firefox also decodes words even where RFC 2047 section 5 states:\n // \"An 'encoded-word' MUST NOT appear within a 'quoted-string'.\"\n if (!value.startsWith(\"=?\") || /[\\x00-\\x19\\x80-\\xff]/.test(value)) {\n return value;\n }\n // RFC 2047, section 2.4\n // encoded-word = \"=?\" charset \"?\" encoding \"?\" encoded-text \"?=\"\n // charset = token (but let's restrict to characters that denote a\n // possibly valid encoding).\n // encoding = q or b\n // encoded-text = any printable ASCII character other than ? or space.\n // ... but Firefox permits ? and space.\n return value.replaceAll(\n /=\\?([\\w-]*)\\?([QqBb])\\?((?:[^?]|\\?(?!=))*)\\?=/g,\n function (matches, charset, encoding, text) {\n if (encoding === \"q\" || encoding === \"Q\") {\n // RFC 2047 section 4.2.\n text = text.replaceAll(\"_\", \" \");\n text = text.replaceAll(/=([0-9a-fA-F]{2})/g, function (match, hex) {\n return String.fromCharCode(parseInt(hex, 16));\n });\n return textdecode(charset, text);\n } // else encoding is b or B - base64 (RFC 2047 section 4.1)\n try {\n text = atob(text);\n } catch {}\n return textdecode(charset, text);\n }\n );\n }\n\n return \"\";\n}\n\nexport { getFilenameFromContentDispositionHeader };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert, ResponseException } from \"../shared/util.js\";\nimport { getFilenameFromContentDispositionHeader } from \"./content_disposition.js\";\nimport { isPdfFile } from \"./display_utils.js\";\n\nfunction createHeaders(isHttp, httpHeaders) {\n const headers = new Headers();\n\n if (!isHttp || !httpHeaders || typeof httpHeaders !== \"object\") {\n return headers;\n }\n for (const key in httpHeaders) {\n const val = httpHeaders[key];\n if (val !== undefined) {\n headers.append(key, val);\n }\n }\n return headers;\n}\n\nfunction getResponseOrigin(url) {\n // Notably, null is distinct from \"null\" string (e.g. from file:-URLs).\n return URL.parse(url)?.origin ?? null;\n}\n\nfunction validateRangeRequestCapabilities({\n responseHeaders,\n isHttp,\n rangeChunkSize,\n disableRange,\n}) {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n assert(\n Number.isInteger(rangeChunkSize) && rangeChunkSize > 0,\n \"rangeChunkSize must be an integer larger than zero.\"\n );\n }\n const returnValues = {\n allowRangeRequests: false,\n suggestedLength: undefined,\n };\n\n const length = parseInt(responseHeaders.get(\"Content-Length\"), 10);\n if (!Number.isInteger(length)) {\n return returnValues;\n }\n\n returnValues.suggestedLength = length;\n\n if (length <= 2 * rangeChunkSize) {\n // The file size is smaller than the size of two chunks, so it does not\n // make any sense to abort the request and retry with a range request.\n return returnValues;\n }\n\n if (disableRange || !isHttp) {\n return returnValues;\n }\n if (responseHeaders.get(\"Accept-Ranges\") !== \"bytes\") {\n return returnValues;\n }\n\n const contentEncoding = responseHeaders.get(\"Content-Encoding\") || \"identity\";\n if (contentEncoding !== \"identity\") {\n return returnValues;\n }\n\n returnValues.allowRangeRequests = true;\n return returnValues;\n}\n\nfunction extractFilenameFromHeader(responseHeaders) {\n const contentDisposition = responseHeaders.get(\"Content-Disposition\");\n if (contentDisposition) {\n let filename = getFilenameFromContentDispositionHeader(contentDisposition);\n if (filename.includes(\"%\")) {\n try {\n filename = decodeURIComponent(filename);\n } catch {}\n }\n if (isPdfFile(filename)) {\n return filename;\n }\n }\n return null;\n}\n\nfunction createResponseError(status, url) {\n return new ResponseException(\n `Unexpected server response (${status}) while retrieving PDF \"${url}\".`,\n status,\n /* missing = */ status === 404 || (status === 0 && url.startsWith(\"file:\"))\n );\n}\n\nfunction validateResponseStatus(status) {\n return status === 200 || status === 206;\n}\n\nexport {\n createHeaders,\n createResponseError,\n extractFilenameFromHeader,\n getResponseOrigin,\n validateRangeRequestCapabilities,\n validateResponseStatus,\n};\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AbortException, assert, warn } from \"../shared/util.js\";\nimport {\n createHeaders,\n createResponseError,\n extractFilenameFromHeader,\n getResponseOrigin,\n validateRangeRequestCapabilities,\n validateResponseStatus,\n} from \"./network_utils.js\";\n\nif (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\n 'Module \"./fetch_stream.js\" shall not be used with MOZCENTRAL builds.'\n );\n}\n\nfunction createFetchOptions(headers, withCredentials, abortController) {\n return {\n method: \"GET\",\n headers,\n signal: abortController.signal,\n mode: \"cors\",\n credentials: withCredentials ? \"include\" : \"same-origin\",\n redirect: \"follow\",\n };\n}\n\nfunction getArrayBuffer(val) {\n if (val instanceof Uint8Array) {\n return val.buffer;\n }\n if (val instanceof ArrayBuffer) {\n return val;\n }\n warn(`getArrayBuffer - unexpected data format: ${val}`);\n return new Uint8Array(val).buffer;\n}\n\n/** @implements {IPDFStream} */\nclass PDFFetchStream {\n _responseOrigin = null;\n\n constructor(source) {\n this.source = source;\n this.isHttp = /^https?:/i.test(source.url);\n this.headers = createHeaders(this.isHttp, source.httpHeaders);\n\n this._fullRequestReader = null;\n this._rangeRequestReaders = [];\n }\n\n get _progressiveDataLength() {\n return this._fullRequestReader?._loaded ?? 0;\n }\n\n getFullReader() {\n assert(\n !this._fullRequestReader,\n \"PDFFetchStream.getFullReader can only be called once.\"\n );\n this._fullRequestReader = new PDFFetchStreamReader(this);\n return this._fullRequestReader;\n }\n\n getRangeReader(begin, end) {\n if (end <= this._progressiveDataLength) {\n return null;\n }\n const reader = new PDFFetchStreamRangeReader(this, begin, end);\n this._rangeRequestReaders.push(reader);\n return reader;\n }\n\n cancelAllRequests(reason) {\n this._fullRequestReader?.cancel(reason);\n\n for (const reader of this._rangeRequestReaders.slice(0)) {\n reader.cancel(reason);\n }\n }\n}\n\n/** @implements {IPDFStreamReader} */\nclass PDFFetchStreamReader {\n constructor(stream) {\n this._stream = stream;\n this._reader = null;\n this._loaded = 0;\n this._filename = null;\n const source = stream.source;\n this._withCredentials = source.withCredentials || false;\n this._contentLength = source.length;\n this._headersCapability = Promise.withResolvers();\n this._disableRange = source.disableRange || false;\n this._rangeChunkSize = source.rangeChunkSize;\n if (!this._rangeChunkSize && !this._disableRange) {\n this._disableRange = true;\n }\n\n this._abortController = new AbortController();\n this._isStreamingSupported = !source.disableStream;\n this._isRangeSupported = !source.disableRange;\n // Always create a copy of the headers.\n const headers = new Headers(stream.headers);\n\n const url = source.url;\n fetch(\n url,\n createFetchOptions(headers, this._withCredentials, this._abortController)\n )\n .then(response => {\n stream._responseOrigin = getResponseOrigin(response.url);\n\n if (!validateResponseStatus(response.status)) {\n throw createResponseError(response.status, url);\n }\n this._reader = response.body.getReader();\n this._headersCapability.resolve();\n\n const responseHeaders = response.headers;\n\n const { allowRangeRequests, suggestedLength } =\n validateRangeRequestCapabilities({\n responseHeaders,\n isHttp: stream.isHttp,\n rangeChunkSize: this._rangeChunkSize,\n disableRange: this._disableRange,\n });\n\n this._isRangeSupported = allowRangeRequests;\n // Setting right content length.\n this._contentLength = suggestedLength || this._contentLength;\n\n this._filename = extractFilenameFromHeader(responseHeaders);\n\n // We need to stop reading when range is supported and streaming is\n // disabled.\n if (!this._isStreamingSupported && this._isRangeSupported) {\n this.cancel(new AbortException(\"Streaming is disabled.\"));\n }\n })\n .catch(this._headersCapability.reject);\n\n this.onProgress = null;\n }\n\n get headersReady() {\n return this._headersCapability.promise;\n }\n\n get filename() {\n return this._filename;\n }\n\n get contentLength() {\n return this._contentLength;\n }\n\n get isRangeSupported() {\n return this._isRangeSupported;\n }\n\n get isStreamingSupported() {\n return this._isStreamingSupported;\n }\n\n async read() {\n await this._headersCapability.promise;\n const { value, done } = await this._reader.read();\n if (done) {\n return { value, done };\n }\n this._loaded += value.byteLength;\n this.onProgress?.({\n loaded: this._loaded,\n total: this._contentLength,\n });\n\n return { value: getArrayBuffer(value), done: false };\n }\n\n cancel(reason) {\n this._reader?.cancel(reason);\n this._abortController.abort();\n }\n}\n\n/** @implements {IPDFStreamRangeReader} */\nclass PDFFetchStreamRangeReader {\n constructor(stream, begin, end) {\n this._stream = stream;\n this._reader = null;\n this._loaded = 0;\n const source = stream.source;\n this._withCredentials = source.withCredentials || false;\n this._readCapability = Promise.withResolvers();\n this._isStreamingSupported = !source.disableStream;\n\n this._abortController = new AbortController();\n // Always create a copy of the headers.\n const headers = new Headers(stream.headers);\n headers.append(\"Range\", `bytes=${begin}-${end - 1}`);\n\n const url = source.url;\n fetch(\n url,\n createFetchOptions(headers, this._withCredentials, this._abortController)\n )\n .then(response => {\n const responseOrigin = getResponseOrigin(response.url);\n\n if (responseOrigin !== stream._responseOrigin) {\n throw new Error(\n `Expected range response-origin \"${responseOrigin}\" to match \"${stream._responseOrigin}\".`\n );\n }\n if (!validateResponseStatus(response.status)) {\n throw createResponseError(response.status, url);\n }\n this._readCapability.resolve();\n this._reader = response.body.getReader();\n })\n .catch(this._readCapability.reject);\n\n this.onProgress = null;\n }\n\n get isStreamingSupported() {\n return this._isStreamingSupported;\n }\n\n async read() {\n await this._readCapability.promise;\n const { value, done } = await this._reader.read();\n if (done) {\n return { value, done };\n }\n this._loaded += value.byteLength;\n this.onProgress?.({ loaded: this._loaded });\n\n return { value: getArrayBuffer(value), done: false };\n }\n\n cancel(reason) {\n this._reader?.cancel(reason);\n this._abortController.abort();\n }\n}\n\nexport { PDFFetchStream };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert, stringToBytes, warn } from \"../shared/util.js\";\nimport {\n createHeaders,\n createResponseError,\n extractFilenameFromHeader,\n getResponseOrigin,\n validateRangeRequestCapabilities,\n} from \"./network_utils.js\";\n\nif (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\n 'Module \"./network.js\" shall not be used with MOZCENTRAL builds.'\n );\n}\n\nconst OK_RESPONSE = 200;\nconst PARTIAL_CONTENT_RESPONSE = 206;\n\nfunction getArrayBuffer(xhr) {\n const data = xhr.response;\n if (typeof data !== \"string\") {\n return data;\n }\n return stringToBytes(data).buffer;\n}\n\nclass NetworkManager {\n _responseOrigin = null;\n\n constructor({ url, httpHeaders, withCredentials }) {\n this.url = url;\n this.isHttp = /^https?:/i.test(url);\n this.headers = createHeaders(this.isHttp, httpHeaders);\n this.withCredentials = withCredentials || false;\n\n this.currXhrId = 0;\n this.pendingRequests = Object.create(null);\n }\n\n request(args) {\n const xhr = new XMLHttpRequest();\n const xhrId = this.currXhrId++;\n const pendingRequest = (this.pendingRequests[xhrId] = { xhr });\n\n xhr.open(\"GET\", this.url);\n xhr.withCredentials = this.withCredentials;\n for (const [key, val] of this.headers) {\n xhr.setRequestHeader(key, val);\n }\n if (this.isHttp && \"begin\" in args && \"end\" in args) {\n xhr.setRequestHeader(\"Range\", `bytes=${args.begin}-${args.end - 1}`);\n pendingRequest.expectedStatus = PARTIAL_CONTENT_RESPONSE;\n } else {\n pendingRequest.expectedStatus = OK_RESPONSE;\n }\n xhr.responseType = \"arraybuffer\";\n\n assert(args.onError, \"Expected `onError` callback to be provided.\");\n xhr.onerror = () => {\n args.onError(xhr.status);\n };\n xhr.onreadystatechange = this.onStateChange.bind(this, xhrId);\n xhr.onprogress = this.onProgress.bind(this, xhrId);\n\n pendingRequest.onHeadersReceived = args.onHeadersReceived;\n pendingRequest.onDone = args.onDone;\n pendingRequest.onError = args.onError;\n pendingRequest.onProgress = args.onProgress;\n\n xhr.send(null);\n\n return xhrId;\n }\n\n onProgress(xhrId, evt) {\n const pendingRequest = this.pendingRequests[xhrId];\n if (!pendingRequest) {\n return; // Maybe abortRequest was called...\n }\n pendingRequest.onProgress?.(evt);\n }\n\n onStateChange(xhrId, evt) {\n const pendingRequest = this.pendingRequests[xhrId];\n if (!pendingRequest) {\n return; // Maybe abortRequest was called...\n }\n\n const xhr = pendingRequest.xhr;\n if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) {\n pendingRequest.onHeadersReceived();\n delete pendingRequest.onHeadersReceived;\n }\n\n if (xhr.readyState !== 4) {\n return;\n }\n\n if (!(xhrId in this.pendingRequests)) {\n // The XHR request might have been aborted in onHeadersReceived()\n // callback, in which case we should abort request.\n return;\n }\n\n delete this.pendingRequests[xhrId];\n\n // Success status == 0 can be on ftp, file and other protocols.\n if (xhr.status === 0 && this.isHttp) {\n pendingRequest.onError(xhr.status);\n return;\n }\n const xhrStatus = xhr.status || OK_RESPONSE;\n\n // From http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35.2:\n // \"A server MAY ignore the Range header\". This means it's possible to\n // get a 200 rather than a 206 response from a range request.\n const ok_response_on_range_request =\n xhrStatus === OK_RESPONSE &&\n pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE;\n\n if (\n !ok_response_on_range_request &&\n xhrStatus !== pendingRequest.expectedStatus\n ) {\n pendingRequest.onError(xhr.status);\n return;\n }\n\n const chunk = getArrayBuffer(xhr);\n if (xhrStatus === PARTIAL_CONTENT_RESPONSE) {\n const rangeHeader = xhr.getResponseHeader(\"Content-Range\");\n const matches = /bytes (\\d+)-(\\d+)\\/(\\d+)/.exec(rangeHeader);\n if (matches) {\n pendingRequest.onDone({\n begin: parseInt(matches[1], 10),\n chunk,\n });\n } else {\n warn(`Missing or invalid \"Content-Range\" header.`);\n pendingRequest.onError(0);\n }\n } else if (chunk) {\n pendingRequest.onDone({\n begin: 0,\n chunk,\n });\n } else {\n pendingRequest.onError(xhr.status);\n }\n }\n\n getRequestXhr(xhrId) {\n return this.pendingRequests[xhrId].xhr;\n }\n\n isPendingRequest(xhrId) {\n return xhrId in this.pendingRequests;\n }\n\n abortRequest(xhrId) {\n const xhr = this.pendingRequests[xhrId].xhr;\n delete this.pendingRequests[xhrId];\n xhr.abort();\n }\n}\n\n/** @implements {IPDFStream} */\nclass PDFNetworkStream {\n constructor(source) {\n this._source = source;\n this._manager = new NetworkManager(source);\n this._rangeChunkSize = source.rangeChunkSize;\n this._fullRequestReader = null;\n this._rangeRequestReaders = [];\n }\n\n _onRangeRequestReaderClosed(reader) {\n const i = this._rangeRequestReaders.indexOf(reader);\n if (i >= 0) {\n this._rangeRequestReaders.splice(i, 1);\n }\n }\n\n getFullReader() {\n assert(\n !this._fullRequestReader,\n \"PDFNetworkStream.getFullReader can only be called once.\"\n );\n this._fullRequestReader = new PDFNetworkStreamFullRequestReader(\n this._manager,\n this._source\n );\n return this._fullRequestReader;\n }\n\n getRangeReader(begin, end) {\n const reader = new PDFNetworkStreamRangeRequestReader(\n this._manager,\n begin,\n end\n );\n reader.onClosed = this._onRangeRequestReaderClosed.bind(this);\n this._rangeRequestReaders.push(reader);\n return reader;\n }\n\n cancelAllRequests(reason) {\n this._fullRequestReader?.cancel(reason);\n\n for (const reader of this._rangeRequestReaders.slice(0)) {\n reader.cancel(reason);\n }\n }\n}\n\n/** @implements {IPDFStreamReader} */\nclass PDFNetworkStreamFullRequestReader {\n constructor(manager, source) {\n this._manager = manager;\n\n this._url = source.url;\n this._fullRequestId = manager.request({\n onHeadersReceived: this._onHeadersReceived.bind(this),\n onDone: this._onDone.bind(this),\n onError: this._onError.bind(this),\n onProgress: this._onProgress.bind(this),\n });\n this._headersCapability = Promise.withResolvers();\n this._disableRange = source.disableRange || false;\n this._contentLength = source.length; // Optional\n this._rangeChunkSize = source.rangeChunkSize;\n if (!this._rangeChunkSize && !this._disableRange) {\n this._disableRange = true;\n }\n\n this._isStreamingSupported = false;\n this._isRangeSupported = false;\n\n this._cachedChunks = [];\n this._requests = [];\n this._done = false;\n this._storedError = undefined;\n this._filename = null;\n\n this.onProgress = null;\n }\n\n _onHeadersReceived() {\n const fullRequestXhrId = this._fullRequestId;\n const fullRequestXhr = this._manager.getRequestXhr(fullRequestXhrId);\n\n this._manager._responseOrigin = getResponseOrigin(\n fullRequestXhr.responseURL\n );\n\n const rawResponseHeaders = fullRequestXhr.getAllResponseHeaders();\n const responseHeaders = new Headers(\n rawResponseHeaders\n ? rawResponseHeaders\n .trimStart()\n .replace(/[^\\S ]+$/, \"\") // Not `trimEnd`, to keep regular spaces.\n .split(/[\\r\\n]+/)\n .map(x => {\n const [key, ...val] = x.split(\": \");\n return [key, val.join(\": \")];\n })\n : []\n );\n\n const { allowRangeRequests, suggestedLength } =\n validateRangeRequestCapabilities({\n responseHeaders,\n isHttp: this._manager.isHttp,\n rangeChunkSize: this._rangeChunkSize,\n disableRange: this._disableRange,\n });\n\n if (allowRangeRequests) {\n this._isRangeSupported = true;\n }\n // Setting right content length.\n this._contentLength = suggestedLength || this._contentLength;\n\n this._filename = extractFilenameFromHeader(responseHeaders);\n\n if (this._isRangeSupported) {\n // NOTE: by cancelling the full request, and then issuing range\n // requests, there will be an issue for sites where you can only\n // request the pdf once. However, if this is the case, then the\n // server should not be returning that it can support range requests.\n this._manager.abortRequest(fullRequestXhrId);\n }\n\n this._headersCapability.resolve();\n }\n\n _onDone(data) {\n if (data) {\n if (this._requests.length > 0) {\n const requestCapability = this._requests.shift();\n requestCapability.resolve({ value: data.chunk, done: false });\n } else {\n this._cachedChunks.push(data.chunk);\n }\n }\n this._done = true;\n if (this._cachedChunks.length > 0) {\n return;\n }\n for (const requestCapability of this._requests) {\n requestCapability.resolve({ value: undefined, done: true });\n }\n this._requests.length = 0;\n }\n\n _onError(status) {\n this._storedError = createResponseError(status, this._url);\n this._headersCapability.reject(this._storedError);\n for (const requestCapability of this._requests) {\n requestCapability.reject(this._storedError);\n }\n this._requests.length = 0;\n this._cachedChunks.length = 0;\n }\n\n _onProgress(evt) {\n this.onProgress?.({\n loaded: evt.loaded,\n total: evt.lengthComputable ? evt.total : this._contentLength,\n });\n }\n\n get filename() {\n return this._filename;\n }\n\n get isRangeSupported() {\n return this._isRangeSupported;\n }\n\n get isStreamingSupported() {\n return this._isStreamingSupported;\n }\n\n get contentLength() {\n return this._contentLength;\n }\n\n get headersReady() {\n return this._headersCapability.promise;\n }\n\n async read() {\n await this._headersCapability.promise;\n\n if (this._storedError) {\n throw this._storedError;\n }\n if (this._cachedChunks.length > 0) {\n const chunk = this._cachedChunks.shift();\n return { value: chunk, done: false };\n }\n if (this._done) {\n return { value: undefined, done: true };\n }\n const requestCapability = Promise.withResolvers();\n this._requests.push(requestCapability);\n return requestCapability.promise;\n }\n\n cancel(reason) {\n this._done = true;\n this._headersCapability.reject(reason);\n for (const requestCapability of this._requests) {\n requestCapability.resolve({ value: undefined, done: true });\n }\n this._requests.length = 0;\n if (this._manager.isPendingRequest(this._fullRequestId)) {\n this._manager.abortRequest(this._fullRequestId);\n }\n this._fullRequestReader = null;\n }\n}\n\n/** @implements {IPDFStreamRangeReader} */\nclass PDFNetworkStreamRangeRequestReader {\n constructor(manager, begin, end) {\n this._manager = manager;\n\n this._url = manager.url;\n this._requestId = manager.request({\n begin,\n end,\n onHeadersReceived: this._onHeadersReceived.bind(this),\n onDone: this._onDone.bind(this),\n onError: this._onError.bind(this),\n onProgress: this._onProgress.bind(this),\n });\n this._requests = [];\n this._queuedChunk = null;\n this._done = false;\n this._storedError = undefined;\n\n this.onProgress = null;\n this.onClosed = null;\n }\n\n _onHeadersReceived() {\n const responseOrigin = getResponseOrigin(\n this._manager.getRequestXhr(this._requestId)?.responseURL\n );\n\n if (responseOrigin !== this._manager._responseOrigin) {\n this._storedError = new Error(\n `Expected range response-origin \"${responseOrigin}\" to match \"${this._manager._responseOrigin}\".`\n );\n this._onError(0);\n }\n }\n\n _close() {\n this.onClosed?.(this);\n }\n\n _onDone(data) {\n const chunk = data.chunk;\n if (this._requests.length > 0) {\n const requestCapability = this._requests.shift();\n requestCapability.resolve({ value: chunk, done: false });\n } else {\n this._queuedChunk = chunk;\n }\n this._done = true;\n for (const requestCapability of this._requests) {\n requestCapability.resolve({ value: undefined, done: true });\n }\n this._requests.length = 0;\n this._close();\n }\n\n _onError(status) {\n this._storedError ??= createResponseError(status, this._url);\n for (const requestCapability of this._requests) {\n requestCapability.reject(this._storedError);\n }\n this._requests.length = 0;\n this._queuedChunk = null;\n }\n\n _onProgress(evt) {\n if (!this.isStreamingSupported) {\n this.onProgress?.({ loaded: evt.loaded });\n }\n }\n\n get isStreamingSupported() {\n return false;\n }\n\n async read() {\n if (this._storedError) {\n throw this._storedError;\n }\n if (this._queuedChunk !== null) {\n const chunk = this._queuedChunk;\n this._queuedChunk = null;\n return { value: chunk, done: false };\n }\n if (this._done) {\n return { value: undefined, done: true };\n }\n const requestCapability = Promise.withResolvers();\n this._requests.push(requestCapability);\n return requestCapability.promise;\n }\n\n cancel(reason) {\n this._done = true;\n for (const requestCapability of this._requests) {\n requestCapability.resolve({ value: undefined, done: true });\n }\n this._requests.length = 0;\n if (this._manager.isPendingRequest(this._requestId)) {\n this._manager.abortRequest(this._requestId);\n }\n this._close();\n }\n}\n\nexport { PDFNetworkStream };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* globals process */\n\nimport { AbortException, assert } from \"../shared/util.js\";\nimport { createResponseError } from \"./network_utils.js\";\n\nif (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\n 'Module \"./node_stream.js\" shall not be used with MOZCENTRAL builds.'\n );\n}\n\nconst urlRegex = /^[a-z][a-z0-9\\-+.]+:/i;\n\nfunction parseUrlOrPath(sourceUrl) {\n if (urlRegex.test(sourceUrl)) {\n return new URL(sourceUrl);\n }\n const url = process.getBuiltinModule(\"url\");\n return new URL(url.pathToFileURL(sourceUrl));\n}\n\nclass PDFNodeStream {\n constructor(source) {\n this.source = source;\n this.url = parseUrlOrPath(source.url);\n assert(\n this.url.protocol === \"file:\",\n \"PDFNodeStream only supports file:// URLs.\"\n );\n\n this._fullRequestReader = null;\n this._rangeRequestReaders = [];\n }\n\n get _progressiveDataLength() {\n return this._fullRequestReader?._loaded ?? 0;\n }\n\n getFullReader() {\n assert(\n !this._fullRequestReader,\n \"PDFNodeStream.getFullReader can only be called once.\"\n );\n this._fullRequestReader = new PDFNodeStreamFsFullReader(this);\n return this._fullRequestReader;\n }\n\n getRangeReader(start, end) {\n if (end <= this._progressiveDataLength) {\n return null;\n }\n const rangeReader = new PDFNodeStreamFsRangeReader(this, start, end);\n this._rangeRequestReaders.push(rangeReader);\n return rangeReader;\n }\n\n cancelAllRequests(reason) {\n this._fullRequestReader?.cancel(reason);\n\n for (const reader of this._rangeRequestReaders.slice(0)) {\n reader.cancel(reason);\n }\n }\n}\n\nclass PDFNodeStreamFsFullReader {\n constructor(stream) {\n this._url = stream.url;\n this._done = false;\n this._storedError = null;\n this.onProgress = null;\n const source = stream.source;\n this._contentLength = source.length; // optional\n this._loaded = 0;\n this._filename = null;\n\n this._disableRange = source.disableRange || false;\n this._rangeChunkSize = source.rangeChunkSize;\n if (!this._rangeChunkSize && !this._disableRange) {\n this._disableRange = true;\n }\n\n this._isStreamingSupported = !source.disableStream;\n this._isRangeSupported = !source.disableRange;\n\n this._readableStream = null;\n this._readCapability = Promise.withResolvers();\n this._headersCapability = Promise.withResolvers();\n\n const fs = process.getBuiltinModule(\"fs\");\n fs.promises.lstat(this._url).then(\n stat => {\n // Setting right content length.\n this._contentLength = stat.size;\n\n this._setReadableStream(fs.createReadStream(this._url));\n this._headersCapability.resolve();\n },\n error => {\n if (error.code === \"ENOENT\") {\n error = createResponseError(/* status = */ 0, this._url.href);\n }\n this._storedError = error;\n this._headersCapability.reject(error);\n }\n );\n }\n\n get headersReady() {\n return this._headersCapability.promise;\n }\n\n get filename() {\n return this._filename;\n }\n\n get contentLength() {\n return this._contentLength;\n }\n\n get isRangeSupported() {\n return this._isRangeSupported;\n }\n\n get isStreamingSupported() {\n return this._isStreamingSupported;\n }\n\n async read() {\n await this._readCapability.promise;\n if (this._done) {\n return { value: undefined, done: true };\n }\n if (this._storedError) {\n throw this._storedError;\n }\n\n const chunk = this._readableStream.read();\n if (chunk === null) {\n this._readCapability = Promise.withResolvers();\n return this.read();\n }\n this._loaded += chunk.length;\n this.onProgress?.({\n loaded: this._loaded,\n total: this._contentLength,\n });\n\n // Ensure that `read()` method returns ArrayBuffer.\n const buffer = new Uint8Array(chunk).buffer;\n return { value: buffer, done: false };\n }\n\n cancel(reason) {\n // Call `this._error()` method when cancel is called\n // before _readableStream is set.\n if (!this._readableStream) {\n this._error(reason);\n return;\n }\n this._readableStream.destroy(reason);\n }\n\n _error(reason) {\n this._storedError = reason;\n this._readCapability.resolve();\n }\n\n _setReadableStream(readableStream) {\n this._readableStream = readableStream;\n readableStream.on(\"readable\", () => {\n this._readCapability.resolve();\n });\n\n readableStream.on(\"end\", () => {\n // Destroy readable to minimize resource usage.\n readableStream.destroy();\n this._done = true;\n this._readCapability.resolve();\n });\n\n readableStream.on(\"error\", reason => {\n this._error(reason);\n });\n\n // We need to stop reading when range is supported and streaming is\n // disabled.\n if (!this._isStreamingSupported && this._isRangeSupported) {\n this._error(new AbortException(\"streaming is disabled\"));\n }\n\n // Destroy ReadableStream if already in errored state.\n if (this._storedError) {\n this._readableStream.destroy(this._storedError);\n }\n }\n}\n\nclass PDFNodeStreamFsRangeReader {\n constructor(stream, start, end) {\n this._url = stream.url;\n this._done = false;\n this._storedError = null;\n this.onProgress = null;\n this._loaded = 0;\n this._readableStream = null;\n this._readCapability = Promise.withResolvers();\n const source = stream.source;\n this._isStreamingSupported = !source.disableStream;\n\n const fs = process.getBuiltinModule(\"fs\");\n this._setReadableStream(\n fs.createReadStream(this._url, { start, end: end - 1 })\n );\n }\n\n get isStreamingSupported() {\n return this._isStreamingSupported;\n }\n\n async read() {\n await this._readCapability.promise;\n if (this._done) {\n return { value: undefined, done: true };\n }\n if (this._storedError) {\n throw this._storedError;\n }\n\n const chunk = this._readableStream.read();\n if (chunk === null) {\n this._readCapability = Promise.withResolvers();\n return this.read();\n }\n this._loaded += chunk.length;\n this.onProgress?.({ loaded: this._loaded });\n\n // Ensure that `read()` method returns ArrayBuffer.\n const buffer = new Uint8Array(chunk).buffer;\n return { value: buffer, done: false };\n }\n\n cancel(reason) {\n // Call `this._error()` method when cancel is called\n // before _readableStream is set.\n if (!this._readableStream) {\n this._error(reason);\n return;\n }\n this._readableStream.destroy(reason);\n }\n\n _error(reason) {\n this._storedError = reason;\n this._readCapability.resolve();\n }\n\n _setReadableStream(readableStream) {\n this._readableStream = readableStream;\n readableStream.on(\"readable\", () => {\n this._readCapability.resolve();\n });\n\n readableStream.on(\"end\", () => {\n // Destroy readableStream to minimize resource usage.\n readableStream.destroy();\n this._done = true;\n this._readCapability.resolve();\n });\n\n readableStream.on(\"error\", reason => {\n this._error(reason);\n });\n\n // Destroy readableStream if already in errored state.\n if (this._storedError) {\n this._readableStream.destroy(this._storedError);\n }\n }\n}\n\nexport { PDFNodeStream };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst INITIAL_DATA = Symbol(\"INITIAL_DATA\");\n\n/**\n * A PDF document and page is built of many objects. E.g. there are objects for\n * fonts, images, rendering code, etc. These objects may get processed inside of\n * a worker. This class implements some basic methods to manage these objects.\n */\nclass PDFObjects {\n #objs = Object.create(null);\n\n /**\n * Ensures there is an object defined for `objId`.\n *\n * @param {string} objId\n * @returns {Object}\n */\n #ensureObj(objId) {\n return (this.#objs[objId] ||= {\n ...Promise.withResolvers(),\n data: INITIAL_DATA,\n });\n }\n\n /**\n * If called *without* callback, this returns the data of `objId` but the\n * object needs to be resolved. If it isn't, this method throws.\n *\n * If called *with* a callback, the callback is called with the data of the\n * object once the object is resolved. That means, if you call this method\n * and the object is already resolved, the callback gets called right away.\n *\n * @param {string} objId\n * @param {function} [callback]\n * @returns {any}\n */\n get(objId, callback = null) {\n // If there is a callback, then the get can be async and the object is\n // not required to be resolved right now.\n if (callback) {\n const obj = this.#ensureObj(objId);\n obj.promise.then(() => callback(obj.data));\n return null;\n }\n // If there isn't a callback, the user expects to get the resolved data\n // directly.\n const obj = this.#objs[objId];\n // If there isn't an object yet or the object isn't resolved, then the\n // data isn't ready yet!\n if (!obj || obj.data === INITIAL_DATA) {\n throw new Error(`Requesting object that isn't resolved yet ${objId}.`);\n }\n return obj.data;\n }\n\n /**\n * @param {string} objId\n * @returns {boolean}\n */\n has(objId) {\n const obj = this.#objs[objId];\n return !!obj && obj.data !== INITIAL_DATA;\n }\n\n /**\n * @param {string} objId\n * @returns {boolean}\n */\n delete(objId) {\n const obj = this.#objs[objId];\n if (!obj || obj.data === INITIAL_DATA) {\n // Only allow removing the object *after* it's been resolved.\n return false;\n }\n delete this.#objs[objId];\n return true;\n }\n\n /**\n * Resolves the object `objId` with optional `data`.\n *\n * @param {string} objId\n * @param {any} [data]\n */\n resolve(objId, data = null) {\n const obj = this.#ensureObj(objId);\n obj.data = data;\n obj.resolve();\n }\n\n clear() {\n for (const objId in this.#objs) {\n const { data } = this.#objs[objId];\n data?.bitmap?.close(); // Release any `ImageBitmap` data.\n }\n this.#objs = Object.create(null);\n }\n\n *[Symbol.iterator]() {\n for (const objId in this.#objs) {\n const { data } = this.#objs[objId];\n\n if (data === INITIAL_DATA) {\n continue;\n }\n yield [objId, data];\n }\n }\n}\n\nexport { PDFObjects };\n","/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./display_utils\").PageViewport} PageViewport */\n/** @typedef {import(\"./api\").TextContent} TextContent */\n\nimport {\n AbortException,\n FeatureTest,\n shadow,\n Util,\n warn,\n} from \"../shared/util.js\";\nimport { OutputScale, setLayerDimensions } from \"./display_utils.js\";\n\n/**\n * @typedef {Object} TextLayerParameters\n * @property {ReadableStream | TextContent} textContentSource - Text content to\n * render, i.e. the value returned by the page's `streamTextContent` or\n * `getTextContent` method.\n * @property {HTMLElement} container - The DOM node that will contain the text\n * runs.\n * @property {PageViewport} viewport - The target viewport to properly layout\n * the text runs.\n */\n\n/**\n * @typedef {Object} TextLayerUpdateParameters\n * @property {PageViewport} viewport - The target viewport to properly layout\n * the text runs.\n * @property {function} [onBefore] - Callback invoked before the textLayer is\n * updated in the DOM.\n */\n\nconst MAX_TEXT_DIVS_TO_RENDER = 100000;\nconst DEFAULT_FONT_SIZE = 30;\n\nclass TextLayer {\n #capability = Promise.withResolvers();\n\n #container = null;\n\n #disableProcessItems = false;\n\n #fontInspectorEnabled = !!globalThis.FontInspector?.enabled;\n\n #lang = null;\n\n #layoutTextParams = null;\n\n #pageHeight = 0;\n\n #pageWidth = 0;\n\n #reader = null;\n\n #rootContainer = null;\n\n #rotation = 0;\n\n #scale = 0;\n\n #styleCache = Object.create(null);\n\n #textContentItemsStr = [];\n\n #textContentSource = null;\n\n #textDivs = [];\n\n #textDivProperties = new WeakMap();\n\n #transform = null;\n\n static #ascentCache = new Map();\n\n static #canvasContexts = new Map();\n\n static #canvasCtxFonts = new WeakMap();\n\n static #minFontSize = null;\n\n static #pendingTextLayers = new Set();\n\n /**\n * @param {TextLayerParameters} options\n */\n constructor({ textContentSource, container, viewport }) {\n if (textContentSource instanceof ReadableStream) {\n this.#textContentSource = textContentSource;\n } else if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n typeof textContentSource === \"object\"\n ) {\n this.#textContentSource = new ReadableStream({\n start(controller) {\n controller.enqueue(textContentSource);\n controller.close();\n },\n });\n } else {\n throw new Error('No \"textContentSource\" parameter specified.');\n }\n this.#container = this.#rootContainer = container;\n\n this.#scale = viewport.scale * OutputScale.pixelRatio;\n this.#rotation = viewport.rotation;\n this.#layoutTextParams = {\n div: null,\n properties: null,\n ctx: null,\n };\n const { pageWidth, pageHeight, pageX, pageY } = viewport.rawDims;\n this.#transform = [1, 0, 0, -1, -pageX, pageY + pageHeight];\n this.#pageWidth = pageWidth;\n this.#pageHeight = pageHeight;\n\n TextLayer.#ensureMinFontSizeComputed();\n\n setLayerDimensions(container, viewport);\n\n // Always clean-up the temporary canvas once rendering is no longer pending.\n this.#capability.promise\n .finally(() => {\n TextLayer.#pendingTextLayers.delete(this);\n this.#layoutTextParams = null;\n this.#styleCache = null;\n })\n .catch(() => {\n // Avoid \"Uncaught promise\" messages in the console.\n });\n\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n // For testing purposes.\n Object.defineProperty(this, \"pageWidth\", {\n get() {\n return this.#pageWidth;\n },\n });\n Object.defineProperty(this, \"pageHeight\", {\n get() {\n return this.#pageHeight;\n },\n });\n }\n }\n\n static get fontFamilyMap() {\n const { isWindows, isFirefox } = FeatureTest.platform;\n return shadow(\n this,\n \"fontFamilyMap\",\n new Map([\n [\n \"sans-serif\",\n `${isWindows && isFirefox ? \"Calibri, \" : \"\"}sans-serif`,\n ],\n [\n \"monospace\",\n `${isWindows && isFirefox ? \"Lucida Console, \" : \"\"}monospace`,\n ],\n ])\n );\n }\n\n /**\n * Render the textLayer.\n * @returns {Promise}\n */\n render() {\n const pump = () => {\n this.#reader.read().then(({ value, done }) => {\n if (done) {\n this.#capability.resolve();\n return;\n }\n this.#lang ??= value.lang;\n Object.assign(this.#styleCache, value.styles);\n this.#processItems(value.items);\n pump();\n }, this.#capability.reject);\n };\n this.#reader = this.#textContentSource.getReader();\n TextLayer.#pendingTextLayers.add(this);\n pump();\n\n return this.#capability.promise;\n }\n\n /**\n * Update a previously rendered textLayer, if necessary.\n * @param {TextLayerUpdateParameters} options\n * @returns {undefined}\n */\n update({ viewport, onBefore = null }) {\n const scale = viewport.scale * OutputScale.pixelRatio;\n const rotation = viewport.rotation;\n\n if (rotation !== this.#rotation) {\n onBefore?.();\n this.#rotation = rotation;\n setLayerDimensions(this.#rootContainer, { rotation });\n }\n\n if (scale !== this.#scale) {\n onBefore?.();\n this.#scale = scale;\n const params = {\n div: null,\n properties: null,\n ctx: TextLayer.#getCtx(this.#lang),\n };\n for (const div of this.#textDivs) {\n params.properties = this.#textDivProperties.get(div);\n params.div = div;\n this.#layout(params);\n }\n }\n }\n\n /**\n * Cancel rendering of the textLayer.\n * @returns {undefined}\n */\n cancel() {\n const abortEx = new AbortException(\"TextLayer task cancelled.\");\n\n this.#reader?.cancel(abortEx).catch(() => {\n // Avoid \"Uncaught promise\" messages in the console.\n });\n this.#reader = null;\n\n this.#capability.reject(abortEx);\n }\n\n /**\n * @type {Array} HTML elements that correspond to the text items\n * of the textContent input.\n * This is output and will initially be set to an empty array.\n */\n get textDivs() {\n return this.#textDivs;\n }\n\n /**\n * @type {Array} Strings that correspond to the `str` property of\n * the text items of the textContent input.\n * This is output and will initially be set to an empty array\n */\n get textContentItemsStr() {\n return this.#textContentItemsStr;\n }\n\n #processItems(items) {\n if (this.#disableProcessItems) {\n return;\n }\n this.#layoutTextParams.ctx ??= TextLayer.#getCtx(this.#lang);\n\n const textDivs = this.#textDivs,\n textContentItemsStr = this.#textContentItemsStr;\n\n for (const item of items) {\n // No point in rendering many divs as it would make the browser\n // unusable even after the divs are rendered.\n if (textDivs.length > MAX_TEXT_DIVS_TO_RENDER) {\n warn(\"Ignoring additional textDivs for performance reasons.\");\n\n this.#disableProcessItems = true; // Avoid multiple warnings for one page.\n return;\n }\n\n if (item.str === undefined) {\n if (\n item.type === \"beginMarkedContentProps\" ||\n item.type === \"beginMarkedContent\"\n ) {\n const parent = this.#container;\n this.#container = document.createElement(\"span\");\n this.#container.classList.add(\"markedContent\");\n if (item.id) {\n this.#container.setAttribute(\"id\", `${item.id}`);\n }\n parent.append(this.#container);\n } else if (item.type === \"endMarkedContent\") {\n this.#container = this.#container.parentNode;\n }\n continue;\n }\n textContentItemsStr.push(item.str);\n this.#appendText(item);\n }\n }\n\n #appendText(geom) {\n // Initialize all used properties to keep the caches monomorphic.\n const textDiv = document.createElement(\"span\");\n const textDivProperties = {\n angle: 0,\n canvasWidth: 0,\n hasText: geom.str !== \"\",\n hasEOL: geom.hasEOL,\n fontSize: 0,\n };\n this.#textDivs.push(textDiv);\n\n const tx = Util.transform(this.#transform, geom.transform);\n let angle = Math.atan2(tx[1], tx[0]);\n const style = this.#styleCache[geom.fontName];\n if (style.vertical) {\n angle += Math.PI / 2;\n }\n\n let fontFamily =\n (this.#fontInspectorEnabled && style.fontSubstitution) ||\n style.fontFamily;\n\n // Workaround for bug 1922063.\n fontFamily = TextLayer.fontFamilyMap.get(fontFamily) || fontFamily;\n const fontHeight = Math.hypot(tx[2], tx[3]);\n const fontAscent =\n fontHeight * TextLayer.#getAscent(fontFamily, style, this.#lang);\n\n let left, top;\n if (angle === 0) {\n left = tx[4];\n top = tx[5] - fontAscent;\n } else {\n left = tx[4] + fontAscent * Math.sin(angle);\n top = tx[5] - fontAscent * Math.cos(angle);\n }\n\n const scaleFactorStr = \"calc(var(--total-scale-factor) *\";\n const divStyle = textDiv.style;\n // Setting the style properties individually, rather than all at once,\n // should be OK since the `textDiv` isn't appended to the document yet.\n if (this.#container === this.#rootContainer) {\n divStyle.left = `${((100 * left) / this.#pageWidth).toFixed(2)}%`;\n divStyle.top = `${((100 * top) / this.#pageHeight).toFixed(2)}%`;\n } else {\n // We're in a marked content span, hence we can't use percents.\n divStyle.left = `${scaleFactorStr}${left.toFixed(2)}px)`;\n divStyle.top = `${scaleFactorStr}${top.toFixed(2)}px)`;\n }\n // We multiply the font size by #minFontSize, and then #layout will\n // scale the element by 1/#minFontSize. This allows us to effectively\n // ignore the minimum font size enforced by the browser, so that the text\n // layer s can always match the size of the text in the canvas.\n divStyle.fontSize = `${scaleFactorStr}${(TextLayer.#minFontSize * fontHeight).toFixed(2)}px)`;\n divStyle.fontFamily = fontFamily;\n\n textDivProperties.fontSize = fontHeight;\n\n // Keeps screen readers from pausing on every new text span.\n textDiv.setAttribute(\"role\", \"presentation\");\n\n textDiv.textContent = geom.str;\n // geom.dir may be 'ttb' for vertical texts.\n textDiv.dir = geom.dir;\n\n // `fontName` is only used by the FontInspector, and we only use `dataset`\n // here to make the font name available in the debugger.\n if (this.#fontInspectorEnabled) {\n textDiv.dataset.fontName =\n style.fontSubstitutionLoadedName || geom.fontName;\n }\n if (angle !== 0) {\n textDivProperties.angle = angle * (180 / Math.PI);\n }\n // We don't bother scaling single-char text divs, because it has very\n // little effect on text highlighting. This makes scrolling on docs with\n // lots of such divs a lot faster.\n let shouldScaleText = false;\n if (geom.str.length > 1) {\n shouldScaleText = true;\n } else if (geom.str !== \" \" && geom.transform[0] !== geom.transform[3]) {\n const absScaleX = Math.abs(geom.transform[0]),\n absScaleY = Math.abs(geom.transform[3]);\n // When the horizontal/vertical scaling differs significantly, also scale\n // even single-char text to improve highlighting (fixes issue11713.pdf).\n if (\n absScaleX !== absScaleY &&\n Math.max(absScaleX, absScaleY) / Math.min(absScaleX, absScaleY) > 1.5\n ) {\n shouldScaleText = true;\n }\n }\n if (shouldScaleText) {\n textDivProperties.canvasWidth = style.vertical ? geom.height : geom.width;\n }\n this.#textDivProperties.set(textDiv, textDivProperties);\n\n // Finally, layout and append the text to the DOM.\n this.#layoutTextParams.div = textDiv;\n this.#layoutTextParams.properties = textDivProperties;\n this.#layout(this.#layoutTextParams);\n\n if (textDivProperties.hasText) {\n this.#container.append(textDiv);\n }\n if (textDivProperties.hasEOL) {\n const br = document.createElement(\"br\");\n br.setAttribute(\"role\", \"presentation\");\n this.#container.append(br);\n }\n }\n\n #layout(params) {\n const { div, properties, ctx } = params;\n const { style } = div;\n\n let transform = \"\";\n if (TextLayer.#minFontSize > 1) {\n transform = `scale(${1 / TextLayer.#minFontSize})`;\n }\n\n if (properties.canvasWidth !== 0 && properties.hasText) {\n const { fontFamily } = style;\n const { canvasWidth, fontSize } = properties;\n\n TextLayer.#ensureCtxFont(ctx, fontSize * this.#scale, fontFamily);\n // Only measure the width for multi-char text divs, see `appendText`.\n const { width } = ctx.measureText(div.textContent);\n\n if (width > 0) {\n transform = `scaleX(${(canvasWidth * this.#scale) / width}) ${transform}`;\n }\n }\n if (properties.angle !== 0) {\n transform = `rotate(${properties.angle}deg) ${transform}`;\n }\n if (transform.length > 0) {\n style.transform = transform;\n }\n }\n\n /**\n * Clean-up global textLayer data.\n * @returns {undefined}\n */\n static cleanup() {\n if (this.#pendingTextLayers.size > 0) {\n return;\n }\n this.#ascentCache.clear();\n\n for (const { canvas } of this.#canvasContexts.values()) {\n canvas.remove();\n }\n this.#canvasContexts.clear();\n }\n\n static #getCtx(lang = null) {\n let ctx = this.#canvasContexts.get((lang ||= \"\"));\n if (!ctx) {\n // We don't use an OffscreenCanvas here because we use serif/sans serif\n // fonts with it and they depends on the locale.\n // In Firefox, the element get a lang attribute that depends on\n // what Fluent returns for the locale and the OffscreenCanvas uses\n // the OS locale.\n // Those two locales can be different and consequently the used fonts will\n // be different (see bug 1869001).\n // Ideally, we should use in the text layer the fonts we've in the pdf (or\n // their replacements when they aren't embedded) and then we can use an\n // OffscreenCanvas.\n const canvas = document.createElement(\"canvas\");\n canvas.className = \"hiddenCanvasElement\";\n canvas.lang = lang;\n document.body.append(canvas);\n ctx = canvas.getContext(\"2d\", {\n alpha: false,\n willReadFrequently: true,\n });\n this.#canvasContexts.set(lang, ctx);\n\n // Also, initialize state for the `#ensureCtxFont` method.\n this.#canvasCtxFonts.set(ctx, { size: 0, family: \"\" });\n }\n return ctx;\n }\n\n static #ensureCtxFont(ctx, size, family) {\n const cached = this.#canvasCtxFonts.get(ctx);\n if (size === cached.size && family === cached.family) {\n return; // The font is already set.\n }\n ctx.font = `${size}px ${family}`;\n cached.size = size;\n cached.family = family;\n }\n\n /**\n * Compute the minimum font size enforced by the browser.\n */\n static #ensureMinFontSizeComputed() {\n if (this.#minFontSize !== null) {\n return;\n }\n const div = document.createElement(\"div\");\n div.style.opacity = 0;\n div.style.lineHeight = 1;\n div.style.fontSize = \"1px\";\n div.style.position = \"absolute\";\n div.textContent = \"X\";\n document.body.append(div);\n // In `display:block` elements contain a single line of text,\n // the height matches the line height (which, when set to 1,\n // matches the actual font size).\n this.#minFontSize = div.getBoundingClientRect().height;\n div.remove();\n }\n\n static #getAscent(fontFamily, style, lang) {\n const cachedAscent = this.#ascentCache.get(fontFamily);\n if (cachedAscent) {\n return cachedAscent;\n }\n const ctx = this.#getCtx(lang);\n\n ctx.canvas.width = ctx.canvas.height = DEFAULT_FONT_SIZE;\n this.#ensureCtxFont(ctx, DEFAULT_FONT_SIZE, fontFamily);\n const metrics = ctx.measureText(\"\");\n\n const ascent = metrics.fontBoundingBoxAscent;\n const descent = Math.abs(metrics.fontBoundingBoxDescent);\n\n ctx.canvas.width = ctx.canvas.height = 0;\n let ratio = 0.8; // DEFAULT_FONT_ASCENT\n\n if (ascent) {\n ratio = ascent / (ascent + descent);\n } else {\n if (\n (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n FeatureTest.platform.isFirefox\n ) {\n warn(\n \"Enable the `dom.textMetrics.fontBoundingBox.enabled` preference \" +\n \"in `about:config` to improve TextLayer rendering.\"\n );\n }\n if (style.ascent) {\n ratio = style.ascent;\n } else if (style.descent) {\n ratio = 1 + style.descent;\n }\n }\n\n this.#ascentCache.set(fontFamily, ratio);\n return ratio;\n }\n}\n\nexport { TextLayer };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @module pdfjsLib\n */\n\nimport {\n AbortException,\n AnnotationMode,\n assert,\n FeatureTest,\n getVerbosityLevel,\n info,\n isNodeJS,\n RenderingIntentFlag,\n setVerbosityLevel,\n shadow,\n unreachable,\n warn,\n} from \"../shared/util.js\";\nimport {\n AnnotationStorage,\n PrintAnnotationStorage,\n SerializableEmpty,\n} from \"./annotation_storage.js\";\nimport {\n deprecated,\n isDataScheme,\n isValidFetchUrl,\n PageViewport,\n RenderingCancelledException,\n StatTimer,\n} from \"./display_utils.js\";\nimport { FontFaceObject, FontLoader } from \"./font_loader.js\";\nimport { FontInfo, PatternInfo } from \"../shared/obj-bin-transform.js\";\nimport {\n getDataProp,\n getFactoryUrlProp,\n getUrlProp,\n isRefProxy,\n LoopbackPort,\n} from \"./api_utils.js\";\nimport { MessageHandler, wrapReason } from \"../shared/message_handler.js\";\nimport {\n NodeCanvasFactory,\n NodeCMapReaderFactory,\n NodeFilterFactory,\n NodeStandardFontDataFactory,\n NodeWasmFactory,\n} from \"display-node_utils\";\nimport { CanvasDependencyTracker } from \"./canvas_dependency_tracker.js\";\nimport { CanvasGraphics } from \"./canvas.js\";\nimport { DOMCanvasFactory } from \"./canvas_factory.js\";\nimport { DOMCMapReaderFactory } from \"display-cmap_reader_factory\";\nimport { DOMFilterFactory } from \"./filter_factory.js\";\nimport { DOMStandardFontDataFactory } from \"display-standard_fontdata_factory\";\nimport { DOMWasmFactory } from \"display-wasm_factory\";\nimport { GlobalWorkerOptions } from \"./worker_options.js\";\nimport { Metadata } from \"./metadata.js\";\nimport { OptionalContentConfig } from \"./optional_content_config.js\";\nimport { PDFDataTransportStream } from \"./transport_stream.js\";\nimport { PDFFetchStream } from \"display-fetch_stream\";\nimport { PDFNetworkStream } from \"display-network\";\nimport { PDFNodeStream } from \"display-node_stream\";\nimport { PDFObjects } from \"./pdf_objects.js\";\nimport { TextLayer } from \"./text_layer.js\";\nimport { XfaText } from \"./xfa_text.js\";\n\nconst RENDERING_CANCELLED_TIMEOUT = 100; // ms\n\n/**\n * @typedef { Int8Array | Uint8Array | Uint8ClampedArray |\n * Int16Array | Uint16Array |\n * Int32Array | Uint32Array | Float32Array |\n * Float64Array\n * } TypedArray\n */\n\n/**\n * @typedef {Object} RefProxy\n * @property {number} num\n * @property {number} gen\n */\n\n/**\n * Document initialization / loading parameters object.\n *\n * @typedef {Object} DocumentInitParameters\n * @property {string | URL} [url] - The URL of the PDF.\n * @property {TypedArray | ArrayBuffer | Array | string} [data] -\n * Binary PDF data.\n * Use TypedArrays (Uint8Array) to improve the memory usage. If PDF data is\n * BASE64-encoded, use `atob()` to convert it to a binary string first.\n *\n * NOTE: If TypedArrays are used they will generally be transferred to the\n * worker-thread. This will help reduce main-thread memory usage, however\n * it will take ownership of the TypedArrays.\n * @property {Object} [httpHeaders] - Basic authentication headers.\n * @property {boolean} [withCredentials] - Indicates whether or not\n * cross-site Access-Control requests should be made using credentials such\n * as cookies or authorization headers. The default is `false`.\n * @property {string} [password] - For decrypting password-protected PDFs.\n * @property {number} [length] - The PDF file length. It's used for progress\n * reports and range requests operations.\n * @property {PDFDataRangeTransport} [range] - Allows for using a custom range\n * transport implementation.\n * @property {number} [rangeChunkSize] - Specify maximum number of bytes fetched\n * per range request. The default value is 65536 (= 2^16).\n * @property {PDFWorker} [worker] - The worker that will be used for loading and\n * parsing the PDF data.\n * @property {number} [verbosity] - Controls the logging level; the constants\n * from {@link VerbosityLevel} should be used.\n * @property {string} [docBaseUrl] - The base URL of the document, used when\n * attempting to recover valid absolute URLs for annotations, and outline\n * items, that (incorrectly) only specify relative URLs.\n * @property {string} [cMapUrl] - The URL where the predefined Adobe CMaps are\n * located. Include the trailing slash.\n * @property {boolean} [cMapPacked] - Specifies if the Adobe CMaps are binary\n * packed or not. The default value is `true`.\n * @property {Object} [CMapReaderFactory] - The factory that will be used when\n * reading built-in CMap files.\n * The default value is {DOMCMapReaderFactory}.\n * @property {string} [iccUrl] - The URL where the predefined ICC profiles are\n * located. Include the trailing slash.\n * @property {boolean} [useSystemFonts] - When `true`, fonts that aren't\n * embedded in the PDF document will fallback to a system font.\n * The default value is `true` in web environments and `false` in Node.js;\n * unless `disableFontFace === true` in which case this defaults to `false`\n * regardless of the environment (to prevent completely broken fonts).\n * @property {string} [standardFontDataUrl] - The URL where the standard font\n * files are located. Include the trailing slash.\n * @property {Object} [StandardFontDataFactory] - The factory that will be used\n * when reading the standard font files.\n * The default value is {DOMStandardFontDataFactory}.\n * @property {string} [wasmUrl] - The URL where the wasm files are located.\n * Include the trailing slash.\n * @property {Object} [WasmFactory] - The factory that will be used\n * when reading the wasm files.\n * The default value is {DOMWasmFactory}.\n * @property {boolean} [useWorkerFetch] - Enable using the Fetch API in the\n * worker-thread when reading CMap and standard font files. When `true`,\n * the `CMapReaderFactory`, `StandardFontDataFactory`, and `WasmFactory`\n * options are ignored.\n * The default value is `true` in web environments and `false` in Node.js.\n * @property {boolean} [useWasm] - Attempt to use WebAssembly in order to\n * improve e.g. image decoding performance.\n * The default value is `true`.\n * @property {boolean} [stopAtErrors] - Reject certain promises, e.g.\n * `getOperatorList`, `getTextContent`, and `RenderTask`, when the associated\n * PDF data cannot be successfully parsed, instead of attempting to recover\n * whatever possible of the data. The default value is `false`.\n * @property {number} [maxImageSize] - The maximum allowed image size in total\n * pixels, i.e. width * height. Images above this value will not be rendered.\n * Use -1 for no limit, which is also the default value.\n * @property {boolean} [isEvalSupported] - Determines if we can evaluate strings\n * as JavaScript. Primarily used to improve performance of PDF functions.\n * The default value is `true`.\n * @property {boolean} [isOffscreenCanvasSupported] - Determines if we can use\n * `OffscreenCanvas` in the worker. Primarily used to improve performance of\n * image conversion/rendering.\n * The default value is `true` in web environments and `false` in Node.js.\n * @property {boolean} [isImageDecoderSupported] - Determines if we can use\n * `ImageDecoder` in the worker. Primarily used to improve performance of\n * image conversion/rendering.\n * The default value is `true` in web environments and `false` in Node.js.\n *\n * NOTE: Also temporarily disabled in Chromium browsers, until we no longer\n * support the affected browser versions, because of various bugs:\n *\n * - Crashes when using the BMP decoder with huge images, e.g. issue6741.pdf;\n * see https://issues.chromium.org/issues/374807001\n *\n * - Broken images when using the JPEG decoder with images that have custom\n * colour profiles, e.g. GitHub discussion 19030;\n * see https://issues.chromium.org/issues/378869810\n *\n * @property {number} [canvasMaxAreaInBytes] - The integer value is used to\n * know when an image must be resized (uses `OffscreenCanvas` in the worker).\n * If it's -1 then a possibly slow algorithm is used to guess the max value.\n * @property {boolean} [disableFontFace] - By default fonts are converted to\n * OpenType fonts and loaded via the Font Loading API or `@font-face` rules.\n * If disabled, fonts will be rendered using a built-in font renderer that\n * constructs the glyphs with primitive path commands.\n * The default value is `false` in web environments and `true` in Node.js.\n * @property {boolean} [fontExtraProperties] - Include additional properties,\n * which are unused during rendering of PDF documents, when exporting the\n * parsed font data from the worker-thread. This may be useful for debugging\n * purposes (and backwards compatibility), but note that it will lead to\n * increased memory usage. The default value is `false`.\n * @property {boolean} [enableXfa] - Render Xfa forms if any.\n * The default value is `false`.\n * @property {HTMLDocument} [ownerDocument] - Specify an explicit document\n * context to create elements with and to load resources, such as fonts,\n * into. Defaults to the current document.\n * @property {boolean} [disableRange] - Disable range request loading of PDF\n * files. When enabled, and if the server supports partial content requests,\n * then the PDF will be fetched in chunks. The default value is `false`.\n * @property {boolean} [disableStream] - Disable streaming of PDF file data.\n * By default PDF.js attempts to load PDF files in chunks. The default value\n * is `false`.\n * @property {boolean} [disableAutoFetch] - Disable pre-fetching of PDF file\n * data. When range requests are enabled PDF.js will automatically keep\n * fetching more data even if it isn't needed to display the current page.\n * The default value is `false`.\n *\n * NOTE: It is also necessary to disable streaming, see above, in order for\n * disabling of pre-fetching to work correctly.\n * @property {boolean} [pdfBug] - Enables special hooks for debugging PDF.js\n * (see `web/debugger.js`). The default value is `false`.\n * @property {Object} [CanvasFactory] - The factory that will be used when\n * creating canvases. The default value is {DOMCanvasFactory}.\n * @property {Object} [FilterFactory] - The factory that will be used to\n * create SVG filters when rendering some images on the main canvas.\n * The default value is {DOMFilterFactory}.\n * @property {boolean} [enableHWA] - Enables hardware acceleration for\n * rendering. The default value is `false`.\n */\n\n/**\n * This is the main entry point for loading a PDF and interacting with it.\n *\n * NOTE: If a URL is used to fetch the PDF data a standard Fetch API call (or\n * XHR as fallback) is used, which means it must follow same origin rules,\n * e.g. no cross-domain requests without CORS.\n *\n * @param {string | URL | TypedArray | ArrayBuffer | DocumentInitParameters}\n * src - Can be a URL where a PDF file is located, a typed array (Uint8Array)\n * already populated with data, or a parameter object.\n * @returns {PDFDocumentLoadingTask}\n */\nfunction getDocument(src = {}) {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n if (typeof src === \"string\" || src instanceof URL) {\n src = { url: src };\n } else if (src instanceof ArrayBuffer || ArrayBuffer.isView(src)) {\n src = { data: src };\n }\n }\n const task = new PDFDocumentLoadingTask();\n const { docId } = task;\n\n const url = src.url ? getUrlProp(src.url) : null;\n const data = src.data ? getDataProp(src.data) : null;\n const httpHeaders = src.httpHeaders || null;\n const withCredentials = src.withCredentials === true;\n const password = src.password ?? null;\n const rangeTransport =\n src.range instanceof PDFDataRangeTransport ? src.range : null;\n const rangeChunkSize =\n Number.isInteger(src.rangeChunkSize) && src.rangeChunkSize > 0\n ? src.rangeChunkSize\n : 2 ** 16;\n let worker = src.worker instanceof PDFWorker ? src.worker : null;\n const verbosity = src.verbosity;\n // Ignore \"data:\"-URLs, since they can't be used to recover valid absolute\n // URLs anyway. We want to avoid sending them to the worker-thread, since\n // they contain the *entire* PDF document and can thus be arbitrarily long.\n const docBaseUrl =\n typeof src.docBaseUrl === \"string\" && !isDataScheme(src.docBaseUrl)\n ? src.docBaseUrl\n : null;\n const cMapUrl = getFactoryUrlProp(src.cMapUrl);\n const cMapPacked = src.cMapPacked !== false;\n const CMapReaderFactory =\n src.CMapReaderFactory ||\n (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"GENERIC\") && isNodeJS\n ? NodeCMapReaderFactory\n : DOMCMapReaderFactory);\n const iccUrl = getFactoryUrlProp(src.iccUrl);\n const standardFontDataUrl = getFactoryUrlProp(src.standardFontDataUrl);\n const StandardFontDataFactory =\n src.StandardFontDataFactory ||\n (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"GENERIC\") && isNodeJS\n ? NodeStandardFontDataFactory\n : DOMStandardFontDataFactory);\n const wasmUrl = getFactoryUrlProp(src.wasmUrl);\n const WasmFactory =\n src.WasmFactory ||\n (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"GENERIC\") && isNodeJS\n ? NodeWasmFactory\n : DOMWasmFactory);\n const ignoreErrors = src.stopAtErrors !== true;\n const maxImageSize =\n Number.isInteger(src.maxImageSize) && src.maxImageSize > -1\n ? src.maxImageSize\n : -1;\n const isEvalSupported = src.isEvalSupported !== false;\n const isOffscreenCanvasSupported =\n typeof src.isOffscreenCanvasSupported === \"boolean\"\n ? src.isOffscreenCanvasSupported\n : !isNodeJS;\n const isImageDecoderSupported =\n // eslint-disable-next-line no-nested-ternary\n typeof src.isImageDecoderSupported === \"boolean\"\n ? src.isImageDecoderSupported\n : // eslint-disable-next-line no-nested-ternary\n typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")\n ? true\n : typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"CHROME\")\n ? false\n : !isNodeJS && (FeatureTest.platform.isFirefox || !globalThis.chrome);\n const canvasMaxAreaInBytes = Number.isInteger(src.canvasMaxAreaInBytes)\n ? src.canvasMaxAreaInBytes\n : -1;\n const disableFontFace =\n typeof src.disableFontFace === \"boolean\" ? src.disableFontFace : isNodeJS;\n const fontExtraProperties = src.fontExtraProperties === true;\n const enableXfa = src.enableXfa === true;\n const ownerDocument = src.ownerDocument || globalThis.document;\n const disableRange = src.disableRange === true;\n const disableStream = src.disableStream === true;\n const disableAutoFetch = src.disableAutoFetch === true;\n const pdfBug = src.pdfBug === true;\n const CanvasFactory =\n src.CanvasFactory ||\n (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"GENERIC\") && isNodeJS\n ? NodeCanvasFactory\n : DOMCanvasFactory);\n const FilterFactory =\n src.FilterFactory ||\n (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"GENERIC\") && isNodeJS\n ? NodeFilterFactory\n : DOMFilterFactory);\n const enableHWA = src.enableHWA === true;\n const useWasm = src.useWasm !== false;\n\n // Parameters whose default values depend on other parameters.\n const length = rangeTransport ? rangeTransport.length : (src.length ?? NaN);\n const useSystemFonts =\n typeof src.useSystemFonts === \"boolean\"\n ? src.useSystemFonts\n : !isNodeJS && !disableFontFace;\n const useWorkerFetch =\n typeof src.useWorkerFetch === \"boolean\"\n ? src.useWorkerFetch\n : (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n !!(\n CMapReaderFactory === DOMCMapReaderFactory &&\n StandardFontDataFactory === DOMStandardFontDataFactory &&\n WasmFactory === DOMWasmFactory &&\n cMapUrl &&\n standardFontDataUrl &&\n wasmUrl &&\n isValidFetchUrl(cMapUrl, document.baseURI) &&\n isValidFetchUrl(standardFontDataUrl, document.baseURI) &&\n isValidFetchUrl(wasmUrl, document.baseURI)\n );\n\n // Parameters only intended for development/testing purposes.\n const styleElement =\n typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")\n ? src.styleElement\n : null;\n\n // Set the main-thread verbosity level.\n setVerbosityLevel(verbosity);\n\n // Ensure that the various factories can be initialized, when necessary,\n // since the user may provide *custom* ones.\n const transportFactory = {\n canvasFactory: new CanvasFactory({ ownerDocument, enableHWA }),\n filterFactory: new FilterFactory({ docId, ownerDocument }),\n cMapReaderFactory:\n (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n useWorkerFetch\n ? null\n : new CMapReaderFactory({ baseUrl: cMapUrl, isCompressed: cMapPacked }),\n standardFontDataFactory:\n (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n useWorkerFetch\n ? null\n : new StandardFontDataFactory({ baseUrl: standardFontDataUrl }),\n wasmFactory:\n (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n useWorkerFetch\n ? null\n : new WasmFactory({ baseUrl: wasmUrl }),\n };\n\n if (!worker) {\n // Worker was not provided -- creating and owning our own. If message port\n // is specified in global worker options, using it.\n worker = PDFWorker.create({\n verbosity,\n port: GlobalWorkerOptions.workerPort,\n });\n task._worker = worker;\n }\n\n const docParams = {\n docId,\n apiVersion:\n typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"TESTING\")\n ? PDFJSDev.eval(\"BUNDLE_VERSION\")\n : null,\n data,\n password,\n disableAutoFetch,\n rangeChunkSize,\n length,\n docBaseUrl,\n enableXfa,\n evaluatorOptions: {\n maxImageSize,\n disableFontFace,\n ignoreErrors,\n isEvalSupported,\n isOffscreenCanvasSupported,\n isImageDecoderSupported,\n canvasMaxAreaInBytes,\n fontExtraProperties,\n useSystemFonts,\n useWasm,\n useWorkerFetch,\n cMapUrl,\n iccUrl,\n standardFontDataUrl,\n wasmUrl,\n },\n };\n const transportParams = {\n ownerDocument,\n pdfBug,\n styleElement,\n loadingParams: {\n disableAutoFetch,\n enableXfa,\n },\n };\n\n worker.promise\n .then(function () {\n if (task.destroyed) {\n throw new Error(\"Loading aborted\");\n }\n if (worker.destroyed) {\n throw new Error(\"Worker was destroyed\");\n }\n\n const workerIdPromise = worker.messageHandler.sendWithPromise(\n \"GetDocRequest\",\n docParams,\n data ? [data.buffer] : null\n );\n\n let networkStream;\n if (rangeTransport) {\n networkStream = new PDFDataTransportStream(rangeTransport, {\n disableRange,\n disableStream,\n });\n } else if (!data) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: NetworkStream\");\n }\n if (!url) {\n throw new Error(\"getDocument - no `url` parameter provided.\");\n }\n // eslint-disable-next-line no-nested-ternary\n const NetworkStream = isValidFetchUrl(url)\n ? PDFFetchStream\n : typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"GENERIC\") &&\n isNodeJS\n ? PDFNodeStream\n : PDFNetworkStream;\n\n networkStream = new NetworkStream({\n url,\n length,\n httpHeaders,\n withCredentials,\n rangeChunkSize,\n disableRange,\n disableStream,\n });\n }\n\n return workerIdPromise.then(workerId => {\n if (task.destroyed) {\n throw new Error(\"Loading aborted\");\n }\n if (worker.destroyed) {\n throw new Error(\"Worker was destroyed\");\n }\n\n const messageHandler = new MessageHandler(docId, workerId, worker.port);\n const transport = new WorkerTransport(\n messageHandler,\n task,\n networkStream,\n transportParams,\n transportFactory,\n enableHWA\n );\n task._transport = transport;\n messageHandler.send(\"Ready\", null);\n });\n })\n .catch(task._capability.reject);\n\n return task;\n}\n\n/**\n * @typedef {Object} OnProgressParameters\n * @property {number} loaded - Currently loaded number of bytes.\n * @property {number} total - Total number of bytes in the PDF file.\n */\n\n/**\n * The loading task controls the operations required to load a PDF document\n * (such as network requests) and provides a way to listen for completion,\n * after which individual pages can be rendered.\n */\nclass PDFDocumentLoadingTask {\n static #docId = 0;\n\n /**\n * @private\n */\n _capability = Promise.withResolvers();\n\n /**\n * @private\n */\n _transport = null;\n\n /**\n * @private\n */\n _worker = null;\n\n /**\n * Unique identifier for the document loading task.\n * @type {string}\n */\n docId = `d${PDFDocumentLoadingTask.#docId++}`;\n\n /**\n * Whether the loading task is destroyed or not.\n * @type {boolean}\n */\n destroyed = false;\n\n /**\n * Callback to request a password if a wrong or no password was provided.\n * The callback receives two parameters: a function that should be called\n * with the new password, and a reason (see {@link PasswordResponses}).\n * @type {function}\n */\n onPassword = null;\n\n /**\n * Callback to be able to monitor the loading progress of the PDF file\n * (necessary to implement e.g. a loading bar).\n * The callback receives an {@link OnProgressParameters} argument.\n * @type {function}\n */\n onProgress = null;\n\n /**\n * Promise for document loading task completion.\n * @type {Promise}\n */\n get promise() {\n return this._capability.promise;\n }\n\n /**\n * Abort all network requests and destroy the worker.\n * @returns {Promise} A promise that is resolved when destruction is\n * completed.\n */\n async destroy() {\n this.destroyed = true;\n\n try {\n if (this._worker?.port) {\n this._worker._pendingDestroy = true;\n }\n await this._transport?.destroy();\n } catch (ex) {\n if (this._worker?.port) {\n delete this._worker._pendingDestroy;\n }\n throw ex;\n }\n this._transport = null;\n\n this._worker?.destroy();\n this._worker = null;\n }\n\n /**\n * Attempt to fetch the raw data of the PDF document, when e.g.\n * - An exception was thrown during document initialization.\n * - An `onPassword` callback is delaying initialization.\n * @returns {Promise}\n */\n async getData() {\n return this._transport.getData();\n }\n}\n\n/**\n * Abstract class to support range requests file loading.\n *\n * NOTE: The TypedArrays passed to the constructor and relevant methods below\n * will generally be transferred to the worker-thread. This will help reduce\n * main-thread memory usage, however it will take ownership of the TypedArrays.\n */\nclass PDFDataRangeTransport {\n #capability = Promise.withResolvers();\n\n #progressiveDoneListeners = [];\n\n #progressiveReadListeners = [];\n\n #progressListeners = [];\n\n #rangeListeners = [];\n\n /**\n * @param {number} length\n * @param {Uint8Array|null} initialData\n * @param {boolean} [progressiveDone]\n * @param {string} [contentDispositionFilename]\n */\n constructor(\n length,\n initialData,\n progressiveDone = false,\n contentDispositionFilename = null\n ) {\n this.length = length;\n this.initialData = initialData;\n this.progressiveDone = progressiveDone;\n this.contentDispositionFilename = contentDispositionFilename;\n }\n\n /**\n * @param {function} listener\n */\n addRangeListener(listener) {\n this.#rangeListeners.push(listener);\n }\n\n /**\n * @param {function} listener\n */\n addProgressListener(listener) {\n this.#progressListeners.push(listener);\n }\n\n /**\n * @param {function} listener\n */\n addProgressiveReadListener(listener) {\n this.#progressiveReadListeners.push(listener);\n }\n\n /**\n * @param {function} listener\n */\n addProgressiveDoneListener(listener) {\n this.#progressiveDoneListeners.push(listener);\n }\n\n /**\n * @param {number} begin\n * @param {Uint8Array|null} chunk\n */\n onDataRange(begin, chunk) {\n for (const listener of this.#rangeListeners) {\n listener(begin, chunk);\n }\n }\n\n /**\n * @param {number} loaded\n * @param {number|undefined} total\n */\n onDataProgress(loaded, total) {\n this.#capability.promise.then(() => {\n for (const listener of this.#progressListeners) {\n listener(loaded, total);\n }\n });\n }\n\n /**\n * @param {Uint8Array|null} chunk\n */\n onDataProgressiveRead(chunk) {\n this.#capability.promise.then(() => {\n for (const listener of this.#progressiveReadListeners) {\n listener(chunk);\n }\n });\n }\n\n onDataProgressiveDone() {\n this.#capability.promise.then(() => {\n for (const listener of this.#progressiveDoneListeners) {\n listener();\n }\n });\n }\n\n transportReady() {\n this.#capability.resolve();\n }\n\n /**\n * @param {number} begin\n * @param {number} end\n */\n requestDataRange(begin, end) {\n unreachable(\"Abstract method PDFDataRangeTransport.requestDataRange\");\n }\n\n abort() {}\n}\n\n/**\n * Proxy to a `PDFDocument` in the worker thread.\n */\nclass PDFDocumentProxy {\n constructor(pdfInfo, transport) {\n this._pdfInfo = pdfInfo;\n this._transport = transport;\n\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n // For testing purposes.\n Object.defineProperty(this, \"getNetworkStreamName\", {\n value: () => this._transport.getNetworkStreamName(),\n });\n Object.defineProperty(this, \"getXFADatasets\", {\n value: () => this._transport.getXFADatasets(),\n });\n Object.defineProperty(this, \"getStartXRefPos\", {\n value: () => this._transport.getStartXRefPos(),\n });\n Object.defineProperty(this, \"getAnnotArray\", {\n value: pageIndex => this._transport.getAnnotArray(pageIndex),\n });\n }\n }\n\n /**\n * @type {AnnotationStorage} Storage for annotation data in forms.\n */\n get annotationStorage() {\n return this._transport.annotationStorage;\n }\n\n /**\n * @type {Object} The canvas factory instance.\n */\n get canvasFactory() {\n return this._transport.canvasFactory;\n }\n\n /**\n * @type {Object} The filter factory instance.\n */\n get filterFactory() {\n return this._transport.filterFactory;\n }\n\n /**\n * @type {number} Total number of pages in the PDF file.\n */\n get numPages() {\n return this._pdfInfo.numPages;\n }\n\n /**\n * @type {Array} A (not guaranteed to be) unique ID to identify\n * the PDF document.\n * NOTE: The first element will always be defined for all PDF documents,\n * whereas the second element is only defined for *modified* PDF documents.\n */\n get fingerprints() {\n return this._pdfInfo.fingerprints;\n }\n\n /**\n * @type {boolean} True if only XFA form.\n */\n get isPureXfa() {\n return shadow(this, \"isPureXfa\", !!this._transport._htmlForXfa);\n }\n\n /**\n * NOTE: This is (mostly) intended to support printing of XFA forms.\n *\n * @type {Object | null} An object representing a HTML tree structure\n * to render the XFA, or `null` when no XFA form exists.\n */\n get allXfaHtml() {\n return this._transport._htmlForXfa;\n }\n\n /**\n * @param {number} pageNumber - The page number to get. The first page is 1.\n * @returns {Promise} A promise that is resolved with\n * a {@link PDFPageProxy} object.\n */\n getPage(pageNumber) {\n return this._transport.getPage(pageNumber);\n }\n\n /**\n * @param {RefProxy} ref - The page reference.\n * @returns {Promise} A promise that is resolved with the page index,\n * starting from zero, that is associated with the reference.\n */\n getPageIndex(ref) {\n return this._transport.getPageIndex(ref);\n }\n\n /**\n * @returns {Promise>>} A promise that is resolved\n * with a mapping from named destinations to references.\n *\n * This can be slow for large documents. Use `getDestination` instead.\n */\n getDestinations() {\n return this._transport.getDestinations();\n }\n\n /**\n * @param {string} id - The named destination to get.\n * @returns {Promise | null>} A promise that is resolved with all\n * information of the given named destination, or `null` when the named\n * destination is not present in the PDF file.\n */\n getDestination(id) {\n return this._transport.getDestination(id);\n }\n\n /**\n * @returns {Promise | null>} A promise that is resolved with\n * an {Array} containing the page labels that correspond to the page\n * indexes, or `null` when no page labels are present in the PDF file.\n */\n getPageLabels() {\n return this._transport.getPageLabels();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a {string}\n * containing the page layout name.\n */\n getPageLayout() {\n return this._transport.getPageLayout();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a {string}\n * containing the page mode name.\n */\n getPageMode() {\n return this._transport.getPageMode();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with an\n * {Object} containing the viewer preferences, or `null` when no viewer\n * preferences are present in the PDF file.\n */\n getViewerPreferences() {\n return this._transport.getViewerPreferences();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with an {Array}\n * containing the destination, or `null` when no open action is present\n * in the PDF.\n */\n getOpenAction() {\n return this._transport.getOpenAction();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a lookup table\n * for mapping named attachments to their content.\n */\n getAttachments() {\n return this._transport.getAttachments();\n }\n\n /**\n * @param {Set} types - The annotation types to retrieve.\n * @param {Set} pageIndexesToSkip\n * @returns {Promise>} A promise that is resolved with a list of\n * annotations data.\n */\n getAnnotationsByType(types, pageIndexesToSkip) {\n return this._transport.getAnnotationsByType(types, pageIndexesToSkip);\n }\n\n /**\n * @returns {Promise} A promise that is resolved with\n * an {Object} with the JavaScript actions:\n * - from the name tree.\n * - from A or AA entries in the catalog dictionary.\n * , or `null` if no JavaScript exists.\n */\n getJSActions() {\n return this._transport.getDocJSActions();\n }\n\n /**\n * @typedef {Object} OutlineNode\n * @property {string} title\n * @property {boolean} bold\n * @property {boolean} italic\n * @property {Uint8ClampedArray} color - The color in RGB format to use for\n * display purposes.\n * @property {string | Array | null} dest\n * @property {string | null} url\n * @property {string | undefined} unsafeUrl\n * @property {boolean | undefined} newWindow\n * @property {number | undefined} count\n * @property {Array} items\n */\n\n /**\n * @returns {Promise>} A promise that is resolved with an\n * {Array} that is a tree outline (if it has one) of the PDF file.\n */\n getOutline() {\n return this._transport.getOutline();\n }\n\n /**\n * @typedef {Object} GetOptionalContentConfigParameters\n * @property {string} [intent] - Determines the optional content groups that\n * are visible by default; valid values are:\n * - 'display' (viewable groups).\n * - 'print' (printable groups).\n * - 'any' (all groups).\n * The default value is 'display'.\n */\n\n /**\n * @param {GetOptionalContentConfigParameters} [params] - Optional content\n * config parameters.\n * @returns {Promise} A promise that is resolved with\n * an {@link OptionalContentConfig} that contains all the optional content\n * groups (assuming that the document has any).\n */\n getOptionalContentConfig({ intent = \"display\" } = {}) {\n const { renderingIntent } = this._transport.getRenderingIntent(intent);\n\n return this._transport.getOptionalContentConfig(renderingIntent);\n }\n\n /**\n * @returns {Promise | null>} A promise that is resolved with\n * an {Array} that contains the permission flags for the PDF document, or\n * `null` when no permissions are present in the PDF file.\n */\n getPermissions() {\n return this._transport.getPermissions();\n }\n\n /**\n * @returns {Promise<{ info: Object, metadata: Metadata }>} A promise that is\n * resolved with an {Object} that has `info` and `metadata` properties.\n * `info` is an {Object} filled with anything available in the information\n * dictionary and similarly `metadata` is a {Metadata} object with\n * information from the metadata section of the PDF.\n */\n getMetadata() {\n return this._transport.getMetadata();\n }\n\n /**\n * @typedef {Object} MarkInfo\n * Properties correspond to Table 321 of the PDF 32000-1:2008 spec.\n * @property {boolean} Marked\n * @property {boolean} UserProperties\n * @property {boolean} Suspects\n */\n\n /**\n * @returns {Promise} A promise that is resolved with\n * a {MarkInfo} object that contains the MarkInfo flags for the PDF\n * document, or `null` when no MarkInfo values are present in the PDF file.\n */\n getMarkInfo() {\n return this._transport.getMarkInfo();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a\n * {Uint8Array} containing the raw data of the PDF document.\n */\n getData() {\n return this._transport.getData();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a\n * {Uint8Array} containing the full data of the saved document.\n */\n saveDocument() {\n return this._transport.saveDocument();\n }\n\n /**\n * @returns {Promise<{ length: number }>} A promise that is resolved when the\n * document's data is loaded. It is resolved with an {Object} that contains\n * the `length` property that indicates size of the PDF data in bytes.\n */\n getDownloadInfo() {\n return this._transport.downloadInfoCapability.promise;\n }\n\n /**\n * Cleans up resources allocated by the document on both the main and worker\n * threads.\n *\n * NOTE: Do not, under any circumstances, call this method when rendering is\n * currently ongoing since that may lead to rendering errors.\n *\n * @param {boolean} [keepLoadedFonts] - Let fonts remain attached to the DOM.\n * NOTE: This will increase persistent memory usage, hence don't use this\n * option unless absolutely necessary. The default value is `false`.\n * @returns {Promise} A promise that is resolved when clean-up has finished.\n */\n cleanup(keepLoadedFonts = false) {\n return this._transport.startCleanup(keepLoadedFonts || this.isPureXfa);\n }\n\n /**\n * Destroys the current document instance and terminates the worker.\n */\n destroy() {\n return this.loadingTask.destroy();\n }\n\n /**\n * @param {RefProxy} ref - The page reference.\n * @returns {number | null} The page number, if it's cached.\n */\n cachedPageNumber(ref) {\n return this._transport.cachedPageNumber(ref);\n }\n\n /**\n * @type {DocumentInitParameters} A subset of the current\n * {DocumentInitParameters}, which are needed in the viewer.\n */\n get loadingParams() {\n return this._transport.loadingParams;\n }\n\n /**\n * @type {PDFDocumentLoadingTask} The loadingTask for the current document.\n */\n get loadingTask() {\n return this._transport.loadingTask;\n }\n\n /**\n * @returns {Promise> | null>} A promise that is\n * resolved with an {Object} containing /AcroForm field data for the JS\n * sandbox, or `null` when no field data is present in the PDF file.\n */\n getFieldObjects() {\n return this._transport.getFieldObjects();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with `true`\n * if some /AcroForm fields have JavaScript actions.\n */\n hasJSActions() {\n return this._transport.hasJSActions();\n }\n\n /**\n * @returns {Promise | null>} A promise that is resolved with an\n * {Array} containing IDs of annotations that have a calculation\n * action, or `null` when no such annotations are present in the PDF file.\n */\n getCalculationOrderIds() {\n return this._transport.getCalculationOrderIds();\n }\n}\n\n/**\n * Page getViewport parameters.\n *\n * @typedef {Object} GetViewportParameters\n * @property {number} scale - The desired scale of the viewport.\n * @property {number} [rotation] - The desired rotation, in degrees, of\n * the viewport. If omitted it defaults to the page rotation.\n * @property {number} [offsetX] - The horizontal, i.e. x-axis, offset.\n * The default value is `0`.\n * @property {number} [offsetY] - The vertical, i.e. y-axis, offset.\n * The default value is `0`.\n * @property {boolean} [dontFlip] - If true, the y-axis will not be\n * flipped. The default value is `false`.\n */\n\n/**\n * Page getTextContent parameters.\n *\n * @typedef {Object} getTextContentParameters\n * @property {boolean} [includeMarkedContent] - When true include marked\n * content items in the items array of TextContent. The default is `false`.\n * @property {boolean} [disableNormalization] - When true the text is *not*\n * normalized in the worker-thread. The default is `false`.\n */\n\n/**\n * Page text content.\n *\n * @typedef {Object} TextContent\n * @property {Array} items - Array of\n * {@link TextItem} and {@link TextMarkedContent} objects. TextMarkedContent\n * items are included when includeMarkedContent is true.\n * @property {Object} styles - {@link TextStyle} objects,\n * indexed by font name.\n * @property {string | null} lang - The document /Lang attribute.\n */\n\n/**\n * Page text content part.\n *\n * @typedef {Object} TextItem\n * @property {string} str - Text content.\n * @property {string} dir - Text direction: 'ttb', 'ltr' or 'rtl'.\n * @property {Array} transform - Transformation matrix.\n * @property {number} width - Width in device space.\n * @property {number} height - Height in device space.\n * @property {string} fontName - Font name used by PDF.js for converted font.\n * @property {boolean} hasEOL - Indicating if the text content is followed by a\n * line-break.\n */\n\n/**\n * Page text marked content part.\n *\n * @typedef {Object} TextMarkedContent\n * @property {string} type - Either 'beginMarkedContent',\n * 'beginMarkedContentProps', or 'endMarkedContent'.\n * @property {string} id - The marked content identifier. Only used for type\n * 'beginMarkedContentProps'.\n */\n\n/**\n * Text style.\n *\n * @typedef {Object} TextStyle\n * @property {number} ascent - Font ascent.\n * @property {number} descent - Font descent.\n * @property {boolean} vertical - Whether or not the text is in vertical mode.\n * @property {string} fontFamily - The possible font family.\n */\n\n/**\n * Page annotation parameters.\n *\n * @typedef {Object} GetAnnotationsParameters\n * @property {string} [intent] - Determines the annotations that are fetched,\n * can be 'display' (viewable annotations), 'print' (printable annotations),\n * or 'any' (all annotations). The default value is 'display'.\n */\n\n/**\n * Page render parameters.\n *\n * @typedef {Object} RenderParameters\n * @property {HTMLCanvasElement|null} canvas - A DOM Canvas object. The default\n * value is the canvas associated with the `canvasContext` parameter if no\n * value is provided explicitly.\n * @property {PageViewport} viewport - Rendering viewport obtained by calling\n * the `PDFPageProxy.getViewport` method.\n * @property {CanvasRenderingContext2D} [canvasContext] - 2D context of a DOM\n * Canvas object for backwards compatibility; it is recommended to use the\n * `canvas` parameter instead.\n * If the context must absolutely be used to render the page, the canvas must\n * be null.\n * @property {string} [intent] - Rendering intent, can be 'display', 'print',\n * or 'any'. The default value is 'display'.\n * @property {number} [annotationMode] Controls which annotations are rendered\n * onto the canvas, for annotations with appearance-data; the values from\n * {@link AnnotationMode} should be used. The following values are supported:\n * - `AnnotationMode.DISABLE`, which disables all annotations.\n * - `AnnotationMode.ENABLE`, which includes all possible annotations (thus\n * it also depends on the `intent`-option, see above).\n * - `AnnotationMode.ENABLE_FORMS`, which excludes annotations that contain\n * interactive form elements (those will be rendered in the display layer).\n * - `AnnotationMode.ENABLE_STORAGE`, which includes all possible annotations\n * (as above) but where interactive form elements are updated with data\n * from the {@link AnnotationStorage}-instance; useful e.g. for printing.\n * The default value is `AnnotationMode.ENABLE`.\n * @property {Array} [transform] - Additional transform, applied just\n * before viewport transform.\n * @property {CanvasGradient | CanvasPattern | string} [background] - Background\n * to use for the canvas.\n * Any valid `canvas.fillStyle` can be used: a `DOMString` parsed as CSS\n * value, a `CanvasGradient` object (a linear or radial gradient) or\n * a `CanvasPattern` object (a repetitive image). The default value is\n * 'rgb(255,255,255)'.\n *\n * NOTE: This option may be partially, or completely, ignored when the\n * `pageColors`-option is used.\n * @property {Object} [pageColors] - Overwrites background and foreground colors\n * with user defined ones in order to improve readability in high contrast\n * mode.\n * @property {Promise} [optionalContentConfigPromise] -\n * A promise that should resolve with an {@link OptionalContentConfig}\n * created from `PDFDocumentProxy.getOptionalContentConfig`. If `null`,\n * the configuration will be fetched automatically with the default visibility\n * states set.\n * @property {Map} [annotationCanvasMap] - Map some\n * annotation ids with canvases used to render them.\n * @property {PrintAnnotationStorage} [printAnnotationStorage]\n * @property {boolean} [isEditing] - Render the page in editing mode.\n * @property {boolean} [recordOperations] - Record the dependencies and bounding\n * boxes of all PDF operations that render onto the canvas.\n * @property {OperationsFilter} [operationsFilter] - If provided, only\n * run for which this function returns `true`.\n */\n\n/**\n * @callback OperationsFilter\n * @param {number} index - The index of the operation.\n * @returns {boolean} If false, the operation is ignored.\n */\n\n/**\n * Page getOperatorList parameters.\n *\n * @typedef {Object} GetOperatorListParameters\n * @property {string} [intent] - Rendering intent, can be 'display', 'print',\n * or 'any'. The default value is 'display'.\n * @property {number} [annotationMode] Controls which annotations are included\n * in the operatorList, for annotations with appearance-data; the values from\n * {@link AnnotationMode} should be used. The following values are supported:\n * - `AnnotationMode.DISABLE`, which disables all annotations.\n * - `AnnotationMode.ENABLE`, which includes all possible annotations (thus\n * it also depends on the `intent`-option, see above).\n * - `AnnotationMode.ENABLE_FORMS`, which excludes annotations that contain\n * interactive form elements (those will be rendered in the display layer).\n * - `AnnotationMode.ENABLE_STORAGE`, which includes all possible annotations\n * (as above) but where interactive form elements are updated with data\n * from the {@link AnnotationStorage}-instance; useful e.g. for printing.\n * The default value is `AnnotationMode.ENABLE`.\n * @property {PrintAnnotationStorage} [printAnnotationStorage]\n * @property {boolean} [isEditing] - Render the page in editing mode.\n */\n\n/**\n * Structure tree node. The root node will have a role \"Root\".\n *\n * @typedef {Object} StructTreeNode\n * @property {Array} children - Array of\n * {@link StructTreeNode} and {@link StructTreeContent} objects.\n * @property {string} role - element's role, already mapped if a role map exists\n * in the PDF.\n */\n\n/**\n * Structure tree content.\n *\n * @typedef {Object} StructTreeContent\n * @property {string} type - either \"content\" for page and stream structure\n * elements or \"object\" for object references.\n * @property {string} id - unique id that will map to the text layer.\n */\n\n/**\n * PDF page operator list.\n *\n * @typedef {Object} PDFOperatorList\n * @property {Array} fnArray - Array containing the operator functions.\n * @property {Array} argsArray - Array containing the arguments of the\n * functions.\n */\n\n/**\n * Proxy to a `PDFPage` in the worker thread.\n */\nclass PDFPageProxy {\n #pendingCleanup = false;\n\n constructor(pageIndex, pageInfo, transport, pdfBug = false) {\n this._pageIndex = pageIndex;\n this._pageInfo = pageInfo;\n this._transport = transport;\n this._stats = pdfBug ? new StatTimer() : null;\n this._pdfBug = pdfBug;\n /** @type {PDFObjects} */\n this.commonObjs = transport.commonObjs;\n this.objs = new PDFObjects();\n\n this._intentStates = new Map();\n this.destroyed = false;\n this.recordedBBoxes = null;\n }\n\n /**\n * @type {number} Page number of the page. First page is 1.\n */\n get pageNumber() {\n return this._pageIndex + 1;\n }\n\n /**\n * @type {number} The number of degrees the page is rotated clockwise.\n */\n get rotate() {\n return this._pageInfo.rotate;\n }\n\n /**\n * @type {RefProxy | null} The reference that points to this page.\n */\n get ref() {\n return this._pageInfo.ref;\n }\n\n /**\n * @type {number} The default size of units in 1/72nds of an inch.\n */\n get userUnit() {\n return this._pageInfo.userUnit;\n }\n\n /**\n * @type {Array} An array of the visible portion of the PDF page in\n * user space units [x1, y1, x2, y2].\n */\n get view() {\n return this._pageInfo.view;\n }\n\n /**\n * @param {GetViewportParameters} params - Viewport parameters.\n * @returns {PageViewport} Contains 'width' and 'height' properties\n * along with transforms required for rendering.\n */\n getViewport({\n scale,\n rotation = this.rotate,\n offsetX = 0,\n offsetY = 0,\n dontFlip = false,\n } = {}) {\n return new PageViewport({\n viewBox: this.view,\n userUnit: this.userUnit,\n scale,\n rotation,\n offsetX,\n offsetY,\n dontFlip,\n });\n }\n\n /**\n * @param {GetAnnotationsParameters} [params] - Annotation parameters.\n * @returns {Promise>} A promise that is resolved with an\n * {Array} of the annotation objects.\n */\n getAnnotations({ intent = \"display\" } = {}) {\n const { renderingIntent } = this._transport.getRenderingIntent(intent);\n\n return this._transport.getAnnotations(this._pageIndex, renderingIntent);\n }\n\n /**\n * @returns {Promise} A promise that is resolved with an\n * {Object} with JS actions.\n */\n getJSActions() {\n return this._transport.getPageJSActions(this._pageIndex);\n }\n\n /**\n * @type {Object} The filter factory instance.\n */\n get filterFactory() {\n return this._transport.filterFactory;\n }\n\n /**\n * @type {boolean} True if only XFA form.\n */\n get isPureXfa() {\n return shadow(this, \"isPureXfa\", !!this._transport._htmlForXfa);\n }\n\n /**\n * @returns {Promise} A promise that is resolved with\n * an {Object} with a fake DOM object (a tree structure where elements\n * are {Object} with a name, attributes (class, style, ...), value and\n * children, very similar to a HTML DOM tree), or `null` if no XFA exists.\n */\n async getXfa() {\n return this._transport._htmlForXfa?.children[this._pageIndex] || null;\n }\n\n /**\n * Begins the process of rendering a page to the desired context.\n *\n * @param {RenderParameters} params - Page render parameters.\n * @returns {RenderTask} An object that contains a promise that is\n * resolved when the page finishes rendering.\n */\n render({\n canvasContext,\n canvas = canvasContext.canvas,\n viewport,\n intent = \"display\",\n annotationMode = AnnotationMode.ENABLE,\n transform = null,\n background = null,\n optionalContentConfigPromise = null,\n annotationCanvasMap = null,\n pageColors = null,\n printAnnotationStorage = null,\n isEditing = false,\n recordOperations = false,\n operationsFilter = null,\n }) {\n this._stats?.time(\"Overall\");\n\n const intentArgs = this._transport.getRenderingIntent(\n intent,\n annotationMode,\n printAnnotationStorage,\n isEditing\n );\n const { renderingIntent, cacheKey } = intentArgs;\n // If there was a pending destroy, cancel it so no cleanup happens during\n // this call to render.\n this.#pendingCleanup = false;\n\n optionalContentConfigPromise ||=\n this._transport.getOptionalContentConfig(renderingIntent);\n\n let intentState = this._intentStates.get(cacheKey);\n if (!intentState) {\n intentState = Object.create(null);\n this._intentStates.set(cacheKey, intentState);\n }\n\n // Ensure that a pending `streamReader` cancel timeout is always aborted.\n if (intentState.streamReaderCancelTimeout) {\n clearTimeout(intentState.streamReaderCancelTimeout);\n intentState.streamReaderCancelTimeout = null;\n }\n\n const intentPrint = !!(renderingIntent & RenderingIntentFlag.PRINT);\n\n // If there's no displayReadyCapability yet, then the operatorList\n // was never requested before. Make the request and create the promise.\n if (!intentState.displayReadyCapability) {\n intentState.displayReadyCapability = Promise.withResolvers();\n intentState.operatorList = {\n fnArray: [],\n argsArray: [],\n lastChunk: false,\n separateAnnots: null,\n };\n\n this._stats?.time(\"Page Request\");\n this._pumpOperatorList(intentArgs);\n }\n\n const recordForDebugger = Boolean(\n this._pdfBug && globalThis.StepperManager?.enabled\n );\n\n const shouldRecordOperations =\n !this.recordedBBoxes && (recordOperations || recordForDebugger);\n\n const complete = error => {\n intentState.renderTasks.delete(internalRenderTask);\n\n if (shouldRecordOperations) {\n const recordedBBoxes = internalRenderTask.gfx?.dependencyTracker.take();\n if (recordedBBoxes) {\n if (internalRenderTask.stepper) {\n internalRenderTask.stepper.setOperatorBBoxes(\n recordedBBoxes,\n internalRenderTask.gfx.dependencyTracker.takeDebugMetadata()\n );\n }\n if (recordOperations) {\n this.recordedBBoxes = recordedBBoxes;\n }\n }\n }\n\n // Attempt to reduce memory usage during *printing*, by always running\n // cleanup immediately once rendering has finished.\n if (intentPrint) {\n this.#pendingCleanup = true;\n }\n this.#tryCleanup();\n\n if (error) {\n internalRenderTask.capability.reject(error);\n\n this._abortOperatorList({\n intentState,\n reason: error instanceof Error ? error : new Error(error),\n });\n } else {\n internalRenderTask.capability.resolve();\n }\n\n if (this._stats) {\n this._stats.timeEnd(\"Rendering\");\n this._stats.timeEnd(\"Overall\");\n\n if (globalThis.Stats?.enabled) {\n globalThis.Stats.add(this.pageNumber, this._stats);\n }\n }\n };\n\n const internalRenderTask = new InternalRenderTask({\n callback: complete,\n // Only include the required properties, and *not* the entire object.\n params: {\n canvas,\n canvasContext,\n dependencyTracker: shouldRecordOperations\n ? new CanvasDependencyTracker(\n canvas,\n intentState.operatorList.length,\n recordForDebugger\n )\n : null,\n viewport,\n transform,\n background,\n },\n objs: this.objs,\n commonObjs: this.commonObjs,\n annotationCanvasMap,\n operatorList: intentState.operatorList,\n pageIndex: this._pageIndex,\n canvasFactory: this._transport.canvasFactory,\n filterFactory: this._transport.filterFactory,\n useRequestAnimationFrame: !intentPrint,\n pdfBug: this._pdfBug,\n pageColors,\n enableHWA: this._transport.enableHWA,\n operationsFilter,\n });\n\n (intentState.renderTasks ||= new Set()).add(internalRenderTask);\n const renderTask = internalRenderTask.task;\n\n Promise.all([\n intentState.displayReadyCapability.promise,\n optionalContentConfigPromise,\n ])\n .then(([transparency, optionalContentConfig]) => {\n if (this.destroyed) {\n complete();\n return;\n }\n this._stats?.time(\"Rendering\");\n\n if (!(optionalContentConfig.renderingIntent & renderingIntent)) {\n throw new Error(\n \"Must use the same `intent`-argument when calling the `PDFPageProxy.render` \" +\n \"and `PDFDocumentProxy.getOptionalContentConfig` methods.\"\n );\n }\n internalRenderTask.initializeGraphics({\n transparency,\n optionalContentConfig,\n });\n internalRenderTask.operatorListChanged();\n })\n .catch(complete);\n\n return renderTask;\n }\n\n /**\n * @param {GetOperatorListParameters} params - Page getOperatorList\n * parameters.\n * @returns {Promise} A promise resolved with an\n * {@link PDFOperatorList} object that represents the page's operator list.\n */\n getOperatorList({\n intent = \"display\",\n annotationMode = AnnotationMode.ENABLE,\n printAnnotationStorage = null,\n isEditing = false,\n } = {}) {\n if (typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"GENERIC\")) {\n throw new Error(\"Not implemented: getOperatorList\");\n }\n function operatorListChanged() {\n if (intentState.operatorList.lastChunk) {\n intentState.opListReadCapability.resolve(intentState.operatorList);\n\n intentState.renderTasks.delete(opListTask);\n }\n }\n\n const intentArgs = this._transport.getRenderingIntent(\n intent,\n annotationMode,\n printAnnotationStorage,\n isEditing,\n /* isOpList = */ true\n );\n let intentState = this._intentStates.get(intentArgs.cacheKey);\n if (!intentState) {\n intentState = Object.create(null);\n this._intentStates.set(intentArgs.cacheKey, intentState);\n }\n let opListTask;\n\n if (!intentState.opListReadCapability) {\n opListTask = Object.create(null);\n opListTask.operatorListChanged = operatorListChanged;\n intentState.opListReadCapability = Promise.withResolvers();\n (intentState.renderTasks ||= new Set()).add(opListTask);\n intentState.operatorList = {\n fnArray: [],\n argsArray: [],\n lastChunk: false,\n separateAnnots: null,\n };\n\n this._stats?.time(\"Page Request\");\n this._pumpOperatorList(intentArgs);\n }\n return intentState.opListReadCapability.promise;\n }\n\n /**\n * NOTE: All occurrences of whitespace will be replaced by\n * standard spaces (0x20).\n *\n * @param {getTextContentParameters} params - getTextContent parameters.\n * @returns {ReadableStream} Stream for reading text content chunks.\n */\n streamTextContent({\n includeMarkedContent = false,\n disableNormalization = false,\n } = {}) {\n const TEXT_CONTENT_CHUNK_SIZE = 100;\n\n return this._transport.messageHandler.sendWithStream(\n \"GetTextContent\",\n {\n pageIndex: this._pageIndex,\n includeMarkedContent: includeMarkedContent === true,\n disableNormalization: disableNormalization === true,\n },\n {\n highWaterMark: TEXT_CONTENT_CHUNK_SIZE,\n size(textContent) {\n return textContent.items.length;\n },\n }\n );\n }\n\n /**\n * NOTE: All occurrences of whitespace will be replaced by\n * standard spaces (0x20).\n *\n * @param {getTextContentParameters} params - getTextContent parameters.\n * @returns {Promise} A promise that is resolved with a\n * {@link TextContent} object that represents the page's text content.\n */\n getTextContent(params = {}) {\n if (this._transport._htmlForXfa) {\n // TODO: We need to revisit this once the XFA foreground patch lands and\n // only do this for non-foreground XFA.\n return this.getXfa().then(xfa => XfaText.textContent(xfa));\n }\n const readableStream = this.streamTextContent(params);\n\n return new Promise(function (resolve, reject) {\n function pump() {\n reader.read().then(function ({ value, done }) {\n if (done) {\n resolve(textContent);\n return;\n }\n textContent.lang ??= value.lang;\n Object.assign(textContent.styles, value.styles);\n textContent.items.push(...value.items);\n pump();\n }, reject);\n }\n\n const reader = readableStream.getReader();\n const textContent = {\n items: [],\n styles: Object.create(null),\n lang: null,\n };\n pump();\n });\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a\n * {@link StructTreeNode} object that represents the page's structure tree,\n * or `null` when no structure tree is present for the current page.\n */\n getStructTree() {\n return this._transport.getStructTree(this._pageIndex);\n }\n\n /**\n * Destroys the page object.\n * @private\n */\n _destroy() {\n this.destroyed = true;\n\n const waitOn = [];\n for (const intentState of this._intentStates.values()) {\n this._abortOperatorList({\n intentState,\n reason: new Error(\"Page was destroyed.\"),\n force: true,\n });\n\n if (intentState.opListReadCapability) {\n // Avoid errors below, since the renderTasks are just stubs.\n continue;\n }\n for (const internalRenderTask of intentState.renderTasks) {\n waitOn.push(internalRenderTask.completed);\n internalRenderTask.cancel();\n }\n }\n this.objs.clear();\n this.#pendingCleanup = false;\n\n return Promise.all(waitOn);\n }\n\n /**\n * Cleans up resources allocated by the page.\n *\n * @param {boolean} [resetStats] - Reset page stats, if enabled.\n * The default value is `false`.\n * @returns {boolean} Indicates if clean-up was successfully run.\n */\n cleanup(resetStats = false) {\n this.#pendingCleanup = true;\n const success = this.#tryCleanup();\n\n if (resetStats && success) {\n this._stats &&= new StatTimer();\n }\n return success;\n }\n\n /**\n * Attempts to clean up if rendering is in a state where that's possible.\n * @returns {boolean} Indicates if clean-up was successfully run.\n */\n #tryCleanup() {\n if (!this.#pendingCleanup || this.destroyed) {\n return false;\n }\n for (const { renderTasks, operatorList } of this._intentStates.values()) {\n if (renderTasks.size > 0 || !operatorList.lastChunk) {\n return false;\n }\n }\n this._intentStates.clear();\n this.objs.clear();\n this.#pendingCleanup = false;\n return true;\n }\n\n /**\n * @private\n */\n _startRenderPage(transparency, cacheKey) {\n const intentState = this._intentStates.get(cacheKey);\n if (!intentState) {\n return; // Rendering was cancelled.\n }\n this._stats?.timeEnd(\"Page Request\");\n\n // TODO Refactor RenderPageRequest to separate rendering\n // and operator list logic\n intentState.displayReadyCapability?.resolve(transparency);\n }\n\n /**\n * @private\n */\n _renderPageChunk(operatorListChunk, intentState) {\n // Add the new chunk to the current operator list.\n for (let i = 0, ii = operatorListChunk.length; i < ii; i++) {\n intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]);\n intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]);\n }\n intentState.operatorList.lastChunk = operatorListChunk.lastChunk;\n intentState.operatorList.separateAnnots = operatorListChunk.separateAnnots;\n\n // Notify all the rendering tasks there are more operators to be consumed.\n for (const internalRenderTask of intentState.renderTasks) {\n internalRenderTask.operatorListChanged();\n }\n\n if (operatorListChunk.lastChunk) {\n this.#tryCleanup();\n }\n }\n\n /**\n * @private\n */\n _pumpOperatorList({\n renderingIntent,\n cacheKey,\n annotationStorageSerializable,\n modifiedIds,\n }) {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n assert(\n Number.isInteger(renderingIntent) && renderingIntent > 0,\n '_pumpOperatorList: Expected valid \"renderingIntent\" argument.'\n );\n }\n const { map, transfer } = annotationStorageSerializable;\n\n const readableStream = this._transport.messageHandler.sendWithStream(\n \"GetOperatorList\",\n {\n pageIndex: this._pageIndex,\n intent: renderingIntent,\n cacheKey,\n annotationStorage: map,\n modifiedIds,\n },\n transfer\n );\n const reader = readableStream.getReader();\n\n const intentState = this._intentStates.get(cacheKey);\n intentState.streamReader = reader;\n\n const pump = () => {\n reader.read().then(\n ({ value, done }) => {\n if (done) {\n intentState.streamReader = null;\n return;\n }\n if (this._transport.destroyed) {\n return; // Ignore any pending requests if the worker was terminated.\n }\n this._renderPageChunk(value, intentState);\n pump();\n },\n reason => {\n intentState.streamReader = null;\n\n if (this._transport.destroyed) {\n return; // Ignore any pending requests if the worker was terminated.\n }\n if (intentState.operatorList) {\n // Mark operator list as complete.\n intentState.operatorList.lastChunk = true;\n\n for (const internalRenderTask of intentState.renderTasks) {\n internalRenderTask.operatorListChanged();\n }\n this.#tryCleanup();\n }\n\n if (intentState.displayReadyCapability) {\n intentState.displayReadyCapability.reject(reason);\n } else if (intentState.opListReadCapability) {\n intentState.opListReadCapability.reject(reason);\n } else {\n throw reason;\n }\n }\n );\n };\n pump();\n }\n\n /**\n * @private\n */\n _abortOperatorList({ intentState, reason, force = false }) {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n assert(\n reason instanceof Error,\n '_abortOperatorList: Expected valid \"reason\" argument.'\n );\n }\n\n if (!intentState.streamReader) {\n return;\n }\n // Ensure that a pending `streamReader` cancel timeout is always aborted.\n if (intentState.streamReaderCancelTimeout) {\n clearTimeout(intentState.streamReaderCancelTimeout);\n intentState.streamReaderCancelTimeout = null;\n }\n\n if (!force) {\n // Ensure that an Error occurring in *only* one `InternalRenderTask`, e.g.\n // multiple render() calls on the same canvas, won't break all rendering.\n if (intentState.renderTasks.size > 0) {\n return;\n }\n // Don't immediately abort parsing on the worker-thread when rendering is\n // cancelled, since that will unnecessarily delay re-rendering when (for\n // partially parsed pages) e.g. zooming/rotation occurs in the viewer.\n if (reason instanceof RenderingCancelledException) {\n let delay = RENDERING_CANCELLED_TIMEOUT;\n if (reason.extraDelay > 0 && reason.extraDelay < /* ms = */ 1000) {\n // Above, we prevent the total delay from becoming arbitrarily large.\n delay += reason.extraDelay;\n }\n\n intentState.streamReaderCancelTimeout = setTimeout(() => {\n intentState.streamReaderCancelTimeout = null;\n this._abortOperatorList({ intentState, reason, force: true });\n }, delay);\n return;\n }\n }\n intentState.streamReader\n .cancel(new AbortException(reason.message))\n .catch(() => {\n // Avoid \"Uncaught promise\" messages in the console.\n });\n intentState.streamReader = null;\n\n if (this._transport.destroyed) {\n return; // Ignore any pending requests if the worker was terminated.\n }\n // Remove the current `intentState`, since a cancelled `getOperatorList`\n // call on the worker-thread cannot be re-started...\n for (const [curCacheKey, curIntentState] of this._intentStates) {\n if (curIntentState === intentState) {\n this._intentStates.delete(curCacheKey);\n break;\n }\n }\n // ... and force clean-up to ensure that any old state is always removed.\n this.cleanup();\n }\n\n /**\n * @type {StatTimer | null} Returns page stats, if enabled; returns `null`\n * otherwise.\n */\n get stats() {\n return this._stats;\n }\n}\n\n/**\n * @typedef {Object} PDFWorkerParameters\n * @property {string} [name] - The name of the worker.\n * @property {Worker} [port] - The `workerPort` object.\n * @property {number} [verbosity] - Controls the logging level;\n * the constants from {@link VerbosityLevel} should be used.\n */\n\n/**\n * PDF.js web worker abstraction that controls the instantiation of PDF\n * documents. Message handlers are used to pass information from the main\n * thread to the worker thread and vice versa. If the creation of a web\n * worker is not possible, a \"fake\" worker will be used instead.\n *\n * @param {PDFWorkerParameters} params - The worker initialization parameters.\n */\nclass PDFWorker {\n #capability = Promise.withResolvers();\n\n #messageHandler = null;\n\n #port = null;\n\n #webWorker = null;\n\n static #fakeWorkerId = 0;\n\n static #isWorkerDisabled = false;\n\n static #workerPorts = new WeakMap();\n\n static {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n if (isNodeJS) {\n // Workers aren't supported in Node.js, force-disabling them there.\n this.#isWorkerDisabled = true;\n\n GlobalWorkerOptions.workerSrc ||= PDFJSDev.test(\"LIB\")\n ? \"../pdf.worker.js\"\n : \"./pdf.worker.mjs\";\n }\n\n // Check if URLs have the same origin. For non-HTTP based URLs, returns\n // false.\n this._isSameOrigin = (baseUrl, otherUrl) => {\n const base = URL.parse(baseUrl);\n if (!base?.origin || base.origin === \"null\") {\n return false; // non-HTTP url\n }\n const other = new URL(otherUrl, base);\n return base.origin === other.origin;\n };\n\n this._createCDNWrapper = url => {\n // We will rely on blob URL's property to specify origin.\n // We want this function to fail in case if createObjectURL or Blob do\n // not exist or fail for some reason -- our Worker creation will fail\n // anyway.\n const wrapper = `await import(\"${url}\");`;\n return URL.createObjectURL(\n new Blob([wrapper], { type: \"text/javascript\" })\n );\n };\n\n this.fromPort = params => {\n deprecated(\n \"`PDFWorker.fromPort` - please use `PDFWorker.create` instead.\"\n );\n if (!params?.port) {\n throw new Error(\"PDFWorker.fromPort - invalid method signature.\");\n }\n return this.create(params);\n };\n }\n\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n this._resetGlobalState = () => {\n this.#isWorkerDisabled = false;\n delete globalThis.pdfjsWorker;\n };\n }\n }\n\n constructor({\n name = null,\n port = null,\n verbosity = getVerbosityLevel(),\n } = {}) {\n this.name = name;\n this.destroyed = false;\n this.verbosity = verbosity;\n\n if (port) {\n if (PDFWorker.#workerPorts.has(port)) {\n throw new Error(\"Cannot use more than one PDFWorker per port.\");\n }\n PDFWorker.#workerPorts.set(port, this);\n this.#initializeFromPort(port);\n } else {\n this.#initialize();\n }\n\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n // For testing purposes.\n Object.defineProperty(this, \"_webWorker\", {\n get() {\n return this.#webWorker;\n },\n });\n }\n }\n\n /**\n * Promise for worker initialization completion.\n * @type {Promise}\n */\n get promise() {\n return this.#capability.promise;\n }\n\n #resolve() {\n this.#capability.resolve();\n // Send global setting, e.g. verbosity level.\n this.#messageHandler.send(\"configure\", {\n verbosity: this.verbosity,\n });\n }\n\n /**\n * The current `workerPort`, when it exists.\n * @type {Worker}\n */\n get port() {\n return this.#port;\n }\n\n /**\n * The current MessageHandler-instance.\n * @type {MessageHandler}\n */\n get messageHandler() {\n return this.#messageHandler;\n }\n\n #initializeFromPort(port) {\n this.#port = port;\n this.#messageHandler = new MessageHandler(\"main\", \"worker\", port);\n this.#messageHandler.on(\"ready\", () => {\n // Ignoring \"ready\" event -- MessageHandler should already be initialized\n // and ready to accept messages.\n });\n this.#resolve();\n }\n\n #initialize() {\n // If worker support isn't disabled explicit and the browser has worker\n // support, create a new web worker and test if it/the browser fulfills\n // all requirements to run parts of pdf.js in a web worker.\n // Right now, the requirement is, that an Uint8Array is still an\n // Uint8Array as it arrives on the worker.\n if (\n PDFWorker.#isWorkerDisabled ||\n PDFWorker.#mainThreadWorkerMessageHandler\n ) {\n this.#setupFakeWorker();\n return;\n }\n let { workerSrc } = PDFWorker;\n\n try {\n // Wraps workerSrc path into blob URL, if the former does not belong\n // to the same origin.\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"GENERIC\") &&\n !PDFWorker._isSameOrigin(window.location, workerSrc)\n ) {\n workerSrc = PDFWorker._createCDNWrapper(\n new URL(workerSrc, window.location).href\n );\n }\n\n const worker = new Worker(workerSrc, { type: \"module\" });\n const messageHandler = new MessageHandler(\"main\", \"worker\", worker);\n const terminateEarly = () => {\n ac.abort();\n messageHandler.destroy();\n worker.terminate();\n if (this.destroyed) {\n this.#capability.reject(new Error(\"Worker was destroyed\"));\n } else {\n // Fall back to fake worker if the termination is caused by an\n // error (e.g. NetworkError / SecurityError).\n this.#setupFakeWorker();\n }\n };\n\n const ac = new AbortController();\n worker.addEventListener(\n \"error\",\n () => {\n if (!this.#webWorker) {\n // Worker failed to initialize due to an error. Clean up and fall\n // back to the fake worker.\n terminateEarly();\n }\n },\n { signal: ac.signal }\n );\n\n messageHandler.on(\"test\", data => {\n ac.abort();\n if (this.destroyed || !data) {\n terminateEarly();\n return;\n }\n this.#messageHandler = messageHandler;\n this.#port = worker;\n this.#webWorker = worker;\n\n this.#resolve();\n });\n\n messageHandler.on(\"ready\", data => {\n ac.abort();\n if (this.destroyed) {\n terminateEarly();\n return;\n }\n try {\n sendTest();\n } catch {\n // We need fallback to a faked worker.\n this.#setupFakeWorker();\n }\n });\n\n const sendTest = () => {\n const testObj = new Uint8Array();\n // Ensure that we can use `postMessage` transfers.\n messageHandler.send(\"test\", testObj, [testObj.buffer]);\n };\n\n // It might take time for the worker to initialize. We will try to send\n // the \"test\" message immediately, and once the \"ready\" message arrives.\n // The worker shall process only the first received \"test\" message.\n sendTest();\n return;\n } catch {\n info(\"The worker has been disabled.\");\n }\n // Either workers are not supported or have thrown an exception.\n // Thus, we fallback to a faked worker.\n this.#setupFakeWorker();\n }\n\n #setupFakeWorker() {\n if (!PDFWorker.#isWorkerDisabled) {\n warn(\"Setting up fake worker.\");\n PDFWorker.#isWorkerDisabled = true;\n }\n\n PDFWorker._setupFakeWorkerGlobal\n .then(WorkerMessageHandler => {\n if (this.destroyed) {\n this.#capability.reject(new Error(\"Worker was destroyed\"));\n return;\n }\n const port = new LoopbackPort();\n this.#port = port;\n\n // All fake workers use the same port, making id unique.\n const id = `fake${PDFWorker.#fakeWorkerId++}`;\n\n // If the main thread is our worker, setup the handling for the\n // messages -- the main thread sends to it self.\n const workerHandler = new MessageHandler(id + \"_worker\", id, port);\n WorkerMessageHandler.setup(workerHandler, port);\n\n this.#messageHandler = new MessageHandler(id, id + \"_worker\", port);\n this.#resolve();\n })\n .catch(reason => {\n this.#capability.reject(\n new Error(`Setting up fake worker failed: \"${reason.message}\".`)\n );\n });\n }\n\n /**\n * Destroys the worker instance.\n */\n destroy() {\n this.destroyed = true;\n\n // We need to terminate only web worker created resource.\n this.#webWorker?.terminate();\n this.#webWorker = null;\n\n PDFWorker.#workerPorts.delete(this.#port);\n this.#port = null;\n\n this.#messageHandler?.destroy();\n this.#messageHandler = null;\n }\n\n /**\n * @param {PDFWorkerParameters} params - The worker initialization parameters.\n * @returns {PDFWorker}\n */\n static create(params) {\n const cachedPort = this.#workerPorts.get(params?.port);\n if (cachedPort) {\n if (cachedPort._pendingDestroy) {\n throw new Error(\n \"PDFWorker.create - the worker is being destroyed.\\n\" +\n \"Please remember to await `PDFDocumentLoadingTask.destroy()`-calls.\"\n );\n }\n return cachedPort;\n }\n return new PDFWorker(params);\n }\n\n /**\n * The current `workerSrc`, when it exists.\n * @type {string}\n */\n static get workerSrc() {\n if (GlobalWorkerOptions.workerSrc) {\n return GlobalWorkerOptions.workerSrc;\n }\n throw new Error('No \"GlobalWorkerOptions.workerSrc\" specified.');\n }\n\n static get #mainThreadWorkerMessageHandler() {\n try {\n return globalThis.pdfjsWorker?.WorkerMessageHandler || null;\n } catch {\n return null;\n }\n }\n\n // Loads worker code into the main-thread.\n static get _setupFakeWorkerGlobal() {\n const loader = async () => {\n if (this.#mainThreadWorkerMessageHandler) {\n // The worker was already loaded using e.g. a ` + + + + + + + +
    + + +
    +
    +
    +
    + + + + +
    +
    + +
    +
    +
    + + +
    +
    +
    +
    +
    +
    + + + +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    + + +
    +
    + +
    + +
    +
    + + + + +
    +
    +
    +
    + +
    + +
    + + + +
    +
    +
    + + +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + +
    + +
    + + + +
    + +
    + +
    + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    + +
    + +
    + +
    +
    + +
    +
    + + +
    +
    + +
    + +

    -

    +
    +
    + +

    -

    +
    +
    +
    + +

    -

    +
    +
    + +

    -

    +
    +
    + +

    -

    +
    +
    + +

    -

    +
    +
    + +

    -

    +
    +
    + +

    -

    +
    +
    + +

    -

    +
    +
    +
    + +

    -

    +
    +
    + +

    -

    +
    +
    + +

    -

    +
    +
    + +

    -

    +
    +
    +
    + +

    -

    +
    +
    + +
    +
    + +
    +
    + + +
    +
    +
    +
    + + +
    +
    + +
    +
    +
    + +
    +
    +
    +
    +
    + + +
    +
    + +
    +
    +
    +
    + + +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    + +
    + +
    +
    +
    + + +
    + +
    +
    +
    +
    +
    +
    + + +
    + +
    +
    +
    + + + +
    +
    +
    + + +
    +
    + +
    +
    + +
    +
    +
    + + +
    +
    + +
    +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    + +
    +
    + + +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + + +
    +
    + +
    +
    + + + +
    +
    +
    + +
    +
    + + +
    +
    + + +
    +
    +
    +
    + +
    + + + +
    +
    +
    +
    +
    + + + + + +
    + +
    +
    + + + + +
    +
    + +
    + + +
    +
    +
    +
    + + +
    +
    + +
    +
    +
    + + + + + +
    + +
    +
    + + +
    +
    +
    + + +
    +
    + +
    + +
    + + +
    +
    +
    + + +
    + +
    +
    + + 0% +
    +
    + +
    +
    +
    + + + +
    +
    + + diff --git a/fs-framework/fs-preview/src/main/resources/static/lib/pdfjs/web/viewer.mjs b/fs-framework/fs-preview/src/main/resources/static/lib/pdfjs/web/viewer.mjs new file mode 100644 index 0000000000000000000000000000000000000000..ab2fe1feff06405e5d65f34c1cfebc104d814a94 --- /dev/null +++ b/fs-framework/fs-preview/src/main/resources/static/lib/pdfjs/web/viewer.mjs @@ -0,0 +1,18420 @@ +/** + * @licstart The following is the entire license notice for the + * JavaScript code in this page + * + * Copyright 2024 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @licend The above is the entire license notice for the + * JavaScript code in this page + */ + +/** + * pdfjsVersion = 5.4.394 + * pdfjsBuild = 2cc809ade + */ +/******/ // The require scope +/******/ var __webpack_require__ = {}; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; + +;// ./web/pdfjs.js +const { + AbortException, + AnnotationEditorLayer, + AnnotationEditorParamsType, + AnnotationEditorType, + AnnotationEditorUIManager, + AnnotationLayer, + AnnotationMode, + AnnotationType, + applyOpacity, + build, + ColorPicker, + createValidAbsoluteUrl, + CSSConstants, + DOMSVGFactory, + DrawLayer, + FeatureTest, + fetchData, + findContrastColor, + getDocument, + getFilenameFromUrl, + getPdfFilenameFromUrl: pdfjs_getPdfFilenameFromUrl, + getRGB, + getUuid, + getXfaPageViewport, + GlobalWorkerOptions, + ImageKind, + InvalidPDFException, + isDataScheme, + isPdfFile, + isValidExplicitDest, + MathClamp, + noContextMenu, + normalizeUnicode, + OPS, + OutputScale, + PasswordResponses, + PDFDataRangeTransport, + PDFDateString, + PDFWorker, + PermissionFlag, + PixelsPerInch, + RenderingCancelledException, + renderRichText, + ResponseException, + setLayerDimensions, + shadow, + SignatureExtractor, + stopEvent, + SupportedImageMimeTypes, + TextLayer, + TouchManager, + updateUrlHash, + Util, + VerbosityLevel, + version, + XfaLayer +} = globalThis.pdfjsLib; + +;// ./web/ui_utils.js + +const DEFAULT_SCALE_VALUE = "auto"; +const DEFAULT_SCALE = 1.0; +const DEFAULT_SCALE_DELTA = 1.1; +const MIN_SCALE = 0.1; +const MAX_SCALE = 10.0; +const UNKNOWN_SCALE = 0; +const MAX_AUTO_SCALE = 1.25; +const SCROLLBAR_PADDING = 40; +const VERTICAL_PADDING = 5; +const RenderingStates = { + INITIAL: 0, + RUNNING: 1, + PAUSED: 2, + FINISHED: 3 +}; +const PresentationModeState = { + UNKNOWN: 0, + NORMAL: 1, + CHANGING: 2, + FULLSCREEN: 3 +}; +const SidebarView = { + UNKNOWN: -1, + NONE: 0, + THUMBS: 1, + OUTLINE: 2, + ATTACHMENTS: 3, + LAYERS: 4 +}; +const TextLayerMode = { + DISABLE: 0, + ENABLE: 1, + ENABLE_PERMISSIONS: 2 +}; +const ScrollMode = { + UNKNOWN: -1, + VERTICAL: 0, + HORIZONTAL: 1, + WRAPPED: 2, + PAGE: 3 +}; +const SpreadMode = { + UNKNOWN: -1, + NONE: 0, + ODD: 1, + EVEN: 2 +}; +const CursorTool = { + SELECT: 0, + HAND: 1, + ZOOM: 2 +}; +const AutoPrintRegExp = /\bprint\s*\(/; +function scrollIntoView(element, spot, scrollMatches = false) { + let parent = element.offsetParent; + if (!parent) { + console.error("offsetParent is not set -- cannot scroll"); + return; + } + let offsetY = element.offsetTop + element.clientTop; + let offsetX = element.offsetLeft + element.clientLeft; + while (parent.clientHeight === parent.scrollHeight && parent.clientWidth === parent.scrollWidth || scrollMatches && (parent.classList.contains("markedContent") || getComputedStyle(parent).overflow === "hidden")) { + offsetY += parent.offsetTop; + offsetX += parent.offsetLeft; + parent = parent.offsetParent; + if (!parent) { + return; + } + } + if (spot) { + if (spot.top !== undefined) { + offsetY += spot.top; + } + if (spot.left !== undefined) { + if (scrollMatches) { + const elementWidth = element.getBoundingClientRect().width; + const padding = MathClamp((parent.clientWidth - elementWidth) / 2, 20, 400); + offsetX += spot.left - padding; + } else { + offsetX += spot.left; + } + parent.scrollLeft = offsetX; + } + } + parent.scrollTop = offsetY; +} +function watchScroll(viewAreaElement, callback, abortSignal = undefined) { + const debounceScroll = function (evt) { + if (rAF) { + return; + } + rAF = window.requestAnimationFrame(function viewAreaElementScrolled() { + rAF = null; + const currentX = viewAreaElement.scrollLeft; + const lastX = state.lastX; + if (currentX !== lastX) { + state.right = currentX > lastX; + } + state.lastX = currentX; + const currentY = viewAreaElement.scrollTop; + const lastY = state.lastY; + if (currentY !== lastY) { + state.down = currentY > lastY; + } + state.lastY = currentY; + callback(state); + }); + }; + const state = { + right: true, + down: true, + lastX: viewAreaElement.scrollLeft, + lastY: viewAreaElement.scrollTop, + _eventHandler: debounceScroll + }; + let rAF = null; + viewAreaElement.addEventListener("scroll", debounceScroll, { + useCapture: true, + signal: abortSignal + }); + abortSignal?.addEventListener("abort", () => window.cancelAnimationFrame(rAF), { + once: true + }); + return state; +} +function parseQueryString(query) { + const params = new Map(); + for (const [key, value] of new URLSearchParams(query)) { + params.set(key.toLowerCase(), value); + } + return params; +} +const InvisibleCharsRegExp = /[\x00-\x1F]/g; +function removeNullCharacters(str, replaceInvisible = false) { + if (!InvisibleCharsRegExp.test(str)) { + return str; + } + if (replaceInvisible) { + return str.replaceAll(InvisibleCharsRegExp, m => m === "\x00" ? "" : " "); + } + return str.replaceAll("\x00", ""); +} +function binarySearchFirstItem(items, condition, start = 0) { + let minIndex = start; + let maxIndex = items.length - 1; + if (maxIndex < 0 || !condition(items[maxIndex])) { + return items.length; + } + if (condition(items[minIndex])) { + return minIndex; + } + while (minIndex < maxIndex) { + const currentIndex = minIndex + maxIndex >> 1; + const currentItem = items[currentIndex]; + if (condition(currentItem)) { + maxIndex = currentIndex; + } else { + minIndex = currentIndex + 1; + } + } + return minIndex; +} +function approximateFraction(x) { + if (Math.floor(x) === x) { + return [x, 1]; + } + const xinv = 1 / x; + const limit = 8; + if (xinv > limit) { + return [1, limit]; + } else if (Math.floor(xinv) === xinv) { + return [1, xinv]; + } + const x_ = x > 1 ? xinv : x; + let a = 0, + b = 1, + c = 1, + d = 1; + while (true) { + const p = a + c, + q = b + d; + if (q > limit) { + break; + } + if (x_ <= p / q) { + c = p; + d = q; + } else { + a = p; + b = q; + } + } + let result; + if (x_ - a / b < c / d - x_) { + result = x_ === x ? [a, b] : [b, a]; + } else { + result = x_ === x ? [c, d] : [d, c]; + } + return result; +} +function floorToDivide(x, div) { + return x - x % div; +} +function getPageSizeInches({ + view, + userUnit, + rotate +}) { + const [x1, y1, x2, y2] = view; + const changeOrientation = rotate % 180 !== 0; + const width = (x2 - x1) / 72 * userUnit; + const height = (y2 - y1) / 72 * userUnit; + return { + width: changeOrientation ? height : width, + height: changeOrientation ? width : height + }; +} +function backtrackBeforeAllVisibleElements(index, views, top) { + if (index < 2) { + return index; + } + let elt = views[index].div; + let pageTop = elt.offsetTop + elt.clientTop; + if (pageTop >= top) { + elt = views[index - 1].div; + pageTop = elt.offsetTop + elt.clientTop; + } + for (let i = index - 2; i >= 0; --i) { + elt = views[i].div; + if (elt.offsetTop + elt.clientTop + elt.clientHeight <= pageTop) { + break; + } + index = i; + } + return index; +} +function getVisibleElements({ + scrollEl, + views, + sortByVisibility = false, + horizontal = false, + rtl = false +}) { + const top = scrollEl.scrollTop, + bottom = top + scrollEl.clientHeight; + const left = scrollEl.scrollLeft, + right = left + scrollEl.clientWidth; + function isElementBottomAfterViewTop(view) { + const element = view.div; + const elementBottom = element.offsetTop + element.clientTop + element.clientHeight; + return elementBottom > top; + } + function isElementNextAfterViewHorizontally(view) { + const element = view.div; + const elementLeft = element.offsetLeft + element.clientLeft; + const elementRight = elementLeft + element.clientWidth; + return rtl ? elementLeft < right : elementRight > left; + } + const visible = [], + ids = new Set(), + numViews = views.length; + let firstVisibleElementInd = binarySearchFirstItem(views, horizontal ? isElementNextAfterViewHorizontally : isElementBottomAfterViewTop); + if (firstVisibleElementInd > 0 && firstVisibleElementInd < numViews && !horizontal) { + firstVisibleElementInd = backtrackBeforeAllVisibleElements(firstVisibleElementInd, views, top); + } + let lastEdge = horizontal ? right : -1; + for (let i = firstVisibleElementInd; i < numViews; i++) { + const view = views[i], + element = view.div; + const currentWidth = element.offsetLeft + element.clientLeft; + const currentHeight = element.offsetTop + element.clientTop; + const viewWidth = element.clientWidth, + viewHeight = element.clientHeight; + const viewRight = currentWidth + viewWidth; + const viewBottom = currentHeight + viewHeight; + if (lastEdge === -1) { + if (viewBottom >= bottom) { + lastEdge = viewBottom; + } + } else if ((horizontal ? currentWidth : currentHeight) > lastEdge) { + break; + } + if (viewBottom <= top || currentHeight >= bottom || viewRight <= left || currentWidth >= right) { + continue; + } + const minY = Math.max(0, top - currentHeight); + const minX = Math.max(0, left - currentWidth); + const hiddenHeight = minY + Math.max(0, viewBottom - bottom); + const hiddenWidth = minX + Math.max(0, viewRight - right); + const fractionHeight = (viewHeight - hiddenHeight) / viewHeight, + fractionWidth = (viewWidth - hiddenWidth) / viewWidth; + const percent = fractionHeight * fractionWidth * 100 | 0; + visible.push({ + id: view.id, + x: currentWidth, + y: currentHeight, + visibleArea: percent === 100 ? null : { + minX, + minY, + maxX: Math.min(viewRight, right) - currentWidth, + maxY: Math.min(viewBottom, bottom) - currentHeight + }, + view, + percent, + widthPercent: fractionWidth * 100 | 0 + }); + ids.add(view.id); + } + const first = visible[0], + last = visible.at(-1); + if (sortByVisibility) { + visible.sort(function (a, b) { + const pc = a.percent - b.percent; + if (Math.abs(pc) > 0.001) { + return -pc; + } + return a.id - b.id; + }); + } + return { + first, + last, + views: visible, + ids + }; +} +function normalizeWheelEventDirection(evt) { + let delta = Math.hypot(evt.deltaX, evt.deltaY); + const angle = Math.atan2(evt.deltaY, evt.deltaX); + if (-0.25 * Math.PI < angle && angle < 0.75 * Math.PI) { + delta = -delta; + } + return delta; +} +function normalizeWheelEventDelta(evt) { + const deltaMode = evt.deltaMode; + let delta = normalizeWheelEventDirection(evt); + const MOUSE_PIXELS_PER_LINE = 30; + const MOUSE_LINES_PER_PAGE = 30; + if (deltaMode === WheelEvent.DOM_DELTA_PIXEL) { + delta /= MOUSE_PIXELS_PER_LINE * MOUSE_LINES_PER_PAGE; + } else if (deltaMode === WheelEvent.DOM_DELTA_LINE) { + delta /= MOUSE_LINES_PER_PAGE; + } + return delta; +} +function isValidRotation(angle) { + return Number.isInteger(angle) && angle % 90 === 0; +} +function isValidScrollMode(mode) { + return Number.isInteger(mode) && Object.values(ScrollMode).includes(mode) && mode !== ScrollMode.UNKNOWN; +} +function isValidSpreadMode(mode) { + return Number.isInteger(mode) && Object.values(SpreadMode).includes(mode) && mode !== SpreadMode.UNKNOWN; +} +function isPortraitOrientation(size) { + return size.width <= size.height; +} +const animationStarted = new Promise(function (resolve) { + window.requestAnimationFrame(resolve); +}); +const docStyle = document.documentElement.style; +class ProgressBar { + #classList = null; + #disableAutoFetchTimeout = null; + #percent = 0; + #style = null; + #visible = true; + constructor(bar) { + this.#classList = bar.classList; + this.#style = bar.style; + } + get percent() { + return this.#percent; + } + set percent(val) { + this.#percent = MathClamp(val, 0, 100); + if (isNaN(val)) { + this.#classList.add("indeterminate"); + return; + } + this.#classList.remove("indeterminate"); + this.#style.setProperty("--progressBar-percent", `${this.#percent}%`); + } + setWidth(viewer) { + if (!viewer) { + return; + } + const container = viewer.parentNode; + const scrollbarWidth = container.offsetWidth - viewer.offsetWidth; + if (scrollbarWidth > 0) { + this.#style.setProperty("--progressBar-end-offset", `${scrollbarWidth}px`); + } + } + setDisableAutoFetch(delay = 5000) { + if (this.#percent === 100 || isNaN(this.#percent)) { + return; + } + if (this.#disableAutoFetchTimeout) { + clearTimeout(this.#disableAutoFetchTimeout); + } + this.show(); + this.#disableAutoFetchTimeout = setTimeout(() => { + this.#disableAutoFetchTimeout = null; + this.hide(); + }, delay); + } + hide() { + if (!this.#visible) { + return; + } + this.#visible = false; + this.#classList.add("hidden"); + } + show() { + if (this.#visible) { + return; + } + this.#visible = true; + this.#classList.remove("hidden"); + } +} +function getActiveOrFocusedElement() { + let curRoot = document; + let curActiveOrFocused = curRoot.activeElement || curRoot.querySelector(":focus"); + while (curActiveOrFocused?.shadowRoot) { + curRoot = curActiveOrFocused.shadowRoot; + curActiveOrFocused = curRoot.activeElement || curRoot.querySelector(":focus"); + } + return curActiveOrFocused; +} +function apiPageLayoutToViewerModes(layout) { + let scrollMode = ScrollMode.VERTICAL, + spreadMode = SpreadMode.NONE; + switch (layout) { + case "SinglePage": + scrollMode = ScrollMode.PAGE; + break; + case "OneColumn": + break; + case "TwoPageLeft": + scrollMode = ScrollMode.PAGE; + case "TwoColumnLeft": + spreadMode = SpreadMode.ODD; + break; + case "TwoPageRight": + scrollMode = ScrollMode.PAGE; + case "TwoColumnRight": + spreadMode = SpreadMode.EVEN; + break; + } + return { + scrollMode, + spreadMode + }; +} +function apiPageModeToSidebarView(mode) { + switch (mode) { + case "UseNone": + return SidebarView.NONE; + case "UseThumbs": + return SidebarView.THUMBS; + case "UseOutlines": + return SidebarView.OUTLINE; + case "UseAttachments": + return SidebarView.ATTACHMENTS; + case "UseOC": + return SidebarView.LAYERS; + } + return SidebarView.NONE; +} +function toggleCheckedBtn(button, toggle, view = null) { + button.classList.toggle("toggled", toggle); + button.setAttribute("aria-checked", toggle); + view?.classList.toggle("hidden", !toggle); +} +function toggleExpandedBtn(button, toggle, view = null) { + button.classList.toggle("toggled", toggle); + button.setAttribute("aria-expanded", toggle); + view?.classList.toggle("hidden", !toggle); +} +const calcRound = function () { + const e = document.createElement("div"); + e.style.width = "round(down, calc(1.6666666666666665 * 792px), 1px)"; + return e.style.width === "calc(1320px)" ? Math.fround : x => x; +}(); + +;// ./web/app_options.js +{ + var compatParams = new Map(); + const { + maxTouchPoints, + platform, + userAgent + } = navigator; + const isAndroid = /Android/.test(userAgent); + const isIOS = /\b(iPad|iPhone|iPod)(?=;)/.test(userAgent) || platform === "MacIntel" && maxTouchPoints > 1; + (function () { + if (isIOS || isAndroid) { + compatParams.set("maxCanvasPixels", 5242880); + } + })(); + (function () { + if (isAndroid) { + compatParams.set("useSystemFonts", false); + } + })(); +} +const OptionKind = { + BROWSER: 0x01, + VIEWER: 0x02, + API: 0x04, + WORKER: 0x08, + EVENT_DISPATCH: 0x10, + PREFERENCE: 0x80 +}; +const Type = { + BOOLEAN: 0x01, + NUMBER: 0x02, + OBJECT: 0x04, + STRING: 0x08, + UNDEFINED: 0x10 +}; +const defaultOptions = { + allowedGlobalEvents: { + value: null, + kind: OptionKind.BROWSER + }, + canvasMaxAreaInBytes: { + value: -1, + kind: OptionKind.BROWSER + OptionKind.API + }, + isInAutomation: { + value: false, + kind: OptionKind.BROWSER + }, + localeProperties: { + value: { + lang: navigator.language || "en-US" + }, + kind: OptionKind.BROWSER + }, + maxCanvasDim: { + value: 32767, + kind: OptionKind.BROWSER + OptionKind.VIEWER + }, + nimbusDataStr: { + value: "", + kind: OptionKind.BROWSER + }, + supportsCaretBrowsingMode: { + value: false, + kind: OptionKind.BROWSER + }, + supportsDocumentFonts: { + value: true, + kind: OptionKind.BROWSER + }, + supportsIntegratedFind: { + value: false, + kind: OptionKind.BROWSER + }, + supportsMouseWheelZoomCtrlKey: { + value: true, + kind: OptionKind.BROWSER + }, + supportsMouseWheelZoomMetaKey: { + value: true, + kind: OptionKind.BROWSER + }, + supportsPinchToZoom: { + value: true, + kind: OptionKind.BROWSER + }, + supportsPrinting: { + value: true, + kind: OptionKind.BROWSER + }, + toolbarDensity: { + value: 0, + kind: OptionKind.BROWSER + OptionKind.EVENT_DISPATCH + }, + altTextLearnMoreUrl: { + value: "", + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + annotationEditorMode: { + value: 0, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + annotationMode: { + value: 2, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + capCanvasAreaFactor: { + value: 200, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + commentLearnMoreUrl: { + value: "", + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + cursorToolOnLoad: { + value: 0, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + debuggerSrc: { + value: "./debugger.mjs", + kind: OptionKind.VIEWER + }, + defaultZoomDelay: { + value: 400, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + defaultZoomValue: { + value: "", + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + disableHistory: { + value: false, + kind: OptionKind.VIEWER + }, + disablePageLabels: { + value: false, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + enableAltText: { + value: false, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + enableAltTextModelDownload: { + value: true, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + OptionKind.EVENT_DISPATCH + }, + enableAutoLinking: { + value: true, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + enableComment: { + value: false, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + enableDetailCanvas: { + value: true, + kind: OptionKind.VIEWER + }, + enableGuessAltText: { + value: true, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + OptionKind.EVENT_DISPATCH + }, + enableHighlightFloatingButton: { + value: false, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + enableNewAltTextWhenAddingImage: { + value: true, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + enableOptimizedPartialRendering: { + value: false, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + enablePermissions: { + value: false, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + enablePrintAutoRotate: { + value: true, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + enableScripting: { + value: true, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + enableSignatureEditor: { + value: false, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + enableUpdatedAddImage: { + value: false, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + externalLinkRel: { + value: "noopener noreferrer nofollow", + kind: OptionKind.VIEWER + }, + externalLinkTarget: { + value: 0, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + highlightEditorColors: { + value: "yellow=#FFFF98,green=#53FFBC,blue=#80EBFF,pink=#FFCBE6,red=#FF4F5F," + "yellow_HCM=#FFFFCC,green_HCM=#53FFBC,blue_HCM=#80EBFF,pink_HCM=#F6B8FF,red_HCM=#C50043", + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + historyUpdateUrl: { + value: false, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + ignoreDestinationZoom: { + value: false, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + imageResourcesPath: { + value: "./images/", + kind: OptionKind.VIEWER + }, + maxCanvasPixels: { + value: 2 ** 25, + kind: OptionKind.VIEWER + }, + minDurationToUpdateCanvas: { + value: 500, + kind: OptionKind.VIEWER + }, + forcePageColors: { + value: false, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + pageColorsBackground: { + value: "Canvas", + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + pageColorsForeground: { + value: "CanvasText", + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + pdfBugEnabled: { + value: false, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + printResolution: { + value: 150, + kind: OptionKind.VIEWER + }, + sidebarViewOnLoad: { + value: -1, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + scrollModeOnLoad: { + value: -1, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + spreadModeOnLoad: { + value: -1, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + textLayerMode: { + value: 1, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + viewerCssTheme: { + value: 0, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + viewOnLoad: { + value: 0, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + cMapPacked: { + value: true, + kind: OptionKind.API + }, + cMapUrl: { + value: "../web/cmaps/", + kind: OptionKind.API + }, + disableAutoFetch: { + value: false, + kind: OptionKind.API + OptionKind.PREFERENCE + }, + disableFontFace: { + value: false, + kind: OptionKind.API + OptionKind.PREFERENCE + }, + disableRange: { + value: false, + kind: OptionKind.API + OptionKind.PREFERENCE + }, + disableStream: { + value: false, + kind: OptionKind.API + OptionKind.PREFERENCE + }, + docBaseUrl: { + value: "", + kind: OptionKind.API + }, + enableHWA: { + value: true, + kind: OptionKind.API + OptionKind.VIEWER + OptionKind.PREFERENCE + }, + enableXfa: { + value: true, + kind: OptionKind.API + OptionKind.PREFERENCE + }, + fontExtraProperties: { + value: false, + kind: OptionKind.API + }, + iccUrl: { + value: "../web/iccs/", + kind: OptionKind.API + }, + isEvalSupported: { + value: true, + kind: OptionKind.API + }, + isOffscreenCanvasSupported: { + value: true, + kind: OptionKind.API + }, + maxImageSize: { + value: -1, + kind: OptionKind.API + }, + pdfBug: { + value: false, + kind: OptionKind.API + }, + standardFontDataUrl: { + value: "../web/standard_fonts/", + kind: OptionKind.API + }, + useSystemFonts: { + value: undefined, + kind: OptionKind.API, + type: Type.BOOLEAN + Type.UNDEFINED + }, + verbosity: { + value: 1, + kind: OptionKind.API + }, + wasmUrl: { + value: "../web/wasm/", + kind: OptionKind.API + }, + workerPort: { + value: null, + kind: OptionKind.WORKER + }, + workerSrc: { + value: "../build/pdf.worker.mjs", + kind: OptionKind.WORKER + } +}; +{ + defaultOptions.defaultUrl = { + value: "compressed.tracemonkey-pldi-09.pdf", + kind: OptionKind.VIEWER + }; + defaultOptions.sandboxBundleSrc = { + value: "../build/pdf.sandbox.mjs", + kind: OptionKind.VIEWER + }; + defaultOptions.enableFakeMLManager = { + value: true, + kind: OptionKind.VIEWER + }; +} +{ + defaultOptions.disablePreferences = { + value: false, + kind: OptionKind.VIEWER + }; +} +class AppOptions { + static eventBus; + static #opts = new Map(); + static { + for (const name in defaultOptions) { + this.#opts.set(name, defaultOptions[name].value); + } + for (const [name, value] of compatParams) { + this.#opts.set(name, value); + } + this._hasInvokedSet = false; + this._checkDisablePreferences = () => { + if (this.get("disablePreferences")) { + return true; + } + if (this._hasInvokedSet) { + console.warn("The Preferences may override manually set AppOptions; " + 'please use the "disablePreferences"-option to prevent that.'); + } + return false; + }; + } + static get(name) { + return this.#opts.get(name); + } + static getAll(kind = null, defaultOnly = false) { + const options = Object.create(null); + for (const name in defaultOptions) { + const defaultOpt = defaultOptions[name]; + if (kind && !(kind & defaultOpt.kind)) { + continue; + } + options[name] = !defaultOnly ? this.#opts.get(name) : defaultOpt.value; + } + return options; + } + static set(name, value) { + this.setAll({ + [name]: value + }); + } + static setAll(options, prefs = false) { + this._hasInvokedSet ||= true; + let events; + for (const name in options) { + const defaultOpt = defaultOptions[name], + userOpt = options[name]; + if (!defaultOpt || !(typeof userOpt === typeof defaultOpt.value || Type[(typeof userOpt).toUpperCase()] & defaultOpt.type)) { + continue; + } + const { + kind + } = defaultOpt; + if (prefs && !(kind & OptionKind.BROWSER || kind & OptionKind.PREFERENCE)) { + continue; + } + if (this.eventBus && kind & OptionKind.EVENT_DISPATCH) { + (events ||= new Map()).set(name, userOpt); + } + this.#opts.set(name, userOpt); + } + if (events) { + for (const [name, value] of events) { + this.eventBus.dispatch(name.toLowerCase(), { + source: this, + value + }); + } + } + } +} + +;// ./web/pdf_link_service.js + + +const DEFAULT_LINK_REL = "noopener noreferrer nofollow"; +const LinkTarget = { + NONE: 0, + SELF: 1, + BLANK: 2, + PARENT: 3, + TOP: 4 +}; +class PDFLinkService { + externalLinkEnabled = true; + constructor({ + eventBus, + externalLinkTarget = null, + externalLinkRel = null, + ignoreDestinationZoom = false + } = {}) { + this.eventBus = eventBus; + this.externalLinkTarget = externalLinkTarget; + this.externalLinkRel = externalLinkRel; + this._ignoreDestinationZoom = ignoreDestinationZoom; + this.baseUrl = null; + this.pdfDocument = null; + this.pdfViewer = null; + this.pdfHistory = null; + } + setDocument(pdfDocument, baseUrl = null) { + this.baseUrl = baseUrl; + this.pdfDocument = pdfDocument; + } + setViewer(pdfViewer) { + this.pdfViewer = pdfViewer; + } + setHistory(pdfHistory) { + this.pdfHistory = pdfHistory; + } + get pagesCount() { + return this.pdfDocument ? this.pdfDocument.numPages : 0; + } + get page() { + return this.pdfDocument ? this.pdfViewer.currentPageNumber : 1; + } + set page(value) { + if (this.pdfDocument) { + this.pdfViewer.currentPageNumber = value; + } + } + get rotation() { + return this.pdfDocument ? this.pdfViewer.pagesRotation : 0; + } + set rotation(value) { + if (this.pdfDocument) { + this.pdfViewer.pagesRotation = value; + } + } + get isInPresentationMode() { + return this.pdfDocument ? this.pdfViewer.isInPresentationMode : false; + } + async goToDestination(dest) { + if (!this.pdfDocument) { + return; + } + let namedDest, explicitDest, pageNumber; + if (typeof dest === "string") { + namedDest = dest; + explicitDest = await this.pdfDocument.getDestination(dest); + } else { + namedDest = null; + explicitDest = await dest; + } + if (!Array.isArray(explicitDest)) { + console.error(`goToDestination: "${explicitDest}" is not a valid destination array, for dest="${dest}".`); + return; + } + const [destRef] = explicitDest; + if (destRef && typeof destRef === "object") { + pageNumber = this.pdfDocument.cachedPageNumber(destRef); + if (!pageNumber) { + try { + pageNumber = (await this.pdfDocument.getPageIndex(destRef)) + 1; + } catch { + console.error(`goToDestination: "${destRef}" is not a valid page reference, for dest="${dest}".`); + return; + } + } + } else if (Number.isInteger(destRef)) { + pageNumber = destRef + 1; + } + if (!pageNumber || pageNumber < 1 || pageNumber > this.pagesCount) { + console.error(`goToDestination: "${pageNumber}" is not a valid page number, for dest="${dest}".`); + return; + } + if (this.pdfHistory) { + this.pdfHistory.pushCurrentPosition(); + this.pdfHistory.push({ + namedDest, + explicitDest, + pageNumber + }); + } + this.pdfViewer.scrollPageIntoView({ + pageNumber, + destArray: explicitDest, + ignoreDestinationZoom: this._ignoreDestinationZoom + }); + const ac = new AbortController(); + this.eventBus._on("textlayerrendered", evt => { + if (evt.pageNumber === pageNumber) { + evt.source.textLayer.div.focus(); + ac.abort(); + } + }, { + signal: ac.signal + }); + } + goToPage(val) { + if (!this.pdfDocument) { + return; + } + const pageNumber = typeof val === "string" && this.pdfViewer.pageLabelToPageNumber(val) || val | 0; + if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.pagesCount)) { + console.error(`PDFLinkService.goToPage: "${val}" is not a valid page.`); + return; + } + if (this.pdfHistory) { + this.pdfHistory.pushCurrentPosition(); + this.pdfHistory.pushPage(pageNumber); + } + this.pdfViewer.scrollPageIntoView({ + pageNumber + }); + } + goToXY(pageNumber, x, y, options = {}) { + this.pdfViewer.scrollPageIntoView({ + pageNumber, + destArray: [null, { + name: "XYZ" + }, x, y], + ignoreDestinationZoom: true, + ...options + }); + } + addLinkAttributes(link, url, newWindow = false) { + if (!url || typeof url !== "string") { + throw new Error('A valid "url" parameter must provided.'); + } + const target = newWindow ? LinkTarget.BLANK : this.externalLinkTarget, + rel = this.externalLinkRel; + if (this.externalLinkEnabled) { + link.href = link.title = url; + } else { + link.href = ""; + link.title = `Disabled: ${url}`; + link.onclick = () => false; + } + let targetStr = ""; + switch (target) { + case LinkTarget.NONE: + break; + case LinkTarget.SELF: + targetStr = "_self"; + break; + case LinkTarget.BLANK: + targetStr = "_blank"; + break; + case LinkTarget.PARENT: + targetStr = "_parent"; + break; + case LinkTarget.TOP: + targetStr = "_top"; + break; + } + link.target = targetStr; + link.rel = typeof rel === "string" ? rel : DEFAULT_LINK_REL; + } + getDestinationHash(dest) { + if (typeof dest === "string") { + if (dest.length > 0) { + return this.getAnchorUrl("#" + escape(dest)); + } + } else if (Array.isArray(dest)) { + const str = JSON.stringify(dest); + if (str.length > 0) { + return this.getAnchorUrl("#" + escape(str)); + } + } + return this.getAnchorUrl(""); + } + getAnchorUrl(anchor) { + return this.baseUrl ? this.baseUrl + anchor : anchor; + } + setHash(hash) { + if (!this.pdfDocument) { + return; + } + let pageNumber, dest; + if (hash.includes("=")) { + const params = parseQueryString(hash); + if (params.has("search")) { + const query = params.get("search").replaceAll('"', ""), + phrase = params.get("phrase") === "true"; + this.eventBus.dispatch("findfromurlhash", { + source: this, + query: phrase ? query : query.match(/\S+/g) + }); + } + if (params.has("page")) { + pageNumber = params.get("page") | 0 || 1; + } + if (params.has("zoom")) { + const zoomArgs = params.get("zoom").split(","); + const zoomArg = zoomArgs[0]; + const zoomArgNumber = parseFloat(zoomArg); + if (!zoomArg.includes("Fit")) { + dest = [null, { + name: "XYZ" + }, zoomArgs.length > 1 ? zoomArgs[1] | 0 : null, zoomArgs.length > 2 ? zoomArgs[2] | 0 : null, zoomArgNumber ? zoomArgNumber / 100 : zoomArg]; + } else if (zoomArg === "Fit" || zoomArg === "FitB") { + dest = [null, { + name: zoomArg + }]; + } else if (zoomArg === "FitH" || zoomArg === "FitBH" || zoomArg === "FitV" || zoomArg === "FitBV") { + dest = [null, { + name: zoomArg + }, zoomArgs.length > 1 ? zoomArgs[1] | 0 : null]; + } else if (zoomArg === "FitR") { + if (zoomArgs.length !== 5) { + console.error('PDFLinkService.setHash: Not enough parameters for "FitR".'); + } else { + dest = [null, { + name: zoomArg + }, zoomArgs[1] | 0, zoomArgs[2] | 0, zoomArgs[3] | 0, zoomArgs[4] | 0]; + } + } else { + console.error(`PDFLinkService.setHash: "${zoomArg}" is not a valid zoom value.`); + } + } + if (dest) { + this.pdfViewer.scrollPageIntoView({ + pageNumber: pageNumber || this.page, + destArray: dest, + allowNegativeOffset: true + }); + } else if (pageNumber) { + this.page = pageNumber; + } + if (params.has("pagemode")) { + this.eventBus.dispatch("pagemode", { + source: this, + mode: params.get("pagemode") + }); + } + if (params.has("nameddest")) { + this.goToDestination(params.get("nameddest")); + } + return; + } + dest = unescape(hash); + try { + dest = JSON.parse(dest); + if (!Array.isArray(dest)) { + dest = dest.toString(); + } + } catch {} + if (typeof dest === "string" || isValidExplicitDest(dest)) { + this.goToDestination(dest); + return; + } + console.error(`PDFLinkService.setHash: "${unescape(hash)}" is not a valid destination.`); + } + executeNamedAction(action) { + if (!this.pdfDocument) { + return; + } + switch (action) { + case "GoBack": + this.pdfHistory?.back(); + break; + case "GoForward": + this.pdfHistory?.forward(); + break; + case "NextPage": + this.pdfViewer.nextPage(); + break; + case "PrevPage": + this.pdfViewer.previousPage(); + break; + case "LastPage": + this.page = this.pagesCount; + break; + case "FirstPage": + this.page = 1; + break; + default: + break; + } + this.eventBus.dispatch("namedaction", { + source: this, + action + }); + } + async executeSetOCGState(action) { + if (!this.pdfDocument) { + return; + } + const pdfDocument = this.pdfDocument, + optionalContentConfig = await this.pdfViewer.optionalContentConfigPromise; + if (pdfDocument !== this.pdfDocument) { + return; + } + optionalContentConfig.setOCGState(action); + this.pdfViewer.optionalContentConfigPromise = Promise.resolve(optionalContentConfig); + } +} +class SimpleLinkService extends PDFLinkService { + setDocument(pdfDocument, baseUrl = null) {} +} + +;// ./web/event_utils.js +const WaitOnType = { + EVENT: "event", + TIMEOUT: "timeout" +}; +async function waitOnEventOrTimeout({ + target, + name, + delay = 0 +}) { + if (typeof target !== "object" || !(name && typeof name === "string") || !(Number.isInteger(delay) && delay >= 0)) { + throw new Error("waitOnEventOrTimeout - invalid parameters."); + } + const { + promise, + resolve + } = Promise.withResolvers(); + const ac = new AbortController(); + function handler(type) { + ac.abort(); + clearTimeout(timeout); + resolve(type); + } + const evtMethod = target instanceof EventBus ? "_on" : "addEventListener"; + target[evtMethod](name, handler.bind(null, WaitOnType.EVENT), { + signal: ac.signal + }); + const timeout = setTimeout(handler.bind(null, WaitOnType.TIMEOUT), delay); + return promise; +} +class EventBus { + #listeners = Object.create(null); + on(eventName, listener, options = null) { + this._on(eventName, listener, { + external: true, + once: options?.once, + signal: options?.signal + }); + } + off(eventName, listener, options = null) { + this._off(eventName, listener); + } + dispatch(eventName, data) { + const eventListeners = this.#listeners[eventName]; + if (!eventListeners || eventListeners.length === 0) { + return; + } + let externalListeners; + for (const { + listener, + external, + once + } of eventListeners.slice(0)) { + if (once) { + this._off(eventName, listener); + } + if (external) { + (externalListeners ||= []).push(listener); + continue; + } + listener(data); + } + if (externalListeners) { + for (const listener of externalListeners) { + listener(data); + } + externalListeners = null; + } + } + _on(eventName, listener, options = null) { + let rmAbort = null; + if (options?.signal instanceof AbortSignal) { + const { + signal + } = options; + if (signal.aborted) { + console.error("Cannot use an `aborted` signal."); + return; + } + const onAbort = () => this._off(eventName, listener); + rmAbort = () => signal.removeEventListener("abort", onAbort); + signal.addEventListener("abort", onAbort); + } + const eventListeners = this.#listeners[eventName] ||= []; + eventListeners.push({ + listener, + external: options?.external === true, + once: options?.once === true, + rmAbort + }); + } + _off(eventName, listener, options = null) { + const eventListeners = this.#listeners[eventName]; + if (!eventListeners) { + return; + } + for (let i = 0, ii = eventListeners.length; i < ii; i++) { + const evt = eventListeners[i]; + if (evt.listener === listener) { + evt.rmAbort?.(); + eventListeners.splice(i, 1); + return; + } + } + } +} +class FirefoxEventBus extends EventBus { + #externalServices; + #globalEventNames; + #isInAutomation; + constructor(globalEventNames, externalServices, isInAutomation) { + super(); + this.#globalEventNames = globalEventNames; + this.#externalServices = externalServices; + this.#isInAutomation = isInAutomation; + } + dispatch(eventName, data) { + throw new Error("Not implemented: FirefoxEventBus.dispatch"); + } +} + +;// ./web/external_services.js +class BaseExternalServices { + updateFindControlState(data) {} + updateFindMatchesCount(data) {} + initPassiveLoading() {} + reportTelemetry(data) {} + reportText(data) {} + async createL10n() { + throw new Error("Not implemented: createL10n"); + } + createScripting() { + throw new Error("Not implemented: createScripting"); + } + createSignatureStorage() { + throw new Error("Not implemented: createSignatureStorage"); + } + updateEditorStates(data) { + throw new Error("Not implemented: updateEditorStates"); + } + dispatchGlobalEvent(_event) {} +} + +;// ./web/preferences.js + +class BasePreferences { + #defaults = Object.freeze({ + altTextLearnMoreUrl: "", + annotationEditorMode: 0, + annotationMode: 2, + capCanvasAreaFactor: 200, + commentLearnMoreUrl: "", + cursorToolOnLoad: 0, + defaultZoomDelay: 400, + defaultZoomValue: "", + disablePageLabels: false, + enableAltText: false, + enableAltTextModelDownload: true, + enableAutoLinking: true, + enableComment: false, + enableGuessAltText: true, + enableHighlightFloatingButton: false, + enableNewAltTextWhenAddingImage: true, + enableOptimizedPartialRendering: false, + enablePermissions: false, + enablePrintAutoRotate: true, + enableScripting: true, + enableSignatureEditor: false, + enableUpdatedAddImage: false, + externalLinkTarget: 0, + highlightEditorColors: "yellow=#FFFF98,green=#53FFBC,blue=#80EBFF,pink=#FFCBE6,red=#FF4F5F,yellow_HCM=#FFFFCC,green_HCM=#53FFBC,blue_HCM=#80EBFF,pink_HCM=#F6B8FF,red_HCM=#C50043", + historyUpdateUrl: false, + ignoreDestinationZoom: false, + forcePageColors: false, + pageColorsBackground: "Canvas", + pageColorsForeground: "CanvasText", + pdfBugEnabled: false, + sidebarViewOnLoad: -1, + scrollModeOnLoad: -1, + spreadModeOnLoad: -1, + textLayerMode: 1, + viewerCssTheme: 0, + viewOnLoad: 0, + disableAutoFetch: false, + disableFontFace: false, + disableRange: false, + disableStream: false, + enableHWA: true, + enableXfa: true + }); + #initializedPromise = null; + constructor() { + this.#initializedPromise = this._readFromStorage(this.#defaults).then(({ + browserPrefs, + prefs + }) => { + if (AppOptions._checkDisablePreferences()) { + return; + } + AppOptions.setAll({ + ...browserPrefs, + ...prefs + }, true); + }); + } + async _writeToStorage(prefObj) { + throw new Error("Not implemented: _writeToStorage"); + } + async _readFromStorage(prefObj) { + throw new Error("Not implemented: _readFromStorage"); + } + async reset() { + await this.#initializedPromise; + AppOptions.setAll(this.#defaults, true); + await this._writeToStorage(this.#defaults); + } + async set(name, value) { + await this.#initializedPromise; + AppOptions.setAll({ + [name]: value + }, true); + await this._writeToStorage(AppOptions.getAll(OptionKind.PREFERENCE)); + } + async get(name) { + await this.#initializedPromise; + return AppOptions.get(name); + } + get initializedPromise() { + return this.#initializedPromise; + } +} + +;// ./node_modules/@fluent/bundle/esm/types.js +class FluentType { + constructor(value) { + this.value = value; + } + valueOf() { + return this.value; + } +} +class FluentNone extends FluentType { + constructor(value = "???") { + super(value); + } + toString(scope) { + return `{${this.value}}`; + } +} +class FluentNumber extends FluentType { + constructor(value, opts = {}) { + super(value); + this.opts = opts; + } + toString(scope) { + if (scope) { + try { + const nf = scope.memoizeIntlObject(Intl.NumberFormat, this.opts); + return nf.format(this.value); + } catch (err) { + scope.reportError(err); + } + } + return this.value.toString(10); + } +} +class FluentDateTime extends FluentType { + static supportsValue(value) { + if (typeof value === "number") return true; + if (value instanceof Date) return true; + if (value instanceof FluentType) return FluentDateTime.supportsValue(value.valueOf()); + if ("Temporal" in globalThis) { + const _Temporal = globalThis.Temporal; + if (value instanceof _Temporal.Instant || value instanceof _Temporal.PlainDateTime || value instanceof _Temporal.PlainDate || value instanceof _Temporal.PlainMonthDay || value instanceof _Temporal.PlainTime || value instanceof _Temporal.PlainYearMonth) { + return true; + } + } + return false; + } + constructor(value, opts = {}) { + if (value instanceof FluentDateTime) { + opts = { + ...value.opts, + ...opts + }; + value = value.value; + } else if (value instanceof FluentType) { + value = value.valueOf(); + } + if (typeof value === "object" && "calendarId" in value && opts.calendar === undefined) { + opts = { + ...opts, + calendar: value.calendarId + }; + } + super(value); + this.opts = opts; + } + [Symbol.toPrimitive](hint) { + return hint === "string" ? this.toString() : this.toNumber(); + } + toNumber() { + const value = this.value; + if (typeof value === "number") return value; + if (value instanceof Date) return value.getTime(); + if ("epochMilliseconds" in value) { + return value.epochMilliseconds; + } + if ("toZonedDateTime" in value) { + return value.toZonedDateTime("UTC").epochMilliseconds; + } + throw new TypeError("Unwrapping a non-number value as a number"); + } + toString(scope) { + if (scope) { + try { + const dtf = scope.memoizeIntlObject(Intl.DateTimeFormat, this.opts); + return dtf.format(this.value); + } catch (err) { + scope.reportError(err); + } + } + if (typeof this.value === "number" || this.value instanceof Date) { + return new Date(this.value).toISOString(); + } + return this.value.toString(); + } +} +;// ./node_modules/@fluent/bundle/esm/resolver.js + +const MAX_PLACEABLES = 100; +const FSI = "\u2068"; +const PDI = "\u2069"; +function match(scope, selector, key) { + if (key === selector) { + return true; + } + if (key instanceof FluentNumber && selector instanceof FluentNumber && key.value === selector.value) { + return true; + } + if (selector instanceof FluentNumber && typeof key === "string") { + let category = scope.memoizeIntlObject(Intl.PluralRules, selector.opts).select(selector.value); + if (key === category) { + return true; + } + } + return false; +} +function getDefault(scope, variants, star) { + if (variants[star]) { + return resolvePattern(scope, variants[star].value); + } + scope.reportError(new RangeError("No default")); + return new FluentNone(); +} +function getArguments(scope, args) { + const positional = []; + const named = Object.create(null); + for (const arg of args) { + if (arg.type === "narg") { + named[arg.name] = resolveExpression(scope, arg.value); + } else { + positional.push(resolveExpression(scope, arg)); + } + } + return { + positional, + named + }; +} +function resolveExpression(scope, expr) { + switch (expr.type) { + case "str": + return expr.value; + case "num": + return new FluentNumber(expr.value, { + minimumFractionDigits: expr.precision + }); + case "var": + return resolveVariableReference(scope, expr); + case "mesg": + return resolveMessageReference(scope, expr); + case "term": + return resolveTermReference(scope, expr); + case "func": + return resolveFunctionReference(scope, expr); + case "select": + return resolveSelectExpression(scope, expr); + default: + return new FluentNone(); + } +} +function resolveVariableReference(scope, { + name +}) { + let arg; + if (scope.params) { + if (Object.prototype.hasOwnProperty.call(scope.params, name)) { + arg = scope.params[name]; + } else { + return new FluentNone(`$${name}`); + } + } else if (scope.args && Object.prototype.hasOwnProperty.call(scope.args, name)) { + arg = scope.args[name]; + } else { + scope.reportError(new ReferenceError(`Unknown variable: $${name}`)); + return new FluentNone(`$${name}`); + } + if (arg instanceof FluentType) { + return arg; + } + switch (typeof arg) { + case "string": + return arg; + case "number": + return new FluentNumber(arg); + case "object": + if (FluentDateTime.supportsValue(arg)) { + return new FluentDateTime(arg); + } + default: + scope.reportError(new TypeError(`Variable type not supported: $${name}, ${typeof arg}`)); + return new FluentNone(`$${name}`); + } +} +function resolveMessageReference(scope, { + name, + attr +}) { + const message = scope.bundle._messages.get(name); + if (!message) { + scope.reportError(new ReferenceError(`Unknown message: ${name}`)); + return new FluentNone(name); + } + if (attr) { + const attribute = message.attributes[attr]; + if (attribute) { + return resolvePattern(scope, attribute); + } + scope.reportError(new ReferenceError(`Unknown attribute: ${attr}`)); + return new FluentNone(`${name}.${attr}`); + } + if (message.value) { + return resolvePattern(scope, message.value); + } + scope.reportError(new ReferenceError(`No value: ${name}`)); + return new FluentNone(name); +} +function resolveTermReference(scope, { + name, + attr, + args +}) { + const id = `-${name}`; + const term = scope.bundle._terms.get(id); + if (!term) { + scope.reportError(new ReferenceError(`Unknown term: ${id}`)); + return new FluentNone(id); + } + if (attr) { + const attribute = term.attributes[attr]; + if (attribute) { + scope.params = getArguments(scope, args).named; + const resolved = resolvePattern(scope, attribute); + scope.params = null; + return resolved; + } + scope.reportError(new ReferenceError(`Unknown attribute: ${attr}`)); + return new FluentNone(`${id}.${attr}`); + } + scope.params = getArguments(scope, args).named; + const resolved = resolvePattern(scope, term.value); + scope.params = null; + return resolved; +} +function resolveFunctionReference(scope, { + name, + args +}) { + let func = scope.bundle._functions[name]; + if (!func) { + scope.reportError(new ReferenceError(`Unknown function: ${name}()`)); + return new FluentNone(`${name}()`); + } + if (typeof func !== "function") { + scope.reportError(new TypeError(`Function ${name}() is not callable`)); + return new FluentNone(`${name}()`); + } + try { + let resolved = getArguments(scope, args); + return func(resolved.positional, resolved.named); + } catch (err) { + scope.reportError(err); + return new FluentNone(`${name}()`); + } +} +function resolveSelectExpression(scope, { + selector, + variants, + star +}) { + let sel = resolveExpression(scope, selector); + if (sel instanceof FluentNone) { + return getDefault(scope, variants, star); + } + for (const variant of variants) { + const key = resolveExpression(scope, variant.key); + if (match(scope, sel, key)) { + return resolvePattern(scope, variant.value); + } + } + return getDefault(scope, variants, star); +} +function resolveComplexPattern(scope, ptn) { + if (scope.dirty.has(ptn)) { + scope.reportError(new RangeError("Cyclic reference")); + return new FluentNone(); + } + scope.dirty.add(ptn); + const result = []; + const useIsolating = scope.bundle._useIsolating && ptn.length > 1; + for (const elem of ptn) { + if (typeof elem === "string") { + result.push(scope.bundle._transform(elem)); + continue; + } + scope.placeables++; + if (scope.placeables > MAX_PLACEABLES) { + scope.dirty.delete(ptn); + throw new RangeError(`Too many placeables expanded: ${scope.placeables}, ` + `max allowed is ${MAX_PLACEABLES}`); + } + if (useIsolating) { + result.push(FSI); + } + result.push(resolveExpression(scope, elem).toString(scope)); + if (useIsolating) { + result.push(PDI); + } + } + scope.dirty.delete(ptn); + return result.join(""); +} +function resolvePattern(scope, value) { + if (typeof value === "string") { + return scope.bundle._transform(value); + } + return resolveComplexPattern(scope, value); +} +;// ./node_modules/@fluent/bundle/esm/scope.js +class Scope { + constructor(bundle, errors, args) { + this.dirty = new WeakSet(); + this.params = null; + this.placeables = 0; + this.bundle = bundle; + this.errors = errors; + this.args = args; + } + reportError(error) { + if (!this.errors || !(error instanceof Error)) { + throw error; + } + this.errors.push(error); + } + memoizeIntlObject(ctor, opts) { + let cache = this.bundle._intls.get(ctor); + if (!cache) { + cache = {}; + this.bundle._intls.set(ctor, cache); + } + let id = JSON.stringify(opts); + if (!cache[id]) { + cache[id] = new ctor(this.bundle.locales, opts); + } + return cache[id]; + } +} +;// ./node_modules/@fluent/bundle/esm/builtins.js + +function values(opts, allowed) { + const unwrapped = Object.create(null); + for (const [name, opt] of Object.entries(opts)) { + if (allowed.includes(name)) { + unwrapped[name] = opt.valueOf(); + } + } + return unwrapped; +} +const NUMBER_ALLOWED = ["unitDisplay", "currencyDisplay", "useGrouping", "minimumIntegerDigits", "minimumFractionDigits", "maximumFractionDigits", "minimumSignificantDigits", "maximumSignificantDigits"]; +function NUMBER(args, opts) { + let arg = args[0]; + if (arg instanceof FluentNone) { + return new FluentNone(`NUMBER(${arg.valueOf()})`); + } + if (arg instanceof FluentNumber) { + return new FluentNumber(arg.valueOf(), { + ...arg.opts, + ...values(opts, NUMBER_ALLOWED) + }); + } + if (arg instanceof FluentDateTime) { + return new FluentNumber(arg.toNumber(), { + ...values(opts, NUMBER_ALLOWED) + }); + } + throw new TypeError("Invalid argument to NUMBER"); +} +const DATETIME_ALLOWED = ["dateStyle", "timeStyle", "fractionalSecondDigits", "dayPeriod", "hour12", "weekday", "era", "year", "month", "day", "hour", "minute", "second", "timeZoneName"]; +function DATETIME(args, opts) { + let arg = args[0]; + if (arg instanceof FluentNone) { + return new FluentNone(`DATETIME(${arg.valueOf()})`); + } + if (arg instanceof FluentDateTime || arg instanceof FluentNumber) { + return new FluentDateTime(arg, values(opts, DATETIME_ALLOWED)); + } + throw new TypeError("Invalid argument to DATETIME"); +} +;// ./node_modules/@fluent/bundle/esm/memoizer.js +const cache = new Map(); +function getMemoizerForLocale(locales) { + const stringLocale = Array.isArray(locales) ? locales.join(" ") : locales; + let memoizer = cache.get(stringLocale); + if (memoizer === undefined) { + memoizer = new Map(); + cache.set(stringLocale, memoizer); + } + return memoizer; +} +;// ./node_modules/@fluent/bundle/esm/bundle.js + + + + + +class FluentBundle { + constructor(locales, { + functions, + useIsolating = true, + transform = v => v + } = {}) { + this._terms = new Map(); + this._messages = new Map(); + this.locales = Array.isArray(locales) ? locales : [locales]; + this._functions = { + NUMBER: NUMBER, + DATETIME: DATETIME, + ...functions + }; + this._useIsolating = useIsolating; + this._transform = transform; + this._intls = getMemoizerForLocale(locales); + } + hasMessage(id) { + return this._messages.has(id); + } + getMessage(id) { + return this._messages.get(id); + } + addResource(res, { + allowOverrides = false + } = {}) { + const errors = []; + for (let i = 0; i < res.body.length; i++) { + let entry = res.body[i]; + if (entry.id.startsWith("-")) { + if (allowOverrides === false && this._terms.has(entry.id)) { + errors.push(new Error(`Attempt to override an existing term: "${entry.id}"`)); + continue; + } + this._terms.set(entry.id, entry); + } else { + if (allowOverrides === false && this._messages.has(entry.id)) { + errors.push(new Error(`Attempt to override an existing message: "${entry.id}"`)); + continue; + } + this._messages.set(entry.id, entry); + } + } + return errors; + } + formatPattern(pattern, args = null, errors = null) { + if (typeof pattern === "string") { + return this._transform(pattern); + } + let scope = new Scope(this, errors, args); + try { + let value = resolveComplexPattern(scope, pattern); + return value.toString(scope); + } catch (err) { + if (scope.errors && err instanceof Error) { + scope.errors.push(err); + return new FluentNone().toString(scope); + } + throw err; + } + } +} +;// ./node_modules/@fluent/bundle/esm/resource.js +const RE_MESSAGE_START = /^(-?[a-zA-Z][\w-]*) *= */gm; +const RE_ATTRIBUTE_START = /\.([a-zA-Z][\w-]*) *= */y; +const RE_VARIANT_START = /\*?\[/y; +const RE_NUMBER_LITERAL = /(-?[0-9]+(?:\.([0-9]+))?)/y; +const RE_IDENTIFIER = /([a-zA-Z][\w-]*)/y; +const RE_REFERENCE = /([$-])?([a-zA-Z][\w-]*)(?:\.([a-zA-Z][\w-]*))?/y; +const RE_FUNCTION_NAME = /^[A-Z][A-Z0-9_-]*$/; +const RE_TEXT_RUN = /([^{}\n\r]+)/y; +const RE_STRING_RUN = /([^\\"\n\r]*)/y; +const RE_STRING_ESCAPE = /\\([\\"])/y; +const RE_UNICODE_ESCAPE = /\\u([a-fA-F0-9]{4})|\\U([a-fA-F0-9]{6})/y; +const RE_LEADING_NEWLINES = /^\n+/; +const RE_TRAILING_SPACES = / +$/; +const RE_BLANK_LINES = / *\r?\n/g; +const RE_INDENT = /( *)$/; +const TOKEN_BRACE_OPEN = /{\s*/y; +const TOKEN_BRACE_CLOSE = /\s*}/y; +const TOKEN_BRACKET_OPEN = /\[\s*/y; +const TOKEN_BRACKET_CLOSE = /\s*] */y; +const TOKEN_PAREN_OPEN = /\s*\(\s*/y; +const TOKEN_ARROW = /\s*->\s*/y; +const TOKEN_COLON = /\s*:\s*/y; +const TOKEN_COMMA = /\s*,?\s*/y; +const TOKEN_BLANK = /\s+/y; +class FluentResource { + constructor(source) { + this.body = []; + RE_MESSAGE_START.lastIndex = 0; + let cursor = 0; + while (true) { + let next = RE_MESSAGE_START.exec(source); + if (next === null) { + break; + } + cursor = RE_MESSAGE_START.lastIndex; + try { + this.body.push(parseMessage(next[1])); + } catch (err) { + if (err instanceof SyntaxError) { + continue; + } + throw err; + } + } + function test(re) { + re.lastIndex = cursor; + return re.test(source); + } + function consumeChar(char, errorClass) { + if (source[cursor] === char) { + cursor++; + return true; + } + if (errorClass) { + throw new errorClass(`Expected ${char}`); + } + return false; + } + function consumeToken(re, errorClass) { + if (test(re)) { + cursor = re.lastIndex; + return true; + } + if (errorClass) { + throw new errorClass(`Expected ${re.toString()}`); + } + return false; + } + function match(re) { + re.lastIndex = cursor; + let result = re.exec(source); + if (result === null) { + throw new SyntaxError(`Expected ${re.toString()}`); + } + cursor = re.lastIndex; + return result; + } + function match1(re) { + return match(re)[1]; + } + function parseMessage(id) { + let value = parsePattern(); + let attributes = parseAttributes(); + if (value === null && Object.keys(attributes).length === 0) { + throw new SyntaxError("Expected message value or attributes"); + } + return { + id, + value, + attributes + }; + } + function parseAttributes() { + let attrs = Object.create(null); + while (test(RE_ATTRIBUTE_START)) { + let name = match1(RE_ATTRIBUTE_START); + let value = parsePattern(); + if (value === null) { + throw new SyntaxError("Expected attribute value"); + } + attrs[name] = value; + } + return attrs; + } + function parsePattern() { + let first; + if (test(RE_TEXT_RUN)) { + first = match1(RE_TEXT_RUN); + } + if (source[cursor] === "{" || source[cursor] === "}") { + return parsePatternElements(first ? [first] : [], Infinity); + } + let indent = parseIndent(); + if (indent) { + if (first) { + return parsePatternElements([first, indent], indent.length); + } + indent.value = trim(indent.value, RE_LEADING_NEWLINES); + return parsePatternElements([indent], indent.length); + } + if (first) { + return trim(first, RE_TRAILING_SPACES); + } + return null; + } + function parsePatternElements(elements = [], commonIndent) { + while (true) { + if (test(RE_TEXT_RUN)) { + elements.push(match1(RE_TEXT_RUN)); + continue; + } + if (source[cursor] === "{") { + elements.push(parsePlaceable()); + continue; + } + if (source[cursor] === "}") { + throw new SyntaxError("Unbalanced closing brace"); + } + let indent = parseIndent(); + if (indent) { + elements.push(indent); + commonIndent = Math.min(commonIndent, indent.length); + continue; + } + break; + } + let lastIndex = elements.length - 1; + let lastElement = elements[lastIndex]; + if (typeof lastElement === "string") { + elements[lastIndex] = trim(lastElement, RE_TRAILING_SPACES); + } + let baked = []; + for (let element of elements) { + if (element instanceof Indent) { + element = element.value.slice(0, element.value.length - commonIndent); + } + if (element) { + baked.push(element); + } + } + return baked; + } + function parsePlaceable() { + consumeToken(TOKEN_BRACE_OPEN, SyntaxError); + let selector = parseInlineExpression(); + if (consumeToken(TOKEN_BRACE_CLOSE)) { + return selector; + } + if (consumeToken(TOKEN_ARROW)) { + let variants = parseVariants(); + consumeToken(TOKEN_BRACE_CLOSE, SyntaxError); + return { + type: "select", + selector, + ...variants + }; + } + throw new SyntaxError("Unclosed placeable"); + } + function parseInlineExpression() { + if (source[cursor] === "{") { + return parsePlaceable(); + } + if (test(RE_REFERENCE)) { + let [, sigil, name, attr = null] = match(RE_REFERENCE); + if (sigil === "$") { + return { + type: "var", + name + }; + } + if (consumeToken(TOKEN_PAREN_OPEN)) { + let args = parseArguments(); + if (sigil === "-") { + return { + type: "term", + name, + attr, + args + }; + } + if (RE_FUNCTION_NAME.test(name)) { + return { + type: "func", + name, + args + }; + } + throw new SyntaxError("Function names must be all upper-case"); + } + if (sigil === "-") { + return { + type: "term", + name, + attr, + args: [] + }; + } + return { + type: "mesg", + name, + attr + }; + } + return parseLiteral(); + } + function parseArguments() { + let args = []; + while (true) { + switch (source[cursor]) { + case ")": + cursor++; + return args; + case undefined: + throw new SyntaxError("Unclosed argument list"); + } + args.push(parseArgument()); + consumeToken(TOKEN_COMMA); + } + } + function parseArgument() { + let expr = parseInlineExpression(); + if (expr.type !== "mesg") { + return expr; + } + if (consumeToken(TOKEN_COLON)) { + return { + type: "narg", + name: expr.name, + value: parseLiteral() + }; + } + return expr; + } + function parseVariants() { + let variants = []; + let count = 0; + let star; + while (test(RE_VARIANT_START)) { + if (consumeChar("*")) { + star = count; + } + let key = parseVariantKey(); + let value = parsePattern(); + if (value === null) { + throw new SyntaxError("Expected variant value"); + } + variants[count++] = { + key, + value + }; + } + if (count === 0) { + return null; + } + if (star === undefined) { + throw new SyntaxError("Expected default variant"); + } + return { + variants, + star + }; + } + function parseVariantKey() { + consumeToken(TOKEN_BRACKET_OPEN, SyntaxError); + let key; + if (test(RE_NUMBER_LITERAL)) { + key = parseNumberLiteral(); + } else { + key = { + type: "str", + value: match1(RE_IDENTIFIER) + }; + } + consumeToken(TOKEN_BRACKET_CLOSE, SyntaxError); + return key; + } + function parseLiteral() { + if (test(RE_NUMBER_LITERAL)) { + return parseNumberLiteral(); + } + if (source[cursor] === '"') { + return parseStringLiteral(); + } + throw new SyntaxError("Invalid expression"); + } + function parseNumberLiteral() { + let [, value, fraction = ""] = match(RE_NUMBER_LITERAL); + let precision = fraction.length; + return { + type: "num", + value: parseFloat(value), + precision + }; + } + function parseStringLiteral() { + consumeChar('"', SyntaxError); + let value = ""; + while (true) { + value += match1(RE_STRING_RUN); + if (source[cursor] === "\\") { + value += parseEscapeSequence(); + continue; + } + if (consumeChar('"')) { + return { + type: "str", + value + }; + } + throw new SyntaxError("Unclosed string literal"); + } + } + function parseEscapeSequence() { + if (test(RE_STRING_ESCAPE)) { + return match1(RE_STRING_ESCAPE); + } + if (test(RE_UNICODE_ESCAPE)) { + let [, codepoint4, codepoint6] = match(RE_UNICODE_ESCAPE); + let codepoint = parseInt(codepoint4 || codepoint6, 16); + return codepoint <= 0xd7ff || 0xe000 <= codepoint ? String.fromCodePoint(codepoint) : "�"; + } + throw new SyntaxError("Unknown escape sequence"); + } + function parseIndent() { + let start = cursor; + consumeToken(TOKEN_BLANK); + switch (source[cursor]) { + case ".": + case "[": + case "*": + case "}": + case undefined: + return false; + case "{": + return makeIndent(source.slice(start, cursor)); + } + if (source[cursor - 1] === " ") { + return makeIndent(source.slice(start, cursor)); + } + return false; + } + function trim(text, re) { + return text.replace(re, ""); + } + function makeIndent(blank) { + let value = blank.replace(RE_BLANK_LINES, "\n"); + let length = RE_INDENT.exec(blank)[1].length; + return new Indent(value, length); + } + } +} +class Indent { + constructor(value, length) { + this.value = value; + this.length = length; + } +} +;// ./node_modules/@fluent/bundle/esm/index.js + + + +;// ./node_modules/@fluent/dom/esm/overlay.js +const reOverlay = /<|&#?\w+;/; +const TEXT_LEVEL_ELEMENTS = { + "http://www.w3.org/1999/xhtml": ["em", "strong", "small", "s", "cite", "q", "dfn", "abbr", "data", "time", "code", "var", "samp", "kbd", "sub", "sup", "i", "b", "u", "mark", "bdi", "bdo", "span", "br", "wbr"] +}; +const LOCALIZABLE_ATTRIBUTES = { + "http://www.w3.org/1999/xhtml": { + global: ["title", "aria-description", "aria-label", "aria-valuetext"], + a: ["download"], + area: ["download", "alt"], + input: ["alt", "placeholder"], + menuitem: ["label"], + menu: ["label"], + optgroup: ["label"], + option: ["label"], + track: ["label"], + img: ["alt"], + textarea: ["placeholder"], + th: ["abbr"] + }, + "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul": { + global: ["accesskey", "aria-label", "aria-valuetext", "label", "title", "tooltiptext"], + description: ["value"], + key: ["key", "keycode"], + label: ["value"], + textbox: ["placeholder", "value"] + } +}; +function translateElement(element, translation) { + const { + value + } = translation; + if (typeof value === "string") { + if (element.localName === "title" && element.namespaceURI === "http://www.w3.org/1999/xhtml") { + element.textContent = value; + } else if (!reOverlay.test(value)) { + element.textContent = value; + } else { + const templateElement = element.ownerDocument.createElementNS("http://www.w3.org/1999/xhtml", "template"); + templateElement.innerHTML = value; + overlayChildNodes(templateElement.content, element); + } + } + overlayAttributes(translation, element); +} +function overlayChildNodes(fromFragment, toElement) { + for (const childNode of fromFragment.childNodes) { + if (childNode.nodeType === childNode.TEXT_NODE) { + continue; + } + if (childNode.hasAttribute("data-l10n-name")) { + const sanitized = getNodeForNamedElement(toElement, childNode); + fromFragment.replaceChild(sanitized, childNode); + continue; + } + if (isElementAllowed(childNode)) { + const sanitized = createSanitizedElement(childNode); + fromFragment.replaceChild(sanitized, childNode); + continue; + } + console.warn(`An element of forbidden type "${childNode.localName}" was found in ` + "the translation. Only safe text-level elements and elements with " + "data-l10n-name are allowed."); + fromFragment.replaceChild(createTextNodeFromTextContent(childNode), childNode); + } + toElement.textContent = ""; + toElement.appendChild(fromFragment); +} +function hasAttribute(attributes, name) { + if (!attributes) { + return false; + } + for (let attr of attributes) { + if (attr.name === name) { + return true; + } + } + return false; +} +function overlayAttributes(fromElement, toElement) { + const explicitlyAllowed = toElement.hasAttribute("data-l10n-attrs") ? toElement.getAttribute("data-l10n-attrs").split(",").map(i => i.trim()) : null; + for (const attr of Array.from(toElement.attributes)) { + if (isAttrNameLocalizable(attr.name, toElement, explicitlyAllowed) && !hasAttribute(fromElement.attributes, attr.name)) { + toElement.removeAttribute(attr.name); + } + } + if (!fromElement.attributes) { + return; + } + for (const attr of Array.from(fromElement.attributes)) { + if (isAttrNameLocalizable(attr.name, toElement, explicitlyAllowed) && toElement.getAttribute(attr.name) !== attr.value) { + toElement.setAttribute(attr.name, attr.value); + } + } +} +function getNodeForNamedElement(sourceElement, translatedChild) { + const childName = translatedChild.getAttribute("data-l10n-name"); + const sourceChild = sourceElement.querySelector(`[data-l10n-name="${childName}"]`); + if (!sourceChild) { + console.warn(`An element named "${childName}" wasn't found in the source.`); + return createTextNodeFromTextContent(translatedChild); + } + if (sourceChild.localName !== translatedChild.localName) { + console.warn(`An element named "${childName}" was found in the translation ` + `but its type ${translatedChild.localName} didn't match the ` + `element found in the source (${sourceChild.localName}).`); + return createTextNodeFromTextContent(translatedChild); + } + sourceElement.removeChild(sourceChild); + const clone = sourceChild.cloneNode(false); + return shallowPopulateUsing(translatedChild, clone); +} +function createSanitizedElement(element) { + const clone = element.ownerDocument.createElement(element.localName); + return shallowPopulateUsing(element, clone); +} +function createTextNodeFromTextContent(element) { + return element.ownerDocument.createTextNode(element.textContent); +} +function isElementAllowed(element) { + const allowed = TEXT_LEVEL_ELEMENTS[element.namespaceURI]; + return allowed && allowed.includes(element.localName); +} +function isAttrNameLocalizable(name, element, explicitlyAllowed = null) { + if (explicitlyAllowed && explicitlyAllowed.includes(name)) { + return true; + } + const allowed = LOCALIZABLE_ATTRIBUTES[element.namespaceURI]; + if (!allowed) { + return false; + } + const attrName = name.toLowerCase(); + const elemName = element.localName; + if (allowed.global.includes(attrName)) { + return true; + } + if (!allowed[elemName]) { + return false; + } + if (allowed[elemName].includes(attrName)) { + return true; + } + if (element.namespaceURI === "http://www.w3.org/1999/xhtml" && elemName === "input" && attrName === "value") { + const type = element.type.toLowerCase(); + if (type === "submit" || type === "button" || type === "reset") { + return true; + } + } + return false; +} +function shallowPopulateUsing(fromElement, toElement) { + toElement.textContent = fromElement.textContent; + overlayAttributes(fromElement, toElement); + return toElement; +} +;// ./node_modules/cached-iterable/src/cached_iterable.mjs +class CachedIterable extends Array { + static from(iterable) { + if (iterable instanceof this) { + return iterable; + } + return new this(iterable); + } +} +;// ./node_modules/cached-iterable/src/cached_sync_iterable.mjs + +class CachedSyncIterable extends CachedIterable { + constructor(iterable) { + super(); + if (Symbol.iterator in Object(iterable)) { + this.iterator = iterable[Symbol.iterator](); + } else { + throw new TypeError("Argument must implement the iteration protocol."); + } + } + [Symbol.iterator]() { + const cached = this; + let cur = 0; + return { + next() { + if (cached.length <= cur) { + cached.push(cached.iterator.next()); + } + return cached[cur++]; + } + }; + } + touchNext(count = 1) { + let idx = 0; + while (idx++ < count) { + const last = this[this.length - 1]; + if (last && last.done) { + break; + } + this.push(this.iterator.next()); + } + return this[this.length - 1]; + } +} +;// ./node_modules/cached-iterable/src/cached_async_iterable.mjs + +class CachedAsyncIterable extends CachedIterable { + constructor(iterable) { + super(); + if (Symbol.asyncIterator in Object(iterable)) { + this.iterator = iterable[Symbol.asyncIterator](); + } else if (Symbol.iterator in Object(iterable)) { + this.iterator = iterable[Symbol.iterator](); + } else { + throw new TypeError("Argument must implement the iteration protocol."); + } + } + [Symbol.asyncIterator]() { + const cached = this; + let cur = 0; + return { + async next() { + if (cached.length <= cur) { + cached.push(cached.iterator.next()); + } + return cached[cur++]; + } + }; + } + async touchNext(count = 1) { + let idx = 0; + while (idx++ < count) { + const last = this[this.length - 1]; + if (last && (await last).done) { + break; + } + this.push(this.iterator.next()); + } + return this[this.length - 1]; + } +} +;// ./node_modules/cached-iterable/src/index.mjs + + +;// ./node_modules/@fluent/dom/esm/localization.js + +class Localization { + constructor(resourceIds = [], generateBundles) { + this.resourceIds = resourceIds; + this.generateBundles = generateBundles; + this.onChange(true); + } + addResourceIds(resourceIds, eager = false) { + this.resourceIds.push(...resourceIds); + this.onChange(eager); + return this.resourceIds.length; + } + removeResourceIds(resourceIds) { + this.resourceIds = this.resourceIds.filter(r => !resourceIds.includes(r)); + this.onChange(); + return this.resourceIds.length; + } + async formatWithFallback(keys, method) { + const translations = []; + let hasAtLeastOneBundle = false; + for await (const bundle of this.bundles) { + hasAtLeastOneBundle = true; + const missingIds = keysFromBundle(method, bundle, keys, translations); + if (missingIds.size === 0) { + break; + } + if (typeof console !== "undefined") { + const locale = bundle.locales[0]; + const ids = Array.from(missingIds).join(", "); + console.warn(`[fluent] Missing translations in ${locale}: ${ids}`); + } + } + if (!hasAtLeastOneBundle && typeof console !== "undefined") { + console.warn(`[fluent] Request for keys failed because no resource bundles got generated. + keys: ${JSON.stringify(keys)}. + resourceIds: ${JSON.stringify(this.resourceIds)}.`); + } + return translations; + } + formatMessages(keys) { + return this.formatWithFallback(keys, messageFromBundle); + } + formatValues(keys) { + return this.formatWithFallback(keys, valueFromBundle); + } + async formatValue(id, args) { + const [val] = await this.formatValues([{ + id, + args + }]); + return val; + } + handleEvent() { + this.onChange(); + } + onChange(eager = false) { + this.bundles = CachedAsyncIterable.from(this.generateBundles(this.resourceIds)); + if (eager) { + this.bundles.touchNext(2); + } + } +} +function valueFromBundle(bundle, errors, message, args) { + if (message.value) { + return bundle.formatPattern(message.value, args, errors); + } + return null; +} +function messageFromBundle(bundle, errors, message, args) { + const formatted = { + value: null, + attributes: null + }; + if (message.value) { + formatted.value = bundle.formatPattern(message.value, args, errors); + } + let attrNames = Object.keys(message.attributes); + if (attrNames.length > 0) { + formatted.attributes = new Array(attrNames.length); + for (let [i, name] of attrNames.entries()) { + let value = bundle.formatPattern(message.attributes[name], args, errors); + formatted.attributes[i] = { + name, + value + }; + } + } + return formatted; +} +function keysFromBundle(method, bundle, keys, translations) { + const messageErrors = []; + const missingIds = new Set(); + keys.forEach(({ + id, + args + }, i) => { + if (translations[i] !== undefined) { + return; + } + let message = bundle.getMessage(id); + if (message) { + messageErrors.length = 0; + translations[i] = method(bundle, messageErrors, message, args); + if (messageErrors.length > 0 && typeof console !== "undefined") { + const locale = bundle.locales[0]; + const errors = messageErrors.join(", "); + console.warn(`[fluent][resolver] errors in ${locale}/${id}: ${errors}.`); + } + } else { + missingIds.add(id); + } + }); + return missingIds; +} +;// ./node_modules/@fluent/dom/esm/dom_localization.js + + +const L10NID_ATTR_NAME = "data-l10n-id"; +const L10NARGS_ATTR_NAME = "data-l10n-args"; +const L10N_ELEMENT_QUERY = `[${L10NID_ATTR_NAME}]`; +class DOMLocalization extends Localization { + constructor(resourceIds, generateBundles) { + super(resourceIds, generateBundles); + this.roots = new Set(); + this.pendingrAF = null; + this.pendingElements = new Set(); + this.windowElement = null; + this.mutationObserver = null; + this.observerConfig = { + attributes: true, + characterData: false, + childList: true, + subtree: true, + attributeFilter: [L10NID_ATTR_NAME, L10NARGS_ATTR_NAME] + }; + } + onChange(eager = false) { + super.onChange(eager); + if (this.roots) { + this.translateRoots(); + } + } + setAttributes(element, id, args) { + element.setAttribute(L10NID_ATTR_NAME, id); + if (args) { + element.setAttribute(L10NARGS_ATTR_NAME, JSON.stringify(args)); + } else { + element.removeAttribute(L10NARGS_ATTR_NAME); + } + return element; + } + getAttributes(element) { + return { + id: element.getAttribute(L10NID_ATTR_NAME), + args: JSON.parse(element.getAttribute(L10NARGS_ATTR_NAME) || null) + }; + } + connectRoot(newRoot) { + for (const root of this.roots) { + if (root === newRoot || root.contains(newRoot) || newRoot.contains(root)) { + throw new Error("Cannot add a root that overlaps with existing root."); + } + } + if (this.windowElement) { + if (this.windowElement !== newRoot.ownerDocument.defaultView) { + throw new Error(`Cannot connect a root: + DOMLocalization already has a root from a different window.`); + } + } else { + this.windowElement = newRoot.ownerDocument.defaultView; + this.mutationObserver = new this.windowElement.MutationObserver(mutations => this.translateMutations(mutations)); + } + this.roots.add(newRoot); + this.mutationObserver.observe(newRoot, this.observerConfig); + } + disconnectRoot(root) { + this.roots.delete(root); + this.pauseObserving(); + if (this.roots.size === 0) { + this.mutationObserver = null; + if (this.windowElement && this.pendingrAF) { + this.windowElement.cancelAnimationFrame(this.pendingrAF); + } + this.windowElement = null; + this.pendingrAF = null; + this.pendingElements.clear(); + return true; + } + this.resumeObserving(); + return false; + } + translateRoots() { + const roots = Array.from(this.roots); + return Promise.all(roots.map(root => this.translateFragment(root))); + } + pauseObserving() { + if (!this.mutationObserver) { + return; + } + this.translateMutations(this.mutationObserver.takeRecords()); + this.mutationObserver.disconnect(); + } + resumeObserving() { + if (!this.mutationObserver) { + return; + } + for (const root of this.roots) { + this.mutationObserver.observe(root, this.observerConfig); + } + } + translateMutations(mutations) { + for (const mutation of mutations) { + switch (mutation.type) { + case "attributes": + if (mutation.target.hasAttribute("data-l10n-id")) { + this.pendingElements.add(mutation.target); + } + break; + case "childList": + for (const addedNode of mutation.addedNodes) { + if (addedNode.nodeType === addedNode.ELEMENT_NODE) { + if (addedNode.childElementCount) { + for (const element of this.getTranslatables(addedNode)) { + this.pendingElements.add(element); + } + } else if (addedNode.hasAttribute(L10NID_ATTR_NAME)) { + this.pendingElements.add(addedNode); + } + } + } + break; + } + } + if (this.pendingElements.size > 0) { + if (this.pendingrAF === null) { + this.pendingrAF = this.windowElement.requestAnimationFrame(() => { + this.translateElements(Array.from(this.pendingElements)); + this.pendingElements.clear(); + this.pendingrAF = null; + }); + } + } + } + translateFragment(frag) { + return this.translateElements(this.getTranslatables(frag)); + } + async translateElements(elements) { + if (!elements.length) { + return undefined; + } + const keys = elements.map(this.getKeysForElement); + const translations = await this.formatMessages(keys); + return this.applyTranslations(elements, translations); + } + applyTranslations(elements, translations) { + this.pauseObserving(); + for (let i = 0; i < elements.length; i++) { + if (translations[i] !== undefined) { + translateElement(elements[i], translations[i]); + } + } + this.resumeObserving(); + } + getTranslatables(element) { + const nodes = Array.from(element.querySelectorAll(L10N_ELEMENT_QUERY)); + if (typeof element.hasAttribute === "function" && element.hasAttribute(L10NID_ATTR_NAME)) { + nodes.push(element); + } + return nodes; + } + getKeysForElement(element) { + return { + id: element.getAttribute(L10NID_ATTR_NAME), + args: JSON.parse(element.getAttribute(L10NARGS_ATTR_NAME) || null) + }; + } +} +;// ./node_modules/@fluent/dom/esm/index.js + + +;// ./web/l10n.js +class L10n { + #dir; + #elements; + #lang; + #l10n; + constructor({ + lang, + isRTL + }, l10n = null) { + this.#lang = L10n.#fixupLangCode(lang); + this.#l10n = l10n; + this.#dir = isRTL ?? L10n.#isRTL(this.#lang) ? "rtl" : "ltr"; + } + _setL10n(l10n) { + this.#l10n = l10n; + } + getLanguage() { + return this.#lang; + } + getDirection() { + return this.#dir; + } + async get(ids, args = null, fallback) { + if (Array.isArray(ids)) { + ids = ids.map(id => ({ + id + })); + const messages = await this.#l10n.formatMessages(ids); + return messages.map(message => message.value); + } + const messages = await this.#l10n.formatMessages([{ + id: ids, + args + }]); + return messages[0]?.value || fallback; + } + async translate(element) { + (this.#elements ||= new Set()).add(element); + try { + this.#l10n.connectRoot(element); + await this.#l10n.translateRoots(); + } catch {} + } + async translateOnce(element) { + try { + await this.#l10n.translateElements([element]); + } catch (ex) { + console.error("translateOnce:", ex); + } + } + async destroy() { + if (this.#elements) { + for (const element of this.#elements) { + this.#l10n.disconnectRoot(element); + } + this.#elements.clear(); + this.#elements = null; + } + this.#l10n.pauseObserving(); + } + pause() { + this.#l10n.pauseObserving(); + } + resume() { + this.#l10n.resumeObserving(); + } + static #fixupLangCode(langCode) { + langCode = langCode?.toLowerCase() || "en-us"; + const PARTIAL_LANG_CODES = { + en: "en-us", + es: "es-es", + fy: "fy-nl", + ga: "ga-ie", + gu: "gu-in", + hi: "hi-in", + hy: "hy-am", + nb: "nb-no", + ne: "ne-np", + nn: "nn-no", + pa: "pa-in", + pt: "pt-pt", + sv: "sv-se", + zh: "zh-cn" + }; + return PARTIAL_LANG_CODES[langCode] || langCode; + } + static #isRTL(lang) { + const shortCode = lang.split("-", 1)[0]; + return ["ar", "he", "fa", "ps", "ur"].includes(shortCode); + } +} +const GenericL10n = null; + +;// ./web/genericl10n.js + + + + +function PLATFORM() { + const { + isAndroid, + isLinux, + isMac, + isWindows + } = FeatureTest.platform; + if (isLinux) { + return "linux"; + } + if (isWindows) { + return "windows"; + } + if (isMac) { + return "macos"; + } + if (isAndroid) { + return "android"; + } + return "other"; +} +function createBundle(lang, text) { + const resource = new FluentResource(text); + const bundle = new FluentBundle(lang, { + functions: { + PLATFORM + } + }); + const errors = bundle.addResource(resource); + if (errors.length) { + console.error("L10n errors", errors); + } + return bundle; +} +class genericl10n_GenericL10n extends L10n { + constructor(lang) { + super({ + lang + }); + const generateBundles = !lang ? genericl10n_GenericL10n.#generateBundlesFallback.bind(genericl10n_GenericL10n, this.getLanguage()) : genericl10n_GenericL10n.#generateBundles.bind(genericl10n_GenericL10n, "en-us", this.getLanguage()); + this._setL10n(new DOMLocalization([], generateBundles)); + } + static async *#generateBundles(defaultLang, baseLang) { + const { + baseURL, + paths + } = await this.#getPaths(); + const langs = [baseLang]; + if (defaultLang !== baseLang) { + const shortLang = baseLang.split("-", 1)[0]; + if (shortLang !== baseLang) { + langs.push(shortLang); + } + langs.push(defaultLang); + } + const bundles = langs.map(lang => [lang, this.#createBundle(lang, baseURL, paths)]); + for (const [lang, bundlePromise] of bundles) { + const bundle = await bundlePromise; + if (bundle) { + yield bundle; + } else if (lang === "en-us") { + yield this.#createBundleFallback(lang); + } + } + } + static async #createBundle(lang, baseURL, paths) { + const path = paths[lang]; + if (!path) { + return null; + } + const url = new URL(path, baseURL); + const text = await fetchData(url, "text"); + return createBundle(lang, text); + } + static async #getPaths() { + try { + const { + href + } = document.querySelector(`link[type="application/l10n"]`); + const paths = await fetchData(href, "json"); + return { + baseURL: href.substring(0, href.lastIndexOf("/") + 1) || "./", + paths + }; + } catch {} + return { + baseURL: "./", + paths: Object.create(null) + }; + } + static async *#generateBundlesFallback(lang) { + yield this.#createBundleFallback(lang); + } + static async #createBundleFallback(lang) { + const text = "pdfjs-previous-button =\n .title = Previous Page\npdfjs-previous-button-label = Previous\npdfjs-next-button =\n .title = Next Page\npdfjs-next-button-label = Next\npdfjs-page-input =\n .title = Page\npdfjs-of-pages = of { $pagesCount }\npdfjs-page-of-pages = ({ $pageNumber } of { $pagesCount })\npdfjs-zoom-out-button =\n .title = Zoom Out\npdfjs-zoom-out-button-label = Zoom Out\npdfjs-zoom-in-button =\n .title = Zoom In\npdfjs-zoom-in-button-label = Zoom In\npdfjs-zoom-select =\n .title = Zoom\npdfjs-presentation-mode-button =\n .title = Switch to Presentation Mode\npdfjs-presentation-mode-button-label = Presentation Mode\npdfjs-open-file-button =\n .title = Open File\npdfjs-open-file-button-label = Open\npdfjs-print-button =\n .title = Print\npdfjs-print-button-label = Print\npdfjs-save-button =\n .title = Save\npdfjs-save-button-label = Save\npdfjs-download-button =\n .title = Download\npdfjs-download-button-label = Download\npdfjs-bookmark-button =\n .title = Current Page (View URL from Current Page)\npdfjs-bookmark-button-label = Current Page\npdfjs-tools-button =\n .title = Tools\npdfjs-tools-button-label = Tools\npdfjs-first-page-button =\n .title = Go to First Page\npdfjs-first-page-button-label = Go to First Page\npdfjs-last-page-button =\n .title = Go to Last Page\npdfjs-last-page-button-label = Go to Last Page\npdfjs-page-rotate-cw-button =\n .title = Rotate Clockwise\npdfjs-page-rotate-cw-button-label = Rotate Clockwise\npdfjs-page-rotate-ccw-button =\n .title = Rotate Counterclockwise\npdfjs-page-rotate-ccw-button-label = Rotate Counterclockwise\npdfjs-cursor-text-select-tool-button =\n .title = Enable Text Selection Tool\npdfjs-cursor-text-select-tool-button-label = Text Selection Tool\npdfjs-cursor-hand-tool-button =\n .title = Enable Hand Tool\npdfjs-cursor-hand-tool-button-label = Hand Tool\npdfjs-scroll-page-button =\n .title = Use Page Scrolling\npdfjs-scroll-page-button-label = Page Scrolling\npdfjs-scroll-vertical-button =\n .title = Use Vertical Scrolling\npdfjs-scroll-vertical-button-label = Vertical Scrolling\npdfjs-scroll-horizontal-button =\n .title = Use Horizontal Scrolling\npdfjs-scroll-horizontal-button-label = Horizontal Scrolling\npdfjs-scroll-wrapped-button =\n .title = Use Wrapped Scrolling\npdfjs-scroll-wrapped-button-label = Wrapped Scrolling\npdfjs-spread-none-button =\n .title = Do not join page spreads\npdfjs-spread-none-button-label = No Spreads\npdfjs-spread-odd-button =\n .title = Join page spreads starting with odd-numbered pages\npdfjs-spread-odd-button-label = Odd Spreads\npdfjs-spread-even-button =\n .title = Join page spreads starting with even-numbered pages\npdfjs-spread-even-button-label = Even Spreads\npdfjs-document-properties-button =\n .title = Document Properties\u2026\npdfjs-document-properties-button-label = Document Properties\u2026\npdfjs-document-properties-file-name = File name:\npdfjs-document-properties-file-size = File size:\npdfjs-document-properties-size-kb = { NUMBER($kb, maximumSignificantDigits: 3) } KB ({ $b } bytes)\npdfjs-document-properties-size-mb = { NUMBER($mb, maximumSignificantDigits: 3) } MB ({ $b } bytes)\npdfjs-document-properties-title = Title:\npdfjs-document-properties-author = Author:\npdfjs-document-properties-subject = Subject:\npdfjs-document-properties-keywords = Keywords:\npdfjs-document-properties-creation-date = Creation Date:\npdfjs-document-properties-modification-date = Modification Date:\npdfjs-document-properties-date-time-string = { DATETIME($dateObj, dateStyle: \"short\", timeStyle: \"medium\") }\npdfjs-document-properties-creator = Creator:\npdfjs-document-properties-producer = PDF Producer:\npdfjs-document-properties-version = PDF Version:\npdfjs-document-properties-page-count = Page Count:\npdfjs-document-properties-page-size = Page Size:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = portrait\npdfjs-document-properties-page-size-orientation-landscape = landscape\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\npdfjs-document-properties-page-size-dimension-string = { $width } \xD7 { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } \xD7 { $height } { $unit } ({ $name }, { $orientation })\npdfjs-document-properties-linearized = Fast Web View:\npdfjs-document-properties-linearized-yes = Yes\npdfjs-document-properties-linearized-no = No\npdfjs-document-properties-close-button = Close\npdfjs-print-progress-message = Preparing document for printing\u2026\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Cancel\npdfjs-printing-not-supported = Warning: Printing is not fully supported by this browser.\npdfjs-printing-not-ready = Warning: The PDF is not fully loaded for printing.\npdfjs-toggle-sidebar-button =\n .title = Toggle Sidebar\npdfjs-toggle-sidebar-notification-button =\n .title = Toggle Sidebar (document contains outline/attachments/layers)\npdfjs-toggle-sidebar-button-label = Toggle Sidebar\npdfjs-document-outline-button =\n .title = Show Document Outline (double-click to expand/collapse all items)\npdfjs-document-outline-button-label = Document Outline\npdfjs-attachments-button =\n .title = Show Attachments\npdfjs-attachments-button-label = Attachments\npdfjs-layers-button =\n .title = Show Layers (double-click to reset all layers to the default state)\npdfjs-layers-button-label = Layers\npdfjs-thumbs-button =\n .title = Show Thumbnails\npdfjs-thumbs-button-label = Thumbnails\npdfjs-current-outline-item-button =\n .title = Find Current Outline Item\npdfjs-current-outline-item-button-label = Current Outline Item\npdfjs-findbar-button =\n .title = Find in Document\npdfjs-findbar-button-label = Find\npdfjs-additional-layers = Additional Layers\npdfjs-thumb-page-title =\n .title = Page { $page }\npdfjs-thumb-page-canvas =\n .aria-label = Thumbnail of Page { $page }\npdfjs-find-input =\n .title = Find\n .placeholder = Find in document\u2026\npdfjs-find-previous-button =\n .title = Find the previous occurrence of the phrase\npdfjs-find-previous-button-label = Previous\npdfjs-find-next-button =\n .title = Find the next occurrence of the phrase\npdfjs-find-next-button-label = Next\npdfjs-find-highlight-checkbox = Highlight All\npdfjs-find-match-case-checkbox-label = Match Case\npdfjs-find-match-diacritics-checkbox-label = Match Diacritics\npdfjs-find-entire-word-checkbox-label = Whole Words\npdfjs-find-reached-top = Reached top of document, continued from bottom\npdfjs-find-reached-bottom = Reached end of document, continued from top\npdfjs-find-match-count =\n { $total ->\n [one] { $current } of { $total } match\n *[other] { $current } of { $total } matches\n }\npdfjs-find-match-count-limit =\n { $limit ->\n [one] More than { $limit } match\n *[other] More than { $limit } matches\n }\npdfjs-find-not-found = Phrase not found\npdfjs-page-scale-width = Page Width\npdfjs-page-scale-fit = Page Fit\npdfjs-page-scale-auto = Automatic Zoom\npdfjs-page-scale-actual = Actual Size\npdfjs-page-scale-percent = { $scale }%\npdfjs-page-landmark =\n .aria-label = Page { $page }\npdfjs-loading-error = An error occurred while loading the PDF.\npdfjs-invalid-file-error = Invalid or corrupted PDF file.\npdfjs-missing-file-error = Missing PDF file.\npdfjs-unexpected-response-error = Unexpected server response.\npdfjs-rendering-error = An error occurred while rendering the page.\npdfjs-annotation-date-time-string = { DATETIME($dateObj, dateStyle: \"short\", timeStyle: \"medium\") }\npdfjs-text-annotation-type =\n .alt = [{ $type } Annotation]\npdfjs-password-label = Enter the password to open this PDF file.\npdfjs-password-invalid = Invalid password. Please try again.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Cancel\npdfjs-web-fonts-disabled = Web fonts are disabled: unable to use embedded PDF fonts.\npdfjs-editor-free-text-button =\n .title = Text\npdfjs-editor-color-picker-free-text-input =\n .title = Change text color\npdfjs-editor-free-text-button-label = Text\npdfjs-editor-ink-button =\n .title = Draw\npdfjs-editor-color-picker-ink-input =\n .title = Change drawing color\npdfjs-editor-ink-button-label = Draw\npdfjs-editor-stamp-button =\n .title = Add or edit images\npdfjs-editor-stamp-button-label = Add or edit images\npdfjs-editor-highlight-button =\n .title = Highlight\npdfjs-editor-highlight-button-label = Highlight\npdfjs-highlight-floating-button1 =\n .title = Highlight\n .aria-label = Highlight\npdfjs-highlight-floating-button-label = Highlight\npdfjs-comment-floating-button =\n .title = Comment\n .aria-label = Comment\npdfjs-comment-floating-button-label = Comment\npdfjs-editor-comment-button =\n .title = Comment\n .aria-label = Comment\npdfjs-editor-comment-button-label = Comment\npdfjs-editor-signature-button =\n .title = Add signature\npdfjs-editor-signature-button-label = Add signature\npdfjs-editor-highlight-editor =\n .aria-label = Highlight editor\npdfjs-editor-ink-editor =\n .aria-label = Drawing editor\npdfjs-editor-signature-editor1 =\n .aria-description = Signature editor: { $description }\npdfjs-editor-stamp-editor =\n .aria-label = Image editor\npdfjs-editor-remove-ink-button =\n .title = Remove drawing\npdfjs-editor-remove-freetext-button =\n .title = Remove text\npdfjs-editor-remove-stamp-button =\n .title = Remove image\npdfjs-editor-remove-highlight-button =\n .title = Remove highlight\npdfjs-editor-remove-signature-button =\n .title = Remove signature\npdfjs-editor-free-text-color-input = Color\npdfjs-editor-free-text-size-input = Size\npdfjs-editor-ink-color-input = Color\npdfjs-editor-ink-thickness-input = Thickness\npdfjs-editor-ink-opacity-input = Opacity\npdfjs-editor-stamp-add-image-button =\n .title = Add image\npdfjs-editor-stamp-add-image-button-label = Add image\npdfjs-editor-free-highlight-thickness-input = Thickness\npdfjs-editor-free-highlight-thickness-title =\n .title = Change thickness when highlighting items other than text\npdfjs-editor-add-signature-container =\n .aria-label = Signature controls and saved signatures\npdfjs-editor-signature-add-signature-button =\n .title = Add new signature\npdfjs-editor-signature-add-signature-button-label = Add new signature\npdfjs-editor-add-saved-signature-button =\n .title = Saved signature: { $description }\npdfjs-free-text2 =\n .aria-label = Text Editor\n .default-content = Start typing\u2026\npdfjs-editor-comments-sidebar-title =\n { $count ->\n [one] Comment\n *[other] Comments\n }\npdfjs-editor-comments-sidebar-close-button =\n .title = Close the sidebar\n .aria-label = Close the sidebar\npdfjs-editor-comments-sidebar-close-button-label = Close the sidebar\npdfjs-editor-comments-sidebar-no-comments1 = See something noteworthy? Highlight it and leave a comment.\npdfjs-editor-comments-sidebar-no-comments-link = Learn more\npdfjs-editor-alt-text-button =\n .aria-label = Alt text\npdfjs-editor-alt-text-button-label = Alt text\npdfjs-editor-alt-text-edit-button =\n .aria-label = Edit alt text\npdfjs-editor-alt-text-dialog-label = Choose an option\npdfjs-editor-alt-text-dialog-description = Alt text (alternative text) helps when people can\u2019t see the image or when it doesn\u2019t load.\npdfjs-editor-alt-text-add-description-label = Add a description\npdfjs-editor-alt-text-add-description-description = Aim for 1-2 sentences that describe the subject, setting, or actions.\npdfjs-editor-alt-text-mark-decorative-label = Mark as decorative\npdfjs-editor-alt-text-mark-decorative-description = This is used for ornamental images, like borders or watermarks.\npdfjs-editor-alt-text-cancel-button = Cancel\npdfjs-editor-alt-text-save-button = Save\npdfjs-editor-alt-text-decorative-tooltip = Marked as decorative\npdfjs-editor-alt-text-textarea =\n .placeholder = For example, \u201CA young man sits down at a table to eat a meal\u201D\npdfjs-editor-resizer-top-left =\n .aria-label = Top left corner \u2014 resize\npdfjs-editor-resizer-top-middle =\n .aria-label = Top middle \u2014 resize\npdfjs-editor-resizer-top-right =\n .aria-label = Top right corner \u2014 resize\npdfjs-editor-resizer-middle-right =\n .aria-label = Middle right \u2014 resize\npdfjs-editor-resizer-bottom-right =\n .aria-label = Bottom right corner \u2014 resize\npdfjs-editor-resizer-bottom-middle =\n .aria-label = Bottom middle \u2014 resize\npdfjs-editor-resizer-bottom-left =\n .aria-label = Bottom left corner \u2014 resize\npdfjs-editor-resizer-middle-left =\n .aria-label = Middle left \u2014 resize\npdfjs-editor-highlight-colorpicker-label = Highlight color\npdfjs-editor-colorpicker-button =\n .title = Change color\npdfjs-editor-colorpicker-dropdown =\n .aria-label = Color choices\npdfjs-editor-colorpicker-yellow =\n .title = Yellow\npdfjs-editor-colorpicker-green =\n .title = Green\npdfjs-editor-colorpicker-blue =\n .title = Blue\npdfjs-editor-colorpicker-pink =\n .title = Pink\npdfjs-editor-colorpicker-red =\n .title = Red\npdfjs-editor-highlight-show-all-button-label = Show all\npdfjs-editor-highlight-show-all-button =\n .title = Show all\npdfjs-editor-new-alt-text-dialog-edit-label = Edit alt text (image description)\npdfjs-editor-new-alt-text-dialog-add-label = Add alt text (image description)\npdfjs-editor-new-alt-text-textarea =\n .placeholder = Write your description here\u2026\npdfjs-editor-new-alt-text-description = Short description for people who can\u2019t see the image or when the image doesn\u2019t load.\npdfjs-editor-new-alt-text-disclaimer1 = This alt text was created automatically and may be inaccurate.\npdfjs-editor-new-alt-text-disclaimer-learn-more-url = Learn more\npdfjs-editor-new-alt-text-create-automatically-button-label = Create alt text automatically\npdfjs-editor-new-alt-text-not-now-button = Not now\npdfjs-editor-new-alt-text-error-title = Couldn\u2019t create alt text automatically\npdfjs-editor-new-alt-text-error-description = Please write your own alt text or try again later.\npdfjs-editor-new-alt-text-error-close-button = Close\npdfjs-editor-new-alt-text-ai-model-downloading-progress = Downloading alt text AI model ({ $downloadedSize } of { $totalSize } MB)\n .aria-valuetext = Downloading alt text AI model ({ $downloadedSize } of { $totalSize } MB)\npdfjs-editor-new-alt-text-added-button =\n .aria-label = Alt text added\npdfjs-editor-new-alt-text-added-button-label = Alt text added\npdfjs-editor-new-alt-text-missing-button =\n .aria-label = Missing alt text\npdfjs-editor-new-alt-text-missing-button-label = Missing alt text\npdfjs-editor-new-alt-text-to-review-button =\n .aria-label = Review alt text\npdfjs-editor-new-alt-text-to-review-button-label = Review alt text\npdfjs-editor-new-alt-text-generated-alt-text-with-disclaimer = Created automatically: { $generatedAltText }\npdfjs-image-alt-text-settings-button =\n .title = Image alt text settings\npdfjs-image-alt-text-settings-button-label = Image alt text settings\npdfjs-editor-alt-text-settings-dialog-label = Image alt text settings\npdfjs-editor-alt-text-settings-automatic-title = Automatic alt text\npdfjs-editor-alt-text-settings-create-model-button-label = Create alt text automatically\npdfjs-editor-alt-text-settings-create-model-description = Suggests descriptions to help people who can\u2019t see the image or when the image doesn\u2019t load.\npdfjs-editor-alt-text-settings-download-model-label = Alt text AI model ({ $totalSize } MB)\npdfjs-editor-alt-text-settings-ai-model-description = Runs locally on your device so your data stays private. Required for automatic alt text.\npdfjs-editor-alt-text-settings-delete-model-button = Delete\npdfjs-editor-alt-text-settings-download-model-button = Download\npdfjs-editor-alt-text-settings-downloading-model-button = Downloading\u2026\npdfjs-editor-alt-text-settings-editor-title = Alt text editor\npdfjs-editor-alt-text-settings-show-dialog-button-label = Show alt text editor right away when adding an image\npdfjs-editor-alt-text-settings-show-dialog-description = Helps you make sure all your images have alt text.\npdfjs-editor-alt-text-settings-close-button = Close\npdfjs-editor-highlight-added-alert = Highlight added\npdfjs-editor-freetext-added-alert = Text added\npdfjs-editor-ink-added-alert = Drawing added\npdfjs-editor-stamp-added-alert = Image added\npdfjs-editor-signature-added-alert = Signature added\npdfjs-editor-undo-bar-message-highlight = Highlight removed\npdfjs-editor-undo-bar-message-freetext = Text removed\npdfjs-editor-undo-bar-message-ink = Drawing removed\npdfjs-editor-undo-bar-message-stamp = Image removed\npdfjs-editor-undo-bar-message-signature = Signature removed\npdfjs-editor-undo-bar-message-multiple =\n { $count ->\n [one] { $count } annotation removed\n *[other] { $count } annotations removed\n }\npdfjs-editor-undo-bar-undo-button =\n .title = Undo\npdfjs-editor-undo-bar-undo-button-label = Undo\npdfjs-editor-undo-bar-close-button =\n .title = Close\npdfjs-editor-undo-bar-close-button-label = Close\npdfjs-editor-add-signature-dialog-label = This modal allows the user to create a signature to add to a PDF document. The user can edit the name (which also serves as the alt text), and optionally save the signature for repeated use.\npdfjs-editor-add-signature-dialog-title = Add a signature\npdfjs-editor-add-signature-type-button = Type\n .title = Type\npdfjs-editor-add-signature-draw-button = Draw\n .title = Draw\npdfjs-editor-add-signature-image-button = Image\n .title = Image\npdfjs-editor-add-signature-type-input =\n .aria-label = Type your signature\n .placeholder = Type your signature\npdfjs-editor-add-signature-draw-placeholder = Draw your signature\npdfjs-editor-add-signature-draw-thickness-range-label = Thickness\npdfjs-editor-add-signature-draw-thickness-range =\n .title = Drawing thickness: { $thickness }\npdfjs-editor-add-signature-image-placeholder = Drag a file here to upload\npdfjs-editor-add-signature-image-browse-link =\n { PLATFORM() ->\n [macos] Or choose image files\n *[other] Or browse image files\n }\npdfjs-editor-add-signature-description-label = Description (alt text)\npdfjs-editor-add-signature-description-input =\n .title = Description (alt text)\npdfjs-editor-add-signature-description-default-when-drawing = Signature\npdfjs-editor-add-signature-clear-button-label = Clear signature\npdfjs-editor-add-signature-clear-button =\n .title = Clear signature\npdfjs-editor-add-signature-save-checkbox = Save signature\npdfjs-editor-add-signature-save-warning-message = You\u2019ve reached the limit of 5 saved signatures. Remove one to save more.\npdfjs-editor-add-signature-image-upload-error-title = Couldn\u2019t upload image\npdfjs-editor-add-signature-image-upload-error-description = Check your network connection or try another image.\npdfjs-editor-add-signature-image-no-data-error-title = Can\u2019t convert this image into a signature\npdfjs-editor-add-signature-image-no-data-error-description = Please try uploading a different image.\npdfjs-editor-add-signature-error-close-button = Close\npdfjs-editor-add-signature-cancel-button = Cancel\npdfjs-editor-add-signature-add-button = Add\npdfjs-editor-delete-signature-button1 =\n .title = Remove saved signature\npdfjs-editor-delete-signature-button-label1 = Remove saved signature\npdfjs-editor-add-signature-edit-button-label = Edit description\npdfjs-editor-edit-signature-dialog-title = Edit description\npdfjs-editor-edit-signature-update-button = Update\npdfjs-show-comment-button =\n .title = Show comment\npdfjs-editor-edit-comment-popup-button-label = Edit comment\npdfjs-editor-edit-comment-popup-button =\n .title = Edit comment\npdfjs-editor-delete-comment-popup-button-label = Remove comment\npdfjs-editor-delete-comment-popup-button =\n .title = Remove comment\npdfjs-editor-edit-comment-dialog-title-when-editing = Edit comment\npdfjs-editor-edit-comment-dialog-save-button-when-editing = Update\npdfjs-editor-edit-comment-dialog-title-when-adding = Add comment\npdfjs-editor-edit-comment-dialog-save-button-when-adding = Add\npdfjs-editor-edit-comment-dialog-text-input =\n .placeholder = Start typing\u2026\npdfjs-editor-edit-comment-dialog-cancel-button = Cancel\npdfjs-editor-add-comment-button =\n .title = Add comment"; + return createBundle(lang, text); + } +} + +;// ./web/generic_scripting.js + +async function docProperties(pdfDocument) { + const url = "", + baseUrl = ""; + const { + info, + metadata, + contentDispositionFilename, + contentLength + } = await pdfDocument.getMetadata(); + return { + ...info, + baseURL: baseUrl, + filesize: contentLength || (await pdfDocument.getDownloadInfo()).length, + filename: contentDispositionFilename || getPdfFilenameFromUrl(url), + metadata: metadata?.getRaw(), + authors: metadata?.get("dc:creator"), + numPages: pdfDocument.numPages, + URL: url + }; +} +class GenericScripting { + constructor(sandboxBundleSrc) { + this._ready = new Promise((resolve, reject) => { + const sandbox = import( + /*webpackIgnore: true*/ + /*@vite-ignore*/ + sandboxBundleSrc); + sandbox.then(pdfjsSandbox => { + resolve(pdfjsSandbox.QuickJSSandbox()); + }).catch(reject); + }); + } + async createSandbox(data) { + const sandbox = await this._ready; + sandbox.create(data); + } + async dispatchEventInSandbox(event) { + const sandbox = await this._ready; + setTimeout(() => sandbox.dispatchEvent(event), 0); + } + async destroySandbox() { + const sandbox = await this._ready; + sandbox.nukeSandbox(); + } +} + +;// ./web/generic_signature_storage.js + +const KEY_STORAGE = "pdfjs.signature"; +class SignatureStorage { + #eventBus; + #signatures = null; + #signal = null; + constructor(eventBus, signal) { + this.#eventBus = eventBus; + this.#signal = signal; + } + #save() { + localStorage.setItem(KEY_STORAGE, JSON.stringify(Object.fromEntries(this.#signatures))); + } + async getAll() { + if (this.#signal) { + window.addEventListener("storage", ({ + key + }) => { + if (key === KEY_STORAGE) { + this.#signatures = null; + this.#eventBus?.dispatch("storedsignatureschanged", { + source: this + }); + } + }, { + signal: this.#signal + }); + this.#signal = null; + } + if (!this.#signatures) { + this.#signatures = new Map(); + const data = localStorage.getItem(KEY_STORAGE); + if (data) { + for (const [key, value] of Object.entries(JSON.parse(data))) { + this.#signatures.set(key, value); + } + } + } + return this.#signatures; + } + async isFull() { + return (await this.size()) === 5; + } + async size() { + return (await this.getAll()).size; + } + async create(data) { + if (await this.isFull()) { + return null; + } + const uuid = getUuid(); + this.#signatures.set(uuid, data); + this.#save(); + return uuid; + } + async delete(uuid) { + const signatures = await this.getAll(); + if (!signatures.has(uuid)) { + return false; + } + signatures.delete(uuid); + this.#save(); + return true; + } +} + +;// ./web/genericcom.js + + + + + + +function initCom(app) {} +class Preferences extends BasePreferences { + async _writeToStorage(prefObj) { + localStorage.setItem("pdfjs.preferences", JSON.stringify(prefObj)); + } + async _readFromStorage(prefObj) { + return { + prefs: JSON.parse(localStorage.getItem("pdfjs.preferences")) + }; + } +} +class ExternalServices extends BaseExternalServices { + async createL10n() { + return new genericl10n_GenericL10n(AppOptions.get("localeProperties")?.lang); + } + createScripting() { + return new GenericScripting(AppOptions.get("sandboxBundleSrc")); + } + createSignatureStorage(eventBus, signal) { + return new SignatureStorage(eventBus, signal); + } +} +class MLManager { + async isEnabledFor(_name) { + return false; + } + async deleteModel(_service) { + return null; + } + isReady(_name) { + return false; + } + guess(_data) {} + toggleService(_name, _enabled) {} +} + +;// ./web/new_alt_text_manager.js + +class NewAltTextManager { + #boundCancel = this.#cancel.bind(this); + #createAutomaticallyButton; + #currentEditor = null; + #cancelButton; + #descriptionContainer; + #dialog; + #disclaimer; + #downloadModel; + #downloadModelDescription; + #eventBus; + #firstTime = false; + #guessedAltText; + #hasAI = null; + #isEditing = null; + #imagePreview; + #imageData; + #isAILoading = false; + #wasAILoading = false; + #learnMore; + #notNowButton; + #overlayManager; + #textarea; + #title; + #uiManager; + #previousAltText = null; + constructor({ + descriptionContainer, + dialog, + imagePreview, + cancelButton, + disclaimer, + notNowButton, + saveButton, + textarea, + learnMore, + errorCloseButton, + createAutomaticallyButton, + downloadModel, + downloadModelDescription, + title + }, overlayManager, eventBus) { + this.#cancelButton = cancelButton; + this.#createAutomaticallyButton = createAutomaticallyButton; + this.#descriptionContainer = descriptionContainer; + this.#dialog = dialog; + this.#disclaimer = disclaimer; + this.#notNowButton = notNowButton; + this.#imagePreview = imagePreview; + this.#textarea = textarea; + this.#learnMore = learnMore; + this.#title = title; + this.#downloadModel = downloadModel; + this.#downloadModelDescription = downloadModelDescription; + this.#overlayManager = overlayManager; + this.#eventBus = eventBus; + dialog.addEventListener("close", this.#close.bind(this)); + dialog.addEventListener("contextmenu", event => { + if (event.target !== this.#textarea) { + event.preventDefault(); + } + }); + cancelButton.addEventListener("click", this.#boundCancel); + notNowButton.addEventListener("click", this.#boundCancel); + saveButton.addEventListener("click", this.#save.bind(this)); + errorCloseButton.addEventListener("click", () => { + this.#toggleError(false); + }); + createAutomaticallyButton.addEventListener("click", async () => { + const checked = createAutomaticallyButton.getAttribute("aria-pressed") !== "true"; + this.#currentEditor._reportTelemetry({ + action: "pdfjs.image.alt_text.ai_generation_check", + data: { + status: checked + } + }); + if (this.#uiManager) { + this.#uiManager.setPreference("enableGuessAltText", checked); + await this.#uiManager.mlManager.toggleService("altText", checked); + } + this.#toggleGuessAltText(checked, false); + }); + textarea.addEventListener("focus", () => { + this.#wasAILoading = this.#isAILoading; + this.#toggleLoading(false); + this.#toggleTitleAndDisclaimer(); + }); + textarea.addEventListener("blur", () => { + if (!textarea.value) { + this.#toggleLoading(this.#wasAILoading); + } + this.#toggleTitleAndDisclaimer(); + }); + textarea.addEventListener("input", () => { + this.#toggleTitleAndDisclaimer(); + }); + eventBus._on("enableguessalttext", ({ + value + }) => { + this.#toggleGuessAltText(value, false); + }); + this.#overlayManager.register(dialog); + this.#learnMore.addEventListener("click", () => { + this.#currentEditor._reportTelemetry({ + action: "pdfjs.image.alt_text.info", + data: { + topic: "alt_text" + } + }); + }); + } + #toggleLoading(value) { + if (!this.#uiManager || this.#isAILoading === value) { + return; + } + this.#isAILoading = value; + this.#descriptionContainer.classList.toggle("loading", value); + } + #toggleError(value) { + if (!this.#uiManager) { + return; + } + this.#dialog.classList.toggle("error", value); + } + async #toggleGuessAltText(value, isInitial = false) { + if (!this.#uiManager) { + return; + } + this.#dialog.classList.toggle("aiDisabled", !value); + this.#createAutomaticallyButton.setAttribute("aria-pressed", value); + if (value) { + const { + altTextLearnMoreUrl + } = this.#uiManager.mlManager; + if (altTextLearnMoreUrl) { + this.#learnMore.href = altTextLearnMoreUrl; + } + this.#mlGuessAltText(isInitial); + } else { + this.#toggleLoading(false); + this.#isAILoading = false; + this.#toggleTitleAndDisclaimer(); + } + } + #toggleNotNow() { + this.#notNowButton.classList.toggle("hidden", !this.#firstTime); + this.#cancelButton.classList.toggle("hidden", this.#firstTime); + } + #toggleAI(value) { + if (!this.#uiManager || this.#hasAI === value) { + return; + } + this.#hasAI = value; + this.#dialog.classList.toggle("noAi", !value); + this.#toggleTitleAndDisclaimer(); + } + #toggleTitleAndDisclaimer() { + const visible = this.#isAILoading || this.#guessedAltText && this.#guessedAltText === this.#textarea.value; + this.#disclaimer.hidden = !visible; + const isEditing = this.#isAILoading || !!this.#textarea.value; + if (this.#isEditing === isEditing) { + return; + } + this.#isEditing = isEditing; + this.#title.setAttribute("data-l10n-id", isEditing ? "pdfjs-editor-new-alt-text-dialog-edit-label" : "pdfjs-editor-new-alt-text-dialog-add-label"); + } + async #mlGuessAltText(isInitial) { + if (this.#isAILoading) { + return; + } + if (this.#textarea.value) { + return; + } + if (isInitial && this.#previousAltText !== null) { + return; + } + this.#guessedAltText = this.#currentEditor.guessedAltText; + if (this.#previousAltText === null && this.#guessedAltText) { + this.#addAltText(this.#guessedAltText); + return; + } + this.#toggleLoading(true); + this.#toggleTitleAndDisclaimer(); + let hasError = false; + try { + const altText = await this.#currentEditor.mlGuessAltText(this.#imageData, false); + if (altText) { + this.#guessedAltText = altText; + this.#wasAILoading = this.#isAILoading; + if (this.#isAILoading) { + this.#addAltText(altText); + } + } + } catch (e) { + console.error(e); + hasError = true; + } + this.#toggleLoading(false); + this.#toggleTitleAndDisclaimer(); + if (hasError && this.#uiManager) { + this.#toggleError(true); + } + } + #addAltText(altText) { + if (!this.#uiManager || this.#textarea.value) { + return; + } + this.#textarea.value = altText; + this.#toggleTitleAndDisclaimer(); + } + #setProgress() { + this.#downloadModel.classList.toggle("hidden", false); + const callback = async ({ + detail: { + finished, + total, + totalLoaded + } + }) => { + const ONE_MEGA_BYTES = 1e6; + totalLoaded = Math.min(0.99 * total, totalLoaded); + const totalSize = this.#downloadModelDescription.ariaValueMax = Math.round(total / ONE_MEGA_BYTES); + const downloadedSize = this.#downloadModelDescription.ariaValueNow = Math.round(totalLoaded / ONE_MEGA_BYTES); + this.#downloadModelDescription.setAttribute("data-l10n-args", JSON.stringify({ + totalSize, + downloadedSize + })); + if (!finished) { + return; + } + this.#eventBus._off("loadaiengineprogress", callback); + this.#downloadModel.classList.toggle("hidden", true); + this.#toggleAI(true); + if (!this.#uiManager) { + return; + } + const { + mlManager + } = this.#uiManager; + mlManager.toggleService("altText", true); + this.#toggleGuessAltText(await mlManager.isEnabledFor("altText"), true); + }; + this.#eventBus._on("loadaiengineprogress", callback); + } + async editAltText(uiManager, editor, firstTime) { + if (this.#currentEditor || !editor) { + return; + } + if (firstTime && editor.hasAltTextData()) { + editor.altTextFinish(); + return; + } + this.#firstTime = firstTime; + let { + mlManager + } = uiManager; + let hasAI = !!mlManager; + this.#toggleTitleAndDisclaimer(); + if (mlManager && !mlManager.isReady("altText")) { + hasAI = false; + if (mlManager.hasProgress) { + this.#setProgress(); + } else { + mlManager = null; + } + } else { + this.#downloadModel.classList.toggle("hidden", true); + } + const isAltTextEnabledPromise = mlManager?.isEnabledFor("altText"); + this.#currentEditor = editor; + this.#uiManager = uiManager; + this.#uiManager.removeEditListeners(); + ({ + altText: this.#previousAltText + } = editor.altTextData); + this.#textarea.value = this.#previousAltText ?? ""; + const AI_MAX_IMAGE_DIMENSION = 224; + const MAX_PREVIEW_DIMENSION = 180; + let canvas, width, height; + if (mlManager) { + ({ + canvas, + width, + height, + imageData: this.#imageData + } = editor.copyCanvas(AI_MAX_IMAGE_DIMENSION, MAX_PREVIEW_DIMENSION, true)); + if (hasAI) { + this.#toggleGuessAltText(await isAltTextEnabledPromise, true); + } + } else { + ({ + canvas, + width, + height + } = editor.copyCanvas(AI_MAX_IMAGE_DIMENSION, MAX_PREVIEW_DIMENSION, false)); + } + canvas.setAttribute("role", "presentation"); + const { + style + } = canvas; + style.width = `${width}px`; + style.height = `${height}px`; + this.#imagePreview.append(canvas); + this.#toggleNotNow(); + this.#toggleAI(hasAI); + this.#toggleError(false); + try { + await this.#overlayManager.open(this.#dialog); + } catch (ex) { + this.#close(); + throw ex; + } + } + #cancel() { + this.#currentEditor.altTextData = { + cancel: true + }; + const altText = this.#textarea.value.trim(); + this.#currentEditor._reportTelemetry({ + action: "pdfjs.image.alt_text.dismiss", + data: { + alt_text_type: altText ? "present" : "empty", + flow: this.#firstTime ? "image_add" : "alt_text_edit" + } + }); + this.#currentEditor._reportTelemetry({ + action: "pdfjs.image.image_added", + data: { + alt_text_modal: true, + alt_text_type: "skipped" + } + }); + this.#finish(); + } + #finish() { + this.#overlayManager.closeIfActive(this.#dialog); + } + #close() { + const canvas = this.#imagePreview.firstChild; + canvas.remove(); + canvas.width = canvas.height = 0; + this.#imageData = null; + this.#toggleLoading(false); + this.#uiManager?.addEditListeners(); + this.#currentEditor.altTextFinish(); + this.#uiManager?.setSelected(this.#currentEditor); + this.#currentEditor = null; + this.#uiManager = null; + } + #extractWords(text) { + return new Set(text.toLowerCase().split(/[^\p{L}\p{N}]+/gu).filter(x => !!x)); + } + #save() { + const altText = this.#textarea.value.trim(); + this.#currentEditor.altTextData = { + altText, + decorative: false + }; + this.#currentEditor.altTextData.guessedAltText = this.#guessedAltText; + if (this.#guessedAltText && this.#guessedAltText !== altText) { + const guessedWords = this.#extractWords(this.#guessedAltText); + const words = this.#extractWords(altText); + this.#currentEditor._reportTelemetry({ + action: "pdfjs.image.alt_text.user_edit", + data: { + total_words: guessedWords.size, + words_removed: guessedWords.difference(words).size, + words_added: words.difference(guessedWords).size + } + }); + } + this.#currentEditor._reportTelemetry({ + action: "pdfjs.image.image_added", + data: { + alt_text_modal: true, + alt_text_type: altText ? "present" : "empty" + } + }); + this.#currentEditor._reportTelemetry({ + action: "pdfjs.image.alt_text.save", + data: { + alt_text_type: altText ? "present" : "empty", + flow: this.#firstTime ? "image_add" : "alt_text_edit" + } + }); + this.#finish(); + } + destroy() { + this.#uiManager = null; + this.#finish(); + } +} +class ImageAltTextSettings { + #aiModelSettings; + #createModelButton; + #downloadModelButton; + #dialog; + #eventBus; + #mlManager; + #overlayManager; + #showAltTextDialogButton; + constructor({ + dialog, + createModelButton, + aiModelSettings, + learnMore, + closeButton, + deleteModelButton, + downloadModelButton, + showAltTextDialogButton + }, overlayManager, eventBus, mlManager) { + this.#dialog = dialog; + this.#aiModelSettings = aiModelSettings; + this.#createModelButton = createModelButton; + this.#downloadModelButton = downloadModelButton; + this.#showAltTextDialogButton = showAltTextDialogButton; + this.#overlayManager = overlayManager; + this.#eventBus = eventBus; + this.#mlManager = mlManager; + const { + altTextLearnMoreUrl + } = mlManager; + if (altTextLearnMoreUrl) { + learnMore.href = altTextLearnMoreUrl; + } + dialog.addEventListener("contextmenu", noContextMenu); + createModelButton.addEventListener("click", async e => { + const checked = this.#togglePref("enableGuessAltText", e); + await mlManager.toggleService("altText", checked); + this.#reportTelemetry({ + type: "stamp", + action: "pdfjs.image.alt_text.settings_ai_generation_check", + data: { + status: checked + } + }); + }); + showAltTextDialogButton.addEventListener("click", e => { + const checked = this.#togglePref("enableNewAltTextWhenAddingImage", e); + this.#reportTelemetry({ + type: "stamp", + action: "pdfjs.image.alt_text.settings_edit_alt_text_check", + data: { + status: checked + } + }); + }); + deleteModelButton.addEventListener("click", this.#delete.bind(this, true)); + downloadModelButton.addEventListener("click", this.#download.bind(this, true)); + closeButton.addEventListener("click", this.#finish.bind(this)); + learnMore.addEventListener("click", () => { + this.#reportTelemetry({ + type: "stamp", + action: "pdfjs.image.alt_text.info", + data: { + topic: "ai_generation" + } + }); + }); + eventBus._on("enablealttextmodeldownload", ({ + value + }) => { + if (value) { + this.#download(false); + } else { + this.#delete(false); + } + }); + this.#overlayManager.register(dialog); + } + #reportTelemetry(data) { + this.#eventBus.dispatch("reporttelemetry", { + source: this, + details: { + type: "editing", + data + } + }); + } + async #download(isFromUI = false) { + if (isFromUI) { + this.#downloadModelButton.disabled = true; + const span = this.#downloadModelButton.firstChild; + span.setAttribute("data-l10n-id", "pdfjs-editor-alt-text-settings-downloading-model-button"); + await this.#mlManager.downloadModel("altText"); + span.setAttribute("data-l10n-id", "pdfjs-editor-alt-text-settings-download-model-button"); + this.#createModelButton.disabled = false; + this.#setPref("enableGuessAltText", true); + this.#mlManager.toggleService("altText", true); + this.#setPref("enableAltTextModelDownload", true); + this.#downloadModelButton.disabled = false; + } + this.#aiModelSettings.classList.toggle("download", false); + this.#createModelButton.setAttribute("aria-pressed", true); + } + async #delete(isFromUI = false) { + if (isFromUI) { + await this.#mlManager.deleteModel("altText"); + this.#setPref("enableGuessAltText", false); + this.#setPref("enableAltTextModelDownload", false); + } + this.#aiModelSettings.classList.toggle("download", true); + this.#createModelButton.disabled = true; + this.#createModelButton.setAttribute("aria-pressed", false); + } + async open({ + enableGuessAltText, + enableNewAltTextWhenAddingImage + }) { + const { + enableAltTextModelDownload + } = this.#mlManager; + this.#createModelButton.disabled = !enableAltTextModelDownload; + this.#createModelButton.setAttribute("aria-pressed", enableAltTextModelDownload && enableGuessAltText); + this.#showAltTextDialogButton.setAttribute("aria-pressed", enableNewAltTextWhenAddingImage); + this.#aiModelSettings.classList.toggle("download", !enableAltTextModelDownload); + await this.#overlayManager.open(this.#dialog); + this.#reportTelemetry({ + type: "stamp", + action: "pdfjs.image.alt_text.settings_displayed" + }); + } + #togglePref(name, { + target + }) { + const checked = target.getAttribute("aria-pressed") !== "true"; + this.#setPref(name, checked); + target.setAttribute("aria-pressed", checked); + return checked; + } + #setPref(name, value) { + this.#eventBus.dispatch("setpreference", { + source: this, + name, + value + }); + } + #finish() { + this.#overlayManager.closeIfActive(this.#dialog); + } +} + +;// ./web/alt_text_manager.js + +class AltTextManager { + #clickAC = null; + #currentEditor = null; + #cancelButton; + #dialog; + #eventBus; + #hasUsedPointer = false; + #optionDescription; + #optionDecorative; + #overlayManager; + #saveButton; + #textarea; + #uiManager; + #previousAltText = null; + #resizeAC = null; + #svgElement = null; + #rectElement = null; + #container; + #telemetryData = null; + constructor({ + dialog, + optionDescription, + optionDecorative, + textarea, + cancelButton, + saveButton + }, container, overlayManager, eventBus) { + this.#dialog = dialog; + this.#optionDescription = optionDescription; + this.#optionDecorative = optionDecorative; + this.#textarea = textarea; + this.#cancelButton = cancelButton; + this.#saveButton = saveButton; + this.#overlayManager = overlayManager; + this.#eventBus = eventBus; + this.#container = container; + const onUpdateUIState = this.#updateUIState.bind(this); + dialog.addEventListener("close", this.#close.bind(this)); + dialog.addEventListener("contextmenu", event => { + if (event.target !== this.#textarea) { + event.preventDefault(); + } + }); + cancelButton.addEventListener("click", this.#finish.bind(this)); + saveButton.addEventListener("click", this.#save.bind(this)); + optionDescription.addEventListener("change", onUpdateUIState); + optionDecorative.addEventListener("change", onUpdateUIState); + this.#overlayManager.register(dialog); + } + #createSVGElement() { + if (this.#svgElement) { + return; + } + const svgFactory = new DOMSVGFactory(); + const svg = this.#svgElement = svgFactory.createElement("svg"); + svg.setAttribute("width", "0"); + svg.setAttribute("height", "0"); + const defs = svgFactory.createElement("defs"); + svg.append(defs); + const mask = svgFactory.createElement("mask"); + defs.append(mask); + mask.setAttribute("id", "alttext-manager-mask"); + mask.setAttribute("maskContentUnits", "objectBoundingBox"); + let rect = svgFactory.createElement("rect"); + mask.append(rect); + rect.setAttribute("fill", "white"); + rect.setAttribute("width", "1"); + rect.setAttribute("height", "1"); + rect.setAttribute("x", "0"); + rect.setAttribute("y", "0"); + rect = this.#rectElement = svgFactory.createElement("rect"); + mask.append(rect); + rect.setAttribute("fill", "black"); + this.#dialog.append(svg); + } + async editAltText(uiManager, editor) { + if (this.#currentEditor || !editor) { + return; + } + this.#createSVGElement(); + this.#hasUsedPointer = false; + this.#clickAC = new AbortController(); + const clickOpts = { + signal: this.#clickAC.signal + }, + onClick = this.#onClick.bind(this); + for (const element of [this.#optionDescription, this.#optionDecorative, this.#textarea, this.#saveButton, this.#cancelButton]) { + element.addEventListener("click", onClick, clickOpts); + } + const { + altText, + decorative + } = editor.altTextData; + if (decorative === true) { + this.#optionDecorative.checked = true; + this.#optionDescription.checked = false; + } else { + this.#optionDecorative.checked = false; + this.#optionDescription.checked = true; + } + this.#previousAltText = this.#textarea.value = altText?.trim() || ""; + this.#updateUIState(); + this.#currentEditor = editor; + this.#uiManager = uiManager; + this.#uiManager.removeEditListeners(); + this.#resizeAC = new AbortController(); + this.#eventBus._on("resize", this.#setPosition.bind(this), { + signal: this.#resizeAC.signal + }); + try { + await this.#overlayManager.open(this.#dialog); + this.#setPosition(); + } catch (ex) { + this.#close(); + throw ex; + } + } + #setPosition() { + if (!this.#currentEditor) { + return; + } + const dialog = this.#dialog; + const { + style + } = dialog; + const { + x: containerX, + y: containerY, + width: containerW, + height: containerH + } = this.#container.getBoundingClientRect(); + const { + innerWidth: windowW, + innerHeight: windowH + } = window; + const { + width: dialogW, + height: dialogH + } = dialog.getBoundingClientRect(); + const { + x, + y, + width, + height + } = this.#currentEditor.getClientDimensions(); + const MARGIN = 10; + const isLTR = this.#uiManager.direction === "ltr"; + const xs = Math.max(x, containerX); + const xe = Math.min(x + width, containerX + containerW); + const ys = Math.max(y, containerY); + const ye = Math.min(y + height, containerY + containerH); + this.#rectElement.setAttribute("width", `${(xe - xs) / windowW}`); + this.#rectElement.setAttribute("height", `${(ye - ys) / windowH}`); + this.#rectElement.setAttribute("x", `${xs / windowW}`); + this.#rectElement.setAttribute("y", `${ys / windowH}`); + let left = null; + let top = Math.max(y, 0); + top += Math.min(windowH - (top + dialogH), 0); + if (isLTR) { + if (x + width + MARGIN + dialogW < windowW) { + left = x + width + MARGIN; + } else if (x > dialogW + MARGIN) { + left = x - dialogW - MARGIN; + } + } else if (x > dialogW + MARGIN) { + left = x - dialogW - MARGIN; + } else if (x + width + MARGIN + dialogW < windowW) { + left = x + width + MARGIN; + } + if (left === null) { + top = null; + left = Math.max(x, 0); + left += Math.min(windowW - (left + dialogW), 0); + if (y > dialogH + MARGIN) { + top = y - dialogH - MARGIN; + } else if (y + height + MARGIN + dialogH < windowH) { + top = y + height + MARGIN; + } + } + if (top !== null) { + dialog.classList.add("positioned"); + if (isLTR) { + style.left = `${left}px`; + } else { + style.right = `${windowW - left - dialogW}px`; + } + style.top = `${top}px`; + } else { + dialog.classList.remove("positioned"); + style.left = ""; + style.top = ""; + } + } + #finish() { + this.#overlayManager.closeIfActive(this.#dialog); + } + #close() { + this.#currentEditor._reportTelemetry(this.#telemetryData || { + action: "alt_text_cancel", + alt_text_keyboard: !this.#hasUsedPointer + }); + this.#telemetryData = null; + this.#removeOnClickListeners(); + this.#uiManager?.addEditListeners(); + this.#resizeAC?.abort(); + this.#resizeAC = null; + this.#currentEditor.altTextFinish(); + this.#currentEditor = null; + this.#uiManager = null; + } + #updateUIState() { + this.#textarea.disabled = this.#optionDecorative.checked; + } + #save() { + const altText = this.#textarea.value.trim(); + const decorative = this.#optionDecorative.checked; + this.#currentEditor.altTextData = { + altText, + decorative + }; + this.#telemetryData = { + action: "alt_text_save", + alt_text_description: !!altText, + alt_text_edit: !!this.#previousAltText && this.#previousAltText !== altText, + alt_text_decorative: decorative, + alt_text_keyboard: !this.#hasUsedPointer + }; + this.#finish(); + } + #onClick(evt) { + if (evt.detail === 0) { + return; + } + this.#hasUsedPointer = true; + this.#removeOnClickListeners(); + } + #removeOnClickListeners() { + this.#clickAC?.abort(); + this.#clickAC = null; + } + destroy() { + this.#uiManager = null; + this.#finish(); + this.#svgElement?.remove(); + this.#svgElement = this.#rectElement = null; + } +} + +;// ./web/annotation_editor_params.js + +class AnnotationEditorParams { + constructor(options, eventBus) { + this.eventBus = eventBus; + this.#bindListeners(options); + } + #bindListeners({ + editorFreeTextFontSize, + editorFreeTextColor, + editorInkColor, + editorInkThickness, + editorInkOpacity, + editorStampAddImage, + editorFreeHighlightThickness, + editorHighlightShowAll, + editorSignatureAddSignature + }) { + const { + eventBus + } = this; + const dispatchEvent = (typeStr, value) => { + eventBus.dispatch("switchannotationeditorparams", { + source: this, + type: AnnotationEditorParamsType[typeStr], + value + }); + }; + editorFreeTextFontSize.addEventListener("input", function () { + dispatchEvent("FREETEXT_SIZE", this.valueAsNumber); + }); + editorFreeTextColor.addEventListener("input", function () { + dispatchEvent("FREETEXT_COLOR", this.value); + }); + editorInkColor.addEventListener("input", function () { + dispatchEvent("INK_COLOR", this.value); + }); + editorInkThickness.addEventListener("input", function () { + dispatchEvent("INK_THICKNESS", this.valueAsNumber); + }); + editorInkOpacity.addEventListener("input", function () { + dispatchEvent("INK_OPACITY", this.valueAsNumber); + }); + editorStampAddImage.addEventListener("click", () => { + eventBus.dispatch("reporttelemetry", { + source: this, + details: { + type: "editing", + data: { + action: "pdfjs.image.add_image_click" + } + } + }); + dispatchEvent("CREATE"); + }); + editorFreeHighlightThickness.addEventListener("input", function () { + dispatchEvent("HIGHLIGHT_THICKNESS", this.valueAsNumber); + }); + editorHighlightShowAll.addEventListener("click", function () { + const checked = this.getAttribute("aria-pressed") === "true"; + this.setAttribute("aria-pressed", !checked); + dispatchEvent("HIGHLIGHT_SHOW_ALL", !checked); + }); + editorSignatureAddSignature.addEventListener("click", () => { + dispatchEvent("CREATE"); + }); + eventBus._on("annotationeditorparamschanged", evt => { + for (const [type, value] of evt.details) { + switch (type) { + case AnnotationEditorParamsType.FREETEXT_SIZE: + editorFreeTextFontSize.value = value; + break; + case AnnotationEditorParamsType.FREETEXT_COLOR: + editorFreeTextColor.value = value; + break; + case AnnotationEditorParamsType.INK_COLOR: + editorInkColor.value = value; + break; + case AnnotationEditorParamsType.INK_THICKNESS: + editorInkThickness.value = value; + break; + case AnnotationEditorParamsType.INK_OPACITY: + editorInkOpacity.value = value; + break; + case AnnotationEditorParamsType.HIGHLIGHT_COLOR: + eventBus.dispatch("mainhighlightcolorpickerupdatecolor", { + source: this, + value + }); + break; + case AnnotationEditorParamsType.HIGHLIGHT_THICKNESS: + editorFreeHighlightThickness.value = value; + break; + case AnnotationEditorParamsType.HIGHLIGHT_FREE: + editorFreeHighlightThickness.disabled = !value; + break; + case AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL: + editorHighlightShowAll.setAttribute("aria-pressed", value); + break; + } + } + }); + } +} + +;// ./web/caret_browsing.js +const PRECISION = 1e-1; +class CaretBrowsingMode { + #mainContainer; + #toolBarHeight = 0; + #viewerContainer; + constructor(abortSignal, mainContainer, viewerContainer, toolbarContainer) { + this.#mainContainer = mainContainer; + this.#viewerContainer = viewerContainer; + if (!toolbarContainer) { + return; + } + this.#toolBarHeight = toolbarContainer.getBoundingClientRect().height; + const toolbarObserver = new ResizeObserver(entries => { + for (const entry of entries) { + if (entry.target === toolbarContainer) { + this.#toolBarHeight = Math.floor(entry.borderBoxSize[0].blockSize); + break; + } + } + }); + toolbarObserver.observe(toolbarContainer); + abortSignal.addEventListener("abort", () => toolbarObserver.disconnect(), { + once: true + }); + } + #isOnSameLine(rect1, rect2) { + const top1 = rect1.y; + const bot1 = rect1.bottom; + const mid1 = rect1.y + rect1.height / 2; + const top2 = rect2.y; + const bot2 = rect2.bottom; + const mid2 = rect2.y + rect2.height / 2; + return top1 <= mid2 && mid2 <= bot1 || top2 <= mid1 && mid1 <= bot2; + } + #isUnderOver(rect, x, y, isUp) { + const midY = rect.y + rect.height / 2; + return (isUp ? y >= midY : y <= midY) && rect.x - PRECISION <= x && x <= rect.right + PRECISION; + } + #isVisible(rect) { + return rect.top >= this.#toolBarHeight && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth); + } + #getCaretPosition(selection, isUp) { + const { + focusNode, + focusOffset + } = selection; + const range = document.createRange(); + range.setStart(focusNode, focusOffset); + range.setEnd(focusNode, focusOffset); + const rect = range.getBoundingClientRect(); + return [rect.x, isUp ? rect.top : rect.bottom]; + } + static #caretPositionFromPoint(x, y) { + if (!document.caretPositionFromPoint) { + const { + startContainer: offsetNode, + startOffset: offset + } = document.caretRangeFromPoint(x, y); + return { + offsetNode, + offset + }; + } + return document.caretPositionFromPoint(x, y); + } + #setCaretPositionHelper(selection, caretX, select, element, rect) { + rect ||= element.getBoundingClientRect(); + if (caretX <= rect.x + PRECISION) { + if (select) { + selection.extend(element.firstChild, 0); + } else { + selection.setPosition(element.firstChild, 0); + } + return; + } + if (rect.right - PRECISION <= caretX) { + const { + lastChild + } = element; + if (select) { + selection.extend(lastChild, lastChild.length); + } else { + selection.setPosition(lastChild, lastChild.length); + } + return; + } + const midY = rect.y + rect.height / 2; + let caretPosition = CaretBrowsingMode.#caretPositionFromPoint(caretX, midY); + let parentElement = caretPosition.offsetNode?.parentElement; + if (parentElement && parentElement !== element) { + const elementsAtPoint = document.elementsFromPoint(caretX, midY); + const savedVisibilities = []; + for (const el of elementsAtPoint) { + if (el === element) { + break; + } + const { + style + } = el; + savedVisibilities.push([el, style.visibility]); + style.visibility = "hidden"; + } + caretPosition = CaretBrowsingMode.#caretPositionFromPoint(caretX, midY); + parentElement = caretPosition.offsetNode?.parentElement; + for (const [el, visibility] of savedVisibilities) { + el.style.visibility = visibility; + } + } + if (parentElement !== element) { + if (select) { + selection.extend(element.firstChild, 0); + } else { + selection.setPosition(element.firstChild, 0); + } + return; + } + if (select) { + selection.extend(caretPosition.offsetNode, caretPosition.offset); + } else { + selection.setPosition(caretPosition.offsetNode, caretPosition.offset); + } + } + #setCaretPosition(select, selection, newLineElement, newLineElementRect, caretX) { + if (this.#isVisible(newLineElementRect)) { + this.#setCaretPositionHelper(selection, caretX, select, newLineElement, newLineElementRect); + return; + } + this.#mainContainer.addEventListener("scrollend", this.#setCaretPositionHelper.bind(this, selection, caretX, select, newLineElement, null), { + once: true + }); + newLineElement.scrollIntoView(); + } + #getNodeOnNextPage(textLayer, isUp) { + while (true) { + const page = textLayer.closest(".page"); + const pageNumber = parseInt(page.getAttribute("data-page-number")); + const nextPage = isUp ? pageNumber - 1 : pageNumber + 1; + textLayer = this.#viewerContainer.querySelector(`.page[data-page-number="${nextPage}"] .textLayer`); + if (!textLayer) { + return null; + } + const walker = document.createTreeWalker(textLayer, NodeFilter.SHOW_TEXT); + const node = isUp ? walker.lastChild() : walker.firstChild(); + if (node) { + return node; + } + } + } + moveCaret(isUp, select) { + const selection = document.getSelection(); + if (selection.rangeCount === 0) { + return; + } + const { + focusNode + } = selection; + const focusElement = focusNode.nodeType !== Node.ELEMENT_NODE ? focusNode.parentElement : focusNode; + const root = focusElement.closest(".textLayer"); + if (!root) { + return; + } + const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT); + walker.currentNode = focusNode; + const focusRect = focusElement.getBoundingClientRect(); + let newLineElement = null; + const nodeIterator = (isUp ? walker.previousSibling : walker.nextSibling).bind(walker); + while (nodeIterator()) { + const element = walker.currentNode.parentElement; + if (!this.#isOnSameLine(focusRect, element.getBoundingClientRect())) { + newLineElement = element; + break; + } + } + if (!newLineElement) { + const node = this.#getNodeOnNextPage(root, isUp); + if (!node) { + return; + } + if (select) { + const lastNode = (isUp ? walker.firstChild() : walker.lastChild()) || focusNode; + selection.extend(lastNode, isUp ? 0 : lastNode.length); + const range = document.createRange(); + range.setStart(node, isUp ? node.length : 0); + range.setEnd(node, isUp ? node.length : 0); + selection.addRange(range); + return; + } + const [caretX] = this.#getCaretPosition(selection, isUp); + const { + parentElement + } = node; + this.#setCaretPosition(select, selection, parentElement, parentElement.getBoundingClientRect(), caretX); + return; + } + const [caretX, caretY] = this.#getCaretPosition(selection, isUp); + const newLineElementRect = newLineElement.getBoundingClientRect(); + if (this.#isUnderOver(newLineElementRect, caretX, caretY, isUp)) { + this.#setCaretPosition(select, selection, newLineElement, newLineElementRect, caretX); + return; + } + while (nodeIterator()) { + const element = walker.currentNode.parentElement; + const elementRect = element.getBoundingClientRect(); + if (!this.#isOnSameLine(newLineElementRect, elementRect)) { + break; + } + if (this.#isUnderOver(elementRect, caretX, caretY, isUp)) { + this.#setCaretPosition(select, selection, element, elementRect, caretX); + return; + } + } + this.#setCaretPosition(select, selection, newLineElement, newLineElementRect, caretX); + } +} + +;// ./web/comment_manager.js + + +class CommentManager { + #dialog; + #popup; + #sidebar; + static #hasForcedColors = null; + constructor(commentDialog, sidebar, eventBus, linkService, overlayManager, ltr, hasForcedColors) { + const dateFormat = new Intl.DateTimeFormat(undefined, { + dateStyle: "long" + }); + this.dialogElement = commentDialog.dialog; + this.#dialog = new CommentDialog(commentDialog, overlayManager, eventBus, ltr); + this.#popup = new CommentPopup(eventBus, dateFormat, ltr, this.dialogElement); + this.#sidebar = new CommentSidebar(sidebar, eventBus, linkService, this.#popup, dateFormat, ltr); + this.#popup.sidebar = this.#sidebar; + CommentManager.#hasForcedColors = hasForcedColors; + } + setSidebarUiManager(uiManager) { + this.#sidebar.setUIManager(uiManager); + } + showSidebar(annotations) { + this.#sidebar.show(annotations); + } + hideSidebar() { + this.#sidebar.hide(); + } + removeComments(ids) { + this.#sidebar.removeComments(ids); + } + selectComment(id) { + this.#sidebar.selectComment(null, id); + } + addComment(annotation) { + this.#sidebar.addComment(annotation); + } + updateComment(annotation) { + this.#sidebar.updateComment(annotation); + } + toggleCommentPopup(editor, isSelected, visibility, isEditable) { + if (isSelected) { + this.selectComment(editor.uid); + } + this.#popup.toggle(editor, isSelected, visibility, isEditable); + } + destroyPopup() { + this.#popup.destroy(); + } + updatePopupColor(editor) { + this.#popup.updateColor(editor); + } + showDialog(uiManager, editor, posX, posY, options) { + return this.#dialog.open(uiManager, editor, posX, posY, options); + } + makeCommentColor(color, opacity) { + return CommentManager._makeCommentColor(color, opacity); + } + static _makeCommentColor(color, opacity) { + return this.#hasForcedColors ? null : findContrastColor(applyOpacity(...color, opacity ?? 1), CSSConstants.commentForegroundColor); + } + destroy() { + this.#dialog.destroy(); + this.#sidebar.hide(); + this.#popup.destroy(); + } +} +class CommentSidebar { + #annotations = null; + #eventBus; + #boundCommentClick = this.#commentClick.bind(this); + #boundCommentKeydown = this.#commentKeydown.bind(this); + #sidebar; + #closeButton; + #commentsList; + #commentCount; + #dateFormat; + #sidebarTitle; + #learnMoreUrl; + #linkService; + #popup; + #elementsToAnnotations = null; + #idsToElements = null; + #uiManager = null; + #minWidth = 0; + #maxWidth = 0; + #initialWidth = 0; + #width = 0; + #ltr; + constructor({ + learnMoreUrl, + sidebar, + sidebarResizer, + commentsList, + commentCount, + sidebarTitle, + closeButton, + commentToolbarButton + }, eventBus, linkService, popup, dateFormat, ltr) { + this.#sidebar = sidebar; + this.#sidebarTitle = sidebarTitle; + this.#commentsList = commentsList; + this.#commentCount = commentCount; + this.#learnMoreUrl = learnMoreUrl; + this.#linkService = linkService; + this.#closeButton = closeButton; + this.#popup = popup; + this.#dateFormat = dateFormat; + this.#ltr = ltr; + this.#eventBus = eventBus; + const style = window.getComputedStyle(sidebar); + this.#minWidth = parseFloat(style.getPropertyValue("--sidebar-min-width")); + this.#maxWidth = parseFloat(style.getPropertyValue("--sidebar-max-width")); + this.#initialWidth = this.#width = parseFloat(style.getPropertyValue("--sidebar-width")); + this.#makeSidebarResizable(sidebarResizer); + closeButton.addEventListener("click", () => { + eventBus.dispatch("switchannotationeditormode", { + source: this, + mode: AnnotationEditorType.NONE + }); + }); + const keyDownCallback = e => { + if (e.key === "ArrowDown" || e.key === "Home" || e.key === "F6") { + this.#commentsList.firstElementChild.focus(); + stopEvent(e); + } else if (e.key === "ArrowUp" || e.key === "End") { + this.#commentsList.lastElementChild.focus(); + stopEvent(e); + } + }; + commentToolbarButton.addEventListener("keydown", keyDownCallback); + sidebar.addEventListener("keydown", keyDownCallback); + this.#sidebar.hidden = true; + } + #makeSidebarResizable(resizer) { + let pointerMoveAC; + const cancelResize = () => { + this.#width = MathClamp(this.#width, this.#minWidth, this.#maxWidth); + this.#sidebar.classList.remove("resizing"); + pointerMoveAC?.abort(); + pointerMoveAC = null; + }; + resizer.addEventListener("pointerdown", e => { + if (pointerMoveAC) { + cancelResize(); + return; + } + const { + clientX + } = e; + stopEvent(e); + let prevX = clientX; + pointerMoveAC = new AbortController(); + const { + signal + } = pointerMoveAC; + const sign = this.#ltr ? -1 : 1; + const sidebar = this.#sidebar; + const sidebarStyle = sidebar.style; + sidebar.classList.add("resizing"); + const parentStyle = sidebar.parentElement.style; + parentStyle.minWidth = 0; + window.addEventListener("contextmenu", noContextMenu, { + signal + }); + window.addEventListener("pointermove", ev => { + if (!pointerMoveAC) { + return; + } + stopEvent(ev); + const { + clientX: x + } = ev; + const newWidth = this.#width += sign * (x - prevX); + prevX = x; + if (newWidth > this.#maxWidth || newWidth < this.#minWidth) { + return; + } + sidebarStyle.width = `${newWidth.toFixed(3)}px`; + parentStyle.insetInlineStart = `${(this.#initialWidth - newWidth).toFixed(3)}px`; + }, { + signal, + capture: true + }); + window.addEventListener("blur", cancelResize, { + signal + }); + window.addEventListener("pointerup", ev => { + if (pointerMoveAC) { + cancelResize(); + stopEvent(ev); + } + }, { + signal + }); + }); + } + setUIManager(uiManager) { + this.#uiManager = uiManager; + } + show(annotations) { + this.#elementsToAnnotations = new WeakMap(); + this.#idsToElements = new Map(); + this.#annotations = annotations; + annotations.sort(this.#sortComments.bind(this)); + if (annotations.length !== 0) { + const fragment = document.createDocumentFragment(); + for (const annotation of annotations) { + fragment.append(this.#createCommentElement(annotation)); + } + this.#setCommentsCount(fragment); + this.#commentsList.append(fragment); + } else { + this.#setCommentsCount(); + } + this.#sidebar.hidden = false; + this.#eventBus.dispatch("reporttelemetry", { + source: this, + details: { + type: "commentSidebar", + data: { + numberOfAnnotations: annotations.length + } + } + }); + } + hide() { + this.#sidebar.hidden = true; + this.#commentsList.replaceChildren(); + this.#elementsToAnnotations = null; + this.#idsToElements = null; + this.#annotations = null; + } + removeComments(ids) { + if (ids.length === 0 || !this.#idsToElements) { + return; + } + if (new Set(this.#idsToElements.keys()).difference(new Set(ids)).size === 0) { + this.#removeAll(); + return; + } + for (const id of ids) { + this.#removeComment(id); + } + } + focusComment(id) { + const element = this.#idsToElements.get(id); + if (!element) { + return; + } + this.#sidebar.scrollTop = element.offsetTop - this.#sidebar.offsetTop; + for (const el of this.#commentsList.children) { + el.classList.toggle("selected", el === element); + } + } + updateComment(annotation) { + if (!this.#idsToElements) { + return; + } + const { + id, + creationDate, + modificationDate, + richText, + contentsObj, + popupRef + } = annotation; + if (!popupRef || !richText && !contentsObj?.str) { + this.#removeComment(id); + } + const element = this.#idsToElements.get(id); + if (!element) { + return; + } + const prevAnnotation = this.#elementsToAnnotations.get(element); + let index = binarySearchFirstItem(this.#annotations, a => this.#sortComments(a, prevAnnotation) >= 0); + if (index >= this.#annotations.length) { + return; + } + this.#setDate(element.firstChild, modificationDate || creationDate); + this.#setText(element.lastChild, richText, contentsObj); + this.#annotations.splice(index, 1); + index = binarySearchFirstItem(this.#annotations, a => this.#sortComments(a, annotation) >= 0); + this.#annotations.splice(index, 0, annotation); + if (index >= this.#commentsList.children.length) { + this.#commentsList.append(element); + } else { + this.#commentsList.insertBefore(element, this.#commentsList.children[index]); + } + } + #removeComment(id) { + const element = this.#idsToElements?.get(id); + if (!element) { + return; + } + const annotation = this.#elementsToAnnotations.get(element); + const index = binarySearchFirstItem(this.#annotations, a => this.#sortComments(a, annotation) >= 0); + if (index >= this.#annotations.length) { + return; + } + this.#annotations.splice(index, 1); + element.remove(); + this.#idsToElements.delete(id); + this.#setCommentsCount(); + } + #removeAll() { + this.#commentsList.replaceChildren(); + this.#elementsToAnnotations = new WeakMap(); + this.#idsToElements.clear(); + this.#annotations.length = 0; + this.#setCommentsCount(); + } + selectComment(element, id = null) { + if (!this.#idsToElements) { + return; + } + const hasNoElement = !element; + element ||= this.#idsToElements.get(id); + for (const el of this.#commentsList.children) { + el.classList.toggle("selected", el === element); + } + if (hasNoElement) { + element?.scrollIntoView({ + behavior: "instant", + block: "center" + }); + } + } + addComment(annotation) { + if (this.#idsToElements?.has(annotation.id)) { + return; + } + const { + popupRef, + contentsObj + } = annotation; + if (!popupRef || !contentsObj?.str) { + return; + } + const commentItem = this.#createCommentElement(annotation); + if (this.#annotations.length === 0) { + this.#commentsList.replaceChildren(commentItem); + this.#annotations.push(annotation); + this.#setCommentsCount(); + return; + } + const index = binarySearchFirstItem(this.#annotations, a => this.#sortComments(a, annotation) >= 0); + this.#annotations.splice(index, 0, annotation); + if (index >= this.#commentsList.children.length) { + this.#commentsList.append(commentItem); + } else { + this.#commentsList.insertBefore(commentItem, this.#commentsList.children[index]); + } + this.#setCommentsCount(); + } + #setCommentsCount(container = this.#commentsList) { + const count = this.#idsToElements.size; + this.#sidebarTitle.setAttribute("data-l10n-args", JSON.stringify({ + count + })); + this.#commentCount.textContent = count; + if (count === 0) { + container.append(this.#createZeroCommentElement()); + } + } + #createZeroCommentElement() { + const commentItem = document.createElement("li"); + commentItem.classList.add("sidebarComment", "noComments"); + const textDiv = document.createElement("div"); + textDiv.className = "sidebarCommentText"; + textDiv.setAttribute("data-l10n-id", "pdfjs-editor-comments-sidebar-no-comments1"); + commentItem.append(textDiv); + if (this.#learnMoreUrl) { + const a = document.createElement("a"); + a.setAttribute("data-l10n-id", "pdfjs-editor-comments-sidebar-no-comments-link"); + a.href = this.#learnMoreUrl; + a.target = "_blank"; + a.rel = "noopener noreferrer"; + commentItem.append(a); + } + return commentItem; + } + #setDate(element, date) { + date = PDFDateString.toDateObject(date); + element.dateTime = date.toISOString(); + element.textContent = this.#dateFormat.format(date); + } + #setText(element, richText, contentsObj) { + element.replaceChildren(); + const html = richText?.str && (!contentsObj?.str || richText.str === contentsObj.str) ? richText.html : contentsObj?.str; + renderRichText({ + html, + dir: contentsObj?.dir || "auto", + className: "richText" + }, element); + } + #createCommentElement(annotation) { + const { + id, + creationDate, + modificationDate, + richText, + contentsObj, + color, + opacity + } = annotation; + const commentItem = document.createElement("li"); + commentItem.role = "button"; + commentItem.className = "sidebarComment"; + commentItem.tabIndex = -1; + commentItem.style.backgroundColor = color && CommentManager._makeCommentColor(color, opacity) || ""; + const dateDiv = document.createElement("time"); + this.#setDate(dateDiv, modificationDate || creationDate); + const textDiv = document.createElement("div"); + textDiv.className = "sidebarCommentText"; + this.#setText(textDiv, richText, contentsObj); + commentItem.append(dateDiv, textDiv); + commentItem.addEventListener("click", this.#boundCommentClick); + commentItem.addEventListener("keydown", this.#boundCommentKeydown); + this.#elementsToAnnotations.set(commentItem, annotation); + this.#idsToElements.set(id, commentItem); + return commentItem; + } + async #commentClick({ + currentTarget + }) { + if (currentTarget.classList.contains("selected")) { + currentTarget.classList.remove("selected"); + this.#popup._hide(); + return; + } + const annotation = this.#elementsToAnnotations.get(currentTarget); + if (!annotation) { + return; + } + this.#popup._hide(); + const { + id, + pageIndex, + rect + } = annotation; + const pageNumber = pageIndex + 1; + const pageVisiblePromise = this.#uiManager?.waitForEditorsRendered(pageNumber); + this.#linkService?.goToXY(pageNumber, rect[0], rect[3], { + center: "both" + }); + this.selectComment(currentTarget); + await pageVisiblePromise; + this.#uiManager?.selectComment(pageIndex, id); + } + #commentKeydown(e) { + const { + key, + currentTarget + } = e; + switch (key) { + case "ArrowDown": + (currentTarget.nextElementSibling || this.#commentsList.firstElementChild).focus(); + stopEvent(e); + break; + case "ArrowUp": + (currentTarget.previousElementSibling || this.#commentsList.lastElementChild).focus(); + stopEvent(e); + break; + case "Home": + this.#commentsList.firstElementChild.focus(); + stopEvent(e); + break; + case "End": + this.#commentsList.lastElementChild.focus(); + stopEvent(e); + break; + case "Enter": + case " ": + this.#commentClick(e); + stopEvent(e); + break; + case "ShiftTab": + this.#closeButton.focus(); + stopEvent(e); + break; + } + } + #sortComments(a, b) { + const dateA = PDFDateString.toDateObject(a.modificationDate || a.creationDate); + const dateB = PDFDateString.toDateObject(b.modificationDate || b.creationDate); + if (dateA !== dateB) { + if (dateA !== null && dateB !== null) { + return dateB - dateA; + } + return dateA !== null ? -1 : 1; + } + if (a.pageIndex !== b.pageIndex) { + return a.pageIndex - b.pageIndex; + } + if (a.rect[3] !== b.rect[3]) { + return b.rect[3] - a.rect[3]; + } + if (a.rect[0] !== b.rect[0]) { + return a.rect[0] - b.rect[0]; + } + if (a.rect[1] !== b.rect[1]) { + return b.rect[1] - a.rect[1]; + } + if (a.rect[2] !== b.rect[2]) { + return a.rect[2] - b.rect[2]; + } + return a.id.localeCompare(b.id); + } +} +class CommentDialog { + #dialog; + #editor; + #overlayManager; + #previousText = ""; + #commentText = ""; + #textInput; + #title; + #saveButton; + #uiManager; + #prevDragX = 0; + #prevDragY = 0; + #dialogX = 0; + #dialogY = 0; + #isLTR; + #eventBus; + constructor({ + dialog, + toolbar, + title, + textInput, + cancelButton, + saveButton + }, overlayManager, eventBus, ltr) { + this.#dialog = dialog; + this.#textInput = textInput; + this.#overlayManager = overlayManager; + this.#eventBus = eventBus; + this.#saveButton = saveButton; + this.#title = title; + this.#isLTR = ltr; + const finishBound = this.#finish.bind(this); + dialog.addEventListener("close", finishBound); + dialog.addEventListener("contextmenu", e => { + if (e.target !== this.#textInput) { + e.preventDefault(); + } + }); + cancelButton.addEventListener("click", finishBound); + saveButton.addEventListener("click", this.#save.bind(this)); + textInput.addEventListener("input", () => { + saveButton.disabled = textInput.value === this.#previousText; + }); + let pointerMoveAC; + const cancelDrag = () => { + dialog.classList.remove("dragging"); + pointerMoveAC?.abort(); + pointerMoveAC = null; + }; + toolbar.addEventListener("pointerdown", e => { + if (pointerMoveAC) { + cancelDrag(); + return; + } + const { + clientX, + clientY + } = e; + stopEvent(e); + this.#prevDragX = clientX; + this.#prevDragY = clientY; + pointerMoveAC = new AbortController(); + const { + signal + } = pointerMoveAC; + const { + innerHeight, + innerWidth + } = window; + dialog.classList.add("dragging"); + window.addEventListener("pointermove", ev => { + if (!pointerMoveAC) { + return; + } + const { + clientX: x, + clientY: y + } = ev; + this.#setPosition(this.#dialogX + (x - this.#prevDragX) / innerWidth, this.#dialogY + (y - this.#prevDragY) / innerHeight); + this.#prevDragX = x; + this.#prevDragY = y; + stopEvent(ev); + }, { + signal + }); + window.addEventListener("blur", cancelDrag, { + signal + }); + window.addEventListener("pointerup", ev => { + if (pointerMoveAC) { + cancelDrag(); + stopEvent(ev); + } + }, { + signal + }); + }); + overlayManager.register(dialog); + } + async open(uiManager, editor, posX, posY, options) { + if (editor) { + this.#uiManager = uiManager; + this.#editor = editor; + } + const { + contentsObj: { + str + }, + color, + opacity + } = editor.getData(); + const { + style: dialogStyle + } = this.#dialog; + if (color) { + dialogStyle.backgroundColor = CommentManager._makeCommentColor(color, opacity); + dialogStyle.borderColor = Util.makeHexColor(...color); + } else { + dialogStyle.backgroundColor = dialogStyle.borderColor = ""; + } + this.#commentText = str || ""; + const textInput = this.#textInput; + textInput.value = this.#previousText = this.#commentText; + if (str) { + this.#title.setAttribute("data-l10n-id", "pdfjs-editor-edit-comment-dialog-title-when-editing"); + this.#saveButton.setAttribute("data-l10n-id", "pdfjs-editor-edit-comment-dialog-save-button-when-editing"); + } else { + this.#title.setAttribute("data-l10n-id", "pdfjs-editor-edit-comment-dialog-title-when-adding"); + this.#saveButton.setAttribute("data-l10n-id", "pdfjs-editor-edit-comment-dialog-save-button-when-adding"); + } + if (options?.height) { + textInput.style.height = `${options.height}px`; + } + this.#uiManager?.removeEditListeners(); + this.#saveButton.disabled = true; + const parentDimensions = options?.parentDimensions; + const { + innerHeight, + innerWidth + } = window; + if (editor.hasDefaultPopupPosition()) { + const { + dialogWidth, + dialogHeight + } = this._dialogDimensions; + if (parentDimensions) { + if (this.#isLTR && posX + dialogWidth > Math.min(parentDimensions.x + parentDimensions.width, innerWidth)) { + const buttonWidth = this.#editor.commentButtonWidth; + posX -= dialogWidth - buttonWidth * parentDimensions.width; + } else if (!this.#isLTR) { + const buttonWidth = this.#editor.commentButtonWidth * parentDimensions.width; + if (posX - dialogWidth < Math.max(0, parentDimensions.x)) { + posX = Math.max(0, posX); + } else { + posX -= dialogWidth - buttonWidth; + } + } + } + const height = Math.max(dialogHeight, options?.height || 0); + if (posY + height > innerHeight) { + posY = innerHeight - height; + } + if (posY < 0) { + posY = 0; + } + } + posX = MathClamp(posX / innerWidth, 0, 1); + posY = MathClamp(posY / innerHeight, 0, 1); + this.#setPosition(posX, posY); + await this.#overlayManager.open(this.#dialog); + textInput.focus(); + } + async #save() { + this.#editor.comment = this.#textInput.value; + this.#finish(); + } + get _dialogDimensions() { + const dialog = this.#dialog; + const { + style + } = dialog; + style.opacity = "0"; + style.display = "block"; + const { + width, + height + } = dialog.getBoundingClientRect(); + style.opacity = style.display = ""; + return shadow(this, "_dialogDimensions", { + dialogWidth: width, + dialogHeight: height + }); + } + #setPosition(x, y) { + this.#dialogX = x; + this.#dialogY = y; + const { + style + } = this.#dialog; + style.left = `${100 * x}%`; + style.top = `${100 * y}%`; + } + #finish() { + if (!this.#editor) { + return; + } + const edited = this.#textInput.value !== this.#commentText; + this.#eventBus.dispatch("reporttelemetry", { + source: this, + details: { + type: "comment", + data: { + edited + } + } + }); + this.#editor?.focusCommentButton(); + this.#editor = null; + this.#textInput.value = this.#previousText = this.#commentText = ""; + this.#overlayManager.closeIfActive(this.#dialog); + this.#textInput.style.height = ""; + this.#uiManager?.addEditListeners(); + this.#uiManager = null; + } + destroy() { + this.#uiManager = null; + this.#editor = null; + this.#finish(); + } +} +class CommentPopup { + #buttonsContainer = null; + #eventBus; + #commentDialog; + #dateFormat; + #editor = null; + #isLTR; + #container = null; + #text = null; + #time = null; + #prevDragX = 0; + #prevDragY = 0; + #posX = 0; + #posY = 0; + #previousFocusedElement = null; + #selected = false; + #visible = false; + constructor(eventBus, dateFormat, ltr, commentDialog) { + this.#eventBus = eventBus; + this.#dateFormat = dateFormat; + this.#isLTR = ltr; + this.#commentDialog = commentDialog; + this.sidebar = null; + } + get _popupWidth() { + const container = this.#createPopup(); + const { + style + } = container; + style.opacity = "0"; + style.display = "block"; + document.body.append(container); + const width = container.getBoundingClientRect().width; + container.remove(); + style.opacity = style.display = ""; + return shadow(this, "_popupWidth", width); + } + #createPopup() { + if (this.#container) { + return this.#container; + } + const container = this.#container = document.createElement("div"); + container.className = "commentPopup"; + container.id = "commentPopup"; + container.tabIndex = -1; + container.role = "dialog"; + container.ariaModal = "false"; + container.addEventListener("contextmenu", noContextMenu); + container.addEventListener("keydown", e => { + if (e.key === "Escape") { + this.toggle(this.#editor, true, false); + this.#previousFocusedElement?.focus(); + stopEvent(e); + } + }); + container.addEventListener("click", () => { + container.focus(); + }); + const top = document.createElement("div"); + top.className = "commentPopupTop"; + const time = this.#time = document.createElement("time"); + time.className = "commentPopupTime"; + const buttons = this.#buttonsContainer = document.createElement("div"); + buttons.className = "commentPopupButtons"; + const edit = document.createElement("button"); + edit.classList.add("commentPopupEdit", "toolbarButton"); + edit.tabIndex = 0; + edit.setAttribute("data-l10n-id", "pdfjs-editor-edit-comment-popup-button"); + edit.ariaHasPopup = "dialog"; + edit.ariaControlsElements = [this.#commentDialog]; + const editLabel = document.createElement("span"); + editLabel.setAttribute("data-l10n-id", "pdfjs-editor-edit-comment-popup-button-label"); + edit.append(editLabel); + edit.addEventListener("click", () => { + const editor = this.#editor; + const height = parseFloat(getComputedStyle(this.#text).height); + this.toggle(editor, true, false); + editor.editComment({ + height + }); + }); + edit.addEventListener("contextmenu", noContextMenu); + const del = document.createElement("button"); + del.classList.add("commentPopupDelete", "toolbarButton"); + del.tabIndex = 0; + del.setAttribute("data-l10n-id", "pdfjs-editor-delete-comment-popup-button"); + const delLabel = document.createElement("span"); + delLabel.setAttribute("data-l10n-id", "pdfjs-editor-delete-comment-popup-button-label"); + del.append(delLabel); + del.addEventListener("click", () => { + this.#eventBus.dispatch("reporttelemetry", { + source: this, + details: { + type: "comment", + data: { + deleted: true + } + } + }); + this.#editor.comment = null; + this.#editor.focus(); + this.destroy(); + }); + del.addEventListener("contextmenu", noContextMenu); + buttons.append(edit, del); + top.append(time, buttons); + const separator = document.createElement("hr"); + const text = this.#text = document.createElement("div"); + text.className = "commentPopupText"; + container.append(top, separator, text); + let pointerMoveAC; + const cancelDrag = () => { + container.classList.remove("dragging"); + pointerMoveAC?.abort(); + pointerMoveAC = null; + }; + top.addEventListener("pointerdown", e => { + if (pointerMoveAC) { + cancelDrag(); + return; + } + const { + target, + clientX, + clientY + } = e; + if (buttons.contains(target)) { + return; + } + stopEvent(e); + const { + width: parentWidth, + height: parentHeight + } = this.#editor.parentBoundingClientRect; + this.#prevDragX = clientX; + this.#prevDragY = clientY; + pointerMoveAC = new AbortController(); + const { + signal + } = pointerMoveAC; + container.classList.add("dragging"); + window.addEventListener("pointermove", ev => { + if (!pointerMoveAC) { + return; + } + const { + clientX: x, + clientY: y + } = ev; + this.#setPosition(this.#posX + (x - this.#prevDragX) / parentWidth, this.#posY + (y - this.#prevDragY) / parentHeight, false); + this.#prevDragX = x; + this.#prevDragY = y; + stopEvent(ev); + }, { + signal + }); + window.addEventListener("blur", cancelDrag, { + signal + }); + window.addEventListener("pointerup", ev => { + if (pointerMoveAC) { + cancelDrag(); + stopEvent(ev); + } + }, { + signal + }); + }); + return container; + } + updateColor(editor) { + if (this.#editor !== editor || !this.#visible) { + return; + } + const { + color, + opacity + } = editor.getData(); + this.#container.style.backgroundColor = color && CommentManager._makeCommentColor(color, opacity) || ""; + } + _hide(editor) { + const container = this.#createPopup(); + container.classList.toggle("hidden", true); + container.classList.toggle("selected", false); + (editor || this.#editor)?.setCommentButtonStates({ + selected: false, + hasPopup: false + }); + this.#editor = null; + this.#selected = false; + this.#visible = false; + this.#text.replaceChildren(); + this.sidebar.selectComment(null); + } + toggle(editor, isSelected, visibility = undefined, isEditable = true) { + if (!editor) { + this.destroy(); + return; + } + if (isSelected) { + visibility ??= this.#editor === editor ? !this.#selected || !this.#visible : true; + } else { + if (this.#selected) { + return; + } + visibility ??= !this.#visible; + } + if (!visibility) { + this._hide(editor); + return; + } + this.#visible = true; + if (this.#editor !== editor) { + this.#editor?.setCommentButtonStates({ + selected: false, + hasPopup: false + }); + } + const container = this.#createPopup(); + this.#buttonsContainer.classList.toggle("hidden", !isEditable); + container.classList.toggle("hidden", false); + container.classList.toggle("selected", isSelected); + this.#selected = isSelected; + this.#editor = editor; + editor.setCommentButtonStates({ + selected: isSelected, + hasPopup: true + }); + const { + contentsObj, + richText, + creationDate, + modificationDate, + color, + opacity + } = editor.getData(); + container.style.backgroundColor = color && CommentManager._makeCommentColor(color, opacity) || ""; + this.#text.replaceChildren(); + const html = richText?.str && (!contentsObj?.str || richText.str === contentsObj.str) ? richText.html : contentsObj?.str; + if (html) { + renderRichText({ + html, + dir: contentsObj?.dir || "auto", + className: "richText" + }, this.#text); + } + this.#time.textContent = this.#dateFormat.format(PDFDateString.toDateObject(modificationDate || creationDate)); + this.#setPosition(...editor.commentPopupPosition, editor.hasDefaultPopupPosition()); + editor.elementBeforePopup.after(container); + container.addEventListener("focus", ({ + relatedTarget + }) => { + this.#previousFocusedElement = relatedTarget; + }, { + once: true + }); + if (isSelected) { + setTimeout(() => container.focus(), 0); + } + } + #setPosition(x, y, correctPosition) { + if (!correctPosition) { + this.#editor.commentPopupPosition = [x, y]; + } else { + const parentRect = this.#editor.parentBoundingClientRect; + const widthRatio = this._popupWidth / parentRect.width; + if (this.#isLTR && x + widthRatio > 1 || !this.#isLTR && x - widthRatio >= 0) { + const buttonWidth = this.#editor.commentButtonWidth; + x -= widthRatio - buttonWidth; + } + const margin = 0.01; + if (this.#isLTR) { + x = Math.max(x, -parentRect.x / parentRect.width + margin); + } else { + x = Math.min(x, (window.innerWidth - parentRect.x) / parentRect.width - widthRatio - margin); + } + } + this.#posX = x; + this.#posY = y; + const { + style + } = this.#container; + style.left = `${100 * x}%`; + style.top = `${100 * y}%`; + } + destroy() { + this._hide(); + this.#container?.remove(); + this.#container = this.#text = this.#time = null; + this.#prevDragX = this.#prevDragY = Infinity; + this.#posX = this.#posY = 0; + this.#previousFocusedElement = null; + } +} + +;// ./web/download_manager.js + +function download(blobUrl, filename) { + const a = document.createElement("a"); + if (!a.click) { + throw new Error('DownloadManager: "a.click()" is not supported.'); + } + a.href = blobUrl; + a.target = "_parent"; + if ("download" in a) { + a.download = filename; + } + (document.body || document.documentElement).append(a); + a.click(); + a.remove(); +} +class DownloadManager { + #openBlobUrls = new WeakMap(); + downloadData(data, filename, contentType) { + const blobUrl = URL.createObjectURL(new Blob([data], { + type: contentType + })); + download(blobUrl, filename); + } + openOrDownloadData(data, filename, dest = null) { + const isPdfData = isPdfFile(filename); + const contentType = isPdfData ? "application/pdf" : ""; + if (isPdfData) { + let blobUrl = this.#openBlobUrls.get(data); + if (!blobUrl) { + blobUrl = URL.createObjectURL(new Blob([data], { + type: contentType + })); + this.#openBlobUrls.set(data, blobUrl); + } + let viewerUrl; + viewerUrl = "?file=" + encodeURIComponent(blobUrl + "#" + filename); + if (dest) { + viewerUrl += `#${escape(dest)}`; + } + try { + window.open(viewerUrl); + return true; + } catch (ex) { + console.error("openOrDownloadData:", ex); + URL.revokeObjectURL(blobUrl); + this.#openBlobUrls.delete(data); + } + } + this.downloadData(data, filename, contentType); + return false; + } + download(data, url, filename) { + let blobUrl; + if (data) { + blobUrl = URL.createObjectURL(new Blob([data], { + type: "application/pdf" + })); + } else { + if (!createValidAbsoluteUrl(url, "http://example.com")) { + console.error(`download - not a valid URL: ${url}`); + return; + } + blobUrl = url + "#pdfjs.action=download"; + } + download(blobUrl, filename); + } +} + +;// ./web/editor_undo_bar.js + +class EditorUndoBar { + #closeButton = null; + #container; + #eventBus = null; + #focusTimeout = null; + #initController = null; + isOpen = false; + #message; + #showController = null; + #undoButton; + static #l10nMessages = Object.freeze({ + highlight: "pdfjs-editor-undo-bar-message-highlight", + freetext: "pdfjs-editor-undo-bar-message-freetext", + stamp: "pdfjs-editor-undo-bar-message-stamp", + ink: "pdfjs-editor-undo-bar-message-ink", + signature: "pdfjs-editor-undo-bar-message-signature", + _multiple: "pdfjs-editor-undo-bar-message-multiple" + }); + constructor({ + container, + message, + undoButton, + closeButton + }, eventBus) { + this.#container = container; + this.#message = message; + this.#undoButton = undoButton; + this.#closeButton = closeButton; + this.#eventBus = eventBus; + } + destroy() { + this.#initController?.abort(); + this.#initController = null; + this.hide(); + } + show(undoAction, messageData) { + if (!this.#initController) { + this.#initController = new AbortController(); + const opts = { + signal: this.#initController.signal + }; + const boundHide = this.hide.bind(this); + this.#container.addEventListener("contextmenu", noContextMenu, opts); + this.#closeButton.addEventListener("click", boundHide, opts); + this.#eventBus._on("beforeprint", boundHide, opts); + this.#eventBus._on("download", boundHide, opts); + } + this.hide(); + if (typeof messageData === "string") { + this.#message.setAttribute("data-l10n-id", EditorUndoBar.#l10nMessages[messageData]); + } else { + this.#message.setAttribute("data-l10n-id", EditorUndoBar.#l10nMessages._multiple); + this.#message.setAttribute("data-l10n-args", JSON.stringify({ + count: messageData + })); + } + this.isOpen = true; + this.#container.hidden = false; + this.#showController = new AbortController(); + this.#undoButton.addEventListener("click", () => { + undoAction(); + this.hide(); + }, { + signal: this.#showController.signal + }); + this.#focusTimeout = setTimeout(() => { + this.#container.focus(); + this.#focusTimeout = null; + }, 100); + } + hide() { + if (!this.isOpen) { + return; + } + this.isOpen = false; + this.#container.hidden = true; + this.#showController?.abort(); + this.#showController = null; + if (this.#focusTimeout) { + clearTimeout(this.#focusTimeout); + this.#focusTimeout = null; + } + } +} + +;// ./web/overlay_manager.js +class OverlayManager { + #overlays = new WeakMap(); + #active = null; + get active() { + return this.#active; + } + async register(dialog, canForceClose = false) { + if (typeof dialog !== "object") { + throw new Error("Not enough parameters."); + } else if (this.#overlays.has(dialog)) { + throw new Error("The overlay is already registered."); + } + this.#overlays.set(dialog, { + canForceClose + }); + dialog.addEventListener("cancel", ({ + target + }) => { + if (this.#active === target) { + this.#active = null; + } + }); + } + async open(dialog) { + if (!this.#overlays.has(dialog)) { + throw new Error("The overlay does not exist."); + } else if (this.#active) { + if (this.#active === dialog) { + throw new Error("The overlay is already active."); + } else if (this.#overlays.get(dialog).canForceClose) { + await this.close(); + } else { + throw new Error("Another overlay is currently active."); + } + } + this.#active = dialog; + dialog.showModal(); + } + async close(dialog = this.#active) { + if (!this.#overlays.has(dialog)) { + throw new Error("The overlay does not exist."); + } else if (!this.#active) { + throw new Error("The overlay is currently not active."); + } else if (this.#active !== dialog) { + throw new Error("Another overlay is currently active."); + } + dialog.close(); + this.#active = null; + } + async closeIfActive(dialog) { + if (this.#active === dialog) { + await this.close(dialog); + } + } +} + +;// ./web/password_prompt.js + +class PasswordPrompt { + #activeCapability = null; + #updateCallback = null; + #reason = null; + constructor(options, overlayManager, isViewerEmbedded = false) { + this.dialog = options.dialog; + this.label = options.label; + this.input = options.input; + this.submitButton = options.submitButton; + this.cancelButton = options.cancelButton; + this.overlayManager = overlayManager; + this._isViewerEmbedded = isViewerEmbedded; + this.submitButton.addEventListener("click", this.#verify.bind(this)); + this.cancelButton.addEventListener("click", this.close.bind(this)); + this.input.addEventListener("keydown", e => { + if (e.keyCode === 13) { + this.#verify(); + } + }); + this.overlayManager.register(this.dialog, true); + this.dialog.addEventListener("close", this.#cancel.bind(this)); + } + async open() { + await this.#activeCapability?.promise; + this.#activeCapability = Promise.withResolvers(); + try { + await this.overlayManager.open(this.dialog); + } catch (ex) { + this.#activeCapability.resolve(); + throw ex; + } + const passwordIncorrect = this.#reason === PasswordResponses.INCORRECT_PASSWORD; + if (!this._isViewerEmbedded || passwordIncorrect) { + this.input.focus(); + } + this.label.setAttribute("data-l10n-id", passwordIncorrect ? "pdfjs-password-invalid" : "pdfjs-password-label"); + } + async close() { + this.overlayManager.closeIfActive(this.dialog); + } + #verify() { + const password = this.input.value; + if (password?.length > 0) { + this.#invokeCallback(password); + } + } + #cancel() { + this.#invokeCallback(new Error("PasswordPrompt cancelled.")); + this.#activeCapability.resolve(); + } + #invokeCallback(password) { + if (!this.#updateCallback) { + return; + } + this.close(); + this.input.value = ""; + this.#updateCallback(password); + this.#updateCallback = null; + } + async setUpdateCallback(updateCallback, reason) { + if (this.#activeCapability) { + await this.#activeCapability.promise; + } + this.#updateCallback = updateCallback; + this.#reason = reason; + } +} + +;// ./web/base_tree_viewer.js + +const TREEITEM_OFFSET_TOP = -100; +const TREEITEM_SELECTED_CLASS = "selected"; +class BaseTreeViewer { + constructor(options) { + this.container = options.container; + this.eventBus = options.eventBus; + this._l10n = options.l10n; + this.reset(); + } + reset() { + this._pdfDocument = null; + this._lastToggleIsShow = true; + this._currentTreeItem = null; + this.container.textContent = ""; + this.container.classList.remove("treeWithDeepNesting"); + } + _dispatchEvent(count) { + throw new Error("Not implemented: _dispatchEvent"); + } + _bindLink(element, params) { + throw new Error("Not implemented: _bindLink"); + } + _normalizeTextContent(str) { + return removeNullCharacters(str, true) || "\u2013"; + } + _addToggleButton(div, hidden = false) { + const toggler = document.createElement("div"); + toggler.className = "treeItemToggler"; + if (hidden) { + toggler.classList.add("treeItemsHidden"); + } + toggler.onclick = evt => { + evt.stopPropagation(); + toggler.classList.toggle("treeItemsHidden"); + if (evt.shiftKey) { + const shouldShowAll = !toggler.classList.contains("treeItemsHidden"); + this._toggleTreeItem(div, shouldShowAll); + } + }; + div.prepend(toggler); + } + _toggleTreeItem(root, show = false) { + this._l10n.pause(); + this._lastToggleIsShow = show; + for (const toggler of root.querySelectorAll(".treeItemToggler")) { + toggler.classList.toggle("treeItemsHidden", !show); + } + this._l10n.resume(); + } + _toggleAllTreeItems() { + this._toggleTreeItem(this.container, !this._lastToggleIsShow); + } + _finishRendering(fragment, count, hasAnyNesting = false) { + if (hasAnyNesting) { + this.container.classList.add("treeWithDeepNesting"); + this._lastToggleIsShow = !fragment.querySelector(".treeItemsHidden"); + } + this._l10n.pause(); + this.container.append(fragment); + this._l10n.resume(); + this._dispatchEvent(count); + } + render(params) { + throw new Error("Not implemented: render"); + } + _updateCurrentTreeItem(treeItem = null) { + if (this._currentTreeItem) { + this._currentTreeItem.classList.remove(TREEITEM_SELECTED_CLASS); + this._currentTreeItem = null; + } + if (treeItem) { + treeItem.classList.add(TREEITEM_SELECTED_CLASS); + this._currentTreeItem = treeItem; + } + } + _scrollToCurrentTreeItem(treeItem) { + if (!treeItem) { + return; + } + this._l10n.pause(); + let currentNode = treeItem.parentNode; + while (currentNode && currentNode !== this.container) { + if (currentNode.classList.contains("treeItem")) { + const toggler = currentNode.firstElementChild; + toggler?.classList.remove("treeItemsHidden"); + } + currentNode = currentNode.parentNode; + } + this._l10n.resume(); + this._updateCurrentTreeItem(treeItem); + this.container.scrollTo(treeItem.offsetLeft, treeItem.offsetTop + TREEITEM_OFFSET_TOP); + } +} + +;// ./web/pdf_attachment_viewer.js + + +class PDFAttachmentViewer extends BaseTreeViewer { + constructor(options) { + super(options); + this.downloadManager = options.downloadManager; + this.eventBus._on("fileattachmentannotation", this.#appendAttachment.bind(this)); + } + reset(keepRenderedCapability = false) { + super.reset(); + this._attachments = null; + if (!keepRenderedCapability) { + this._renderedCapability = Promise.withResolvers(); + } + this._pendingDispatchEvent = false; + } + async _dispatchEvent(attachmentsCount) { + this._renderedCapability.resolve(); + if (attachmentsCount === 0 && !this._pendingDispatchEvent) { + this._pendingDispatchEvent = true; + await waitOnEventOrTimeout({ + target: this.eventBus, + name: "annotationlayerrendered", + delay: 1000 + }); + if (!this._pendingDispatchEvent) { + return; + } + } + this._pendingDispatchEvent = false; + this.eventBus.dispatch("attachmentsloaded", { + source: this, + attachmentsCount + }); + } + _bindLink(element, { + content, + description, + filename + }) { + if (description) { + element.title = description; + } + element.onclick = () => { + this.downloadManager.openOrDownloadData(content, filename); + return false; + }; + } + render({ + attachments, + keepRenderedCapability = false + }) { + if (this._attachments) { + this.reset(keepRenderedCapability); + } + this._attachments = attachments || null; + if (!attachments) { + this._dispatchEvent(0); + return; + } + const fragment = document.createDocumentFragment(); + let attachmentsCount = 0; + for (const name in attachments) { + const item = attachments[name]; + const div = document.createElement("div"); + div.className = "treeItem"; + const element = document.createElement("a"); + this._bindLink(element, item); + element.textContent = this._normalizeTextContent(item.filename); + div.append(element); + fragment.append(div); + attachmentsCount++; + } + this._finishRendering(fragment, attachmentsCount); + } + #appendAttachment(item) { + const renderedPromise = this._renderedCapability.promise; + renderedPromise.then(() => { + if (renderedPromise !== this._renderedCapability.promise) { + return; + } + const attachments = this._attachments || Object.create(null); + for (const name in attachments) { + if (item.filename === name) { + return; + } + } + attachments[item.filename] = item; + this.render({ + attachments, + keepRenderedCapability: true + }); + }); + } +} + +;// ./web/grab_to_pan.js + +const CSS_CLASS_GRAB = "grab-to-pan-grab"; +class GrabToPan { + #activateAC = null; + #mouseDownAC = null; + #scrollAC = null; + constructor({ + element + }) { + this.element = element; + this.document = element.ownerDocument; + const overlay = this.overlay = document.createElement("div"); + overlay.className = "grab-to-pan-grabbing"; + } + activate() { + if (!this.#activateAC) { + this.#activateAC = new AbortController(); + this.element.addEventListener("mousedown", this.#onMouseDown.bind(this), { + capture: true, + signal: this.#activateAC.signal + }); + this.element.classList.add(CSS_CLASS_GRAB); + } + } + deactivate() { + if (this.#activateAC) { + this.#activateAC.abort(); + this.#activateAC = null; + this.#endPan(); + this.element.classList.remove(CSS_CLASS_GRAB); + } + } + toggle() { + if (this.#activateAC) { + this.deactivate(); + } else { + this.activate(); + } + } + ignoreTarget(node) { + return node.matches("a[href], a[href] *, input, textarea, button, button *, select, option"); + } + #onMouseDown(event) { + if (event.button !== 0 || this.ignoreTarget(event.target)) { + return; + } + if (event.originalTarget) { + try { + event.originalTarget.tagName; + } catch { + return; + } + } + this.scrollLeftStart = this.element.scrollLeft; + this.scrollTopStart = this.element.scrollTop; + this.clientXStart = event.clientX; + this.clientYStart = event.clientY; + this.#mouseDownAC = new AbortController(); + const boundEndPan = this.#endPan.bind(this), + mouseOpts = { + capture: true, + signal: this.#mouseDownAC.signal + }; + this.document.addEventListener("mousemove", this.#onMouseMove.bind(this), mouseOpts); + this.document.addEventListener("mouseup", boundEndPan, mouseOpts); + this.#scrollAC = new AbortController(); + this.element.addEventListener("scroll", boundEndPan, { + capture: true, + signal: this.#scrollAC.signal + }); + stopEvent(event); + const focusedElement = document.activeElement; + if (focusedElement && !focusedElement.contains(event.target)) { + focusedElement.blur(); + } + } + #onMouseMove(event) { + this.#scrollAC?.abort(); + this.#scrollAC = null; + if (!(event.buttons & 1)) { + this.#endPan(); + return; + } + const xDiff = event.clientX - this.clientXStart; + const yDiff = event.clientY - this.clientYStart; + this.element.scrollTo({ + top: this.scrollTopStart - yDiff, + left: this.scrollLeftStart - xDiff, + behavior: "instant" + }); + if (!this.overlay.parentNode) { + document.body.append(this.overlay); + } + } + #endPan() { + this.#mouseDownAC?.abort(); + this.#mouseDownAC = null; + this.#scrollAC?.abort(); + this.#scrollAC = null; + this.overlay.remove(); + } +} + +;// ./web/pdf_cursor_tools.js + + + +class PDFCursorTools { + #active = CursorTool.SELECT; + #prevActive = null; + constructor({ + container, + eventBus, + cursorToolOnLoad = CursorTool.SELECT + }) { + this.container = container; + this.eventBus = eventBus; + this.#addEventListeners(); + Promise.resolve().then(() => { + this.switchTool(cursorToolOnLoad); + }); + } + get activeTool() { + return this.#active; + } + switchTool(tool) { + if (this.#prevActive !== null) { + return; + } + this.#switchTool(tool); + } + #switchTool(tool, disabled = false) { + if (tool === this.#active) { + if (this.#prevActive !== null) { + this.eventBus.dispatch("cursortoolchanged", { + source: this, + tool, + disabled + }); + } + return; + } + const disableActiveTool = () => { + switch (this.#active) { + case CursorTool.SELECT: + break; + case CursorTool.HAND: + this._handTool.deactivate(); + break; + case CursorTool.ZOOM: + } + }; + switch (tool) { + case CursorTool.SELECT: + disableActiveTool(); + break; + case CursorTool.HAND: + disableActiveTool(); + this._handTool.activate(); + break; + case CursorTool.ZOOM: + default: + console.error(`switchTool: "${tool}" is an unsupported value.`); + return; + } + this.#active = tool; + this.eventBus.dispatch("cursortoolchanged", { + source: this, + tool, + disabled + }); + } + #addEventListeners() { + this.eventBus._on("switchcursortool", evt => { + if (!evt.reset) { + this.switchTool(evt.tool); + } else if (this.#prevActive !== null) { + annotationEditorMode = AnnotationEditorType.NONE; + presentationModeState = PresentationModeState.NORMAL; + enableActive(); + } + }); + let annotationEditorMode = AnnotationEditorType.NONE, + presentationModeState = PresentationModeState.NORMAL; + const disableActive = () => { + this.#prevActive ??= this.#active; + this.#switchTool(CursorTool.SELECT, true); + }; + const enableActive = () => { + if (this.#prevActive !== null && annotationEditorMode === AnnotationEditorType.NONE && presentationModeState === PresentationModeState.NORMAL) { + this.#switchTool(this.#prevActive); + this.#prevActive = null; + } + }; + this.eventBus._on("annotationeditormodechanged", ({ + mode + }) => { + annotationEditorMode = mode; + if (mode === AnnotationEditorType.NONE) { + enableActive(); + } else { + disableActive(); + } + }); + this.eventBus._on("presentationmodechanged", ({ + state + }) => { + presentationModeState = state; + if (state === PresentationModeState.NORMAL) { + enableActive(); + } else if (state === PresentationModeState.FULLSCREEN) { + disableActive(); + } + }); + } + get _handTool() { + return shadow(this, "_handTool", new GrabToPan({ + element: this.container + })); + } +} + +;// ./web/pdf_document_properties.js + + +const NON_METRIC_LOCALES = ["en-us", "en-lr", "my"]; +const US_PAGE_NAMES = { + "8.5x11": "pdfjs-document-properties-page-size-name-letter", + "8.5x14": "pdfjs-document-properties-page-size-name-legal" +}; +const METRIC_PAGE_NAMES = { + "297x420": "pdfjs-document-properties-page-size-name-a-three", + "210x297": "pdfjs-document-properties-page-size-name-a-four" +}; +function getPageName(size, isPortrait, pageNames) { + const width = isPortrait ? size.width : size.height; + const height = isPortrait ? size.height : size.width; + return pageNames[`${width}x${height}`]; +} +class PDFDocumentProperties { + #fieldData = null; + constructor({ + dialog, + fields, + closeButton + }, overlayManager, eventBus, l10n, fileNameLookup, titleLookup) { + this.dialog = dialog; + this.fields = fields; + this.overlayManager = overlayManager; + this.l10n = l10n; + this._fileNameLookup = fileNameLookup; + this._titleLookup = titleLookup; + this.#reset(); + closeButton.addEventListener("click", this.close.bind(this)); + this.overlayManager.register(this.dialog); + eventBus._on("pagechanging", evt => { + this._currentPageNumber = evt.pageNumber; + }); + eventBus._on("rotationchanging", evt => { + this._pagesRotation = evt.pagesRotation; + }); + } + async open() { + await Promise.all([this.overlayManager.open(this.dialog), this._dataAvailableCapability.promise]); + const currentPageNumber = this._currentPageNumber; + const pagesRotation = this._pagesRotation; + if (this.#fieldData && currentPageNumber === this.#fieldData._currentPageNumber && pagesRotation === this.#fieldData._pagesRotation) { + this.#updateUI(); + return; + } + const [{ + info, + metadata, + contentLength + }, pdfPage] = await Promise.all([this.pdfDocument.getMetadata(), this.pdfDocument.getPage(currentPageNumber)]); + const [fileName, fileSize, title, creationDate, modificationDate, pageSize, isLinearized] = await Promise.all([this._fileNameLookup(), this.#parseFileSize(contentLength), this._titleLookup(), this.#parseDate(metadata?.get("xmp:createdate"), info.CreationDate), this.#parseDate(metadata?.get("xmp:modifydate"), info.ModDate), this.#parsePageSize(getPageSizeInches(pdfPage), pagesRotation), this.#parseLinearization(info.IsLinearized)]); + this.#fieldData = Object.freeze({ + fileName, + fileSize, + title, + author: metadata?.get("dc:creator")?.join("\n") || info.Author, + subject: metadata?.get("dc:subject")?.join("\n") || info.Subject, + keywords: metadata?.get("pdf:keywords") || info.Keywords, + creationDate, + modificationDate, + creator: metadata?.get("xmp:creatortool") || info.Creator, + producer: metadata?.get("pdf:producer") || info.Producer, + version: info.PDFFormatVersion, + pageCount: this.pdfDocument.numPages, + pageSize, + linearized: isLinearized, + _currentPageNumber: currentPageNumber, + _pagesRotation: pagesRotation + }); + this.#updateUI(); + const { + length + } = await this.pdfDocument.getDownloadInfo(); + if (contentLength === length) { + return; + } + const data = Object.assign(Object.create(null), this.#fieldData); + data.fileSize = await this.#parseFileSize(length); + this.#fieldData = Object.freeze(data); + this.#updateUI(); + } + async close() { + this.overlayManager.close(this.dialog); + } + setDocument(pdfDocument) { + if (this.pdfDocument) { + this.#reset(); + this.#updateUI(); + } + if (!pdfDocument) { + return; + } + this.pdfDocument = pdfDocument; + this._dataAvailableCapability.resolve(); + } + #reset() { + this.pdfDocument = null; + this.#fieldData = null; + this._dataAvailableCapability = Promise.withResolvers(); + this._currentPageNumber = 1; + this._pagesRotation = 0; + } + #updateUI() { + if (this.#fieldData && this.overlayManager.active !== this.dialog) { + return; + } + for (const id in this.fields) { + const content = this.#fieldData?.[id]; + this.fields[id].textContent = content || content === 0 ? content : "-"; + } + } + async #parseFileSize(b = 0) { + const kb = b / 1024, + mb = kb / 1024; + return kb ? this.l10n.get(mb >= 1 ? "pdfjs-document-properties-size-mb" : "pdfjs-document-properties-size-kb", { + mb, + kb, + b + }) : undefined; + } + async #parsePageSize(pageSizeInches, pagesRotation) { + if (!pageSizeInches) { + return undefined; + } + if (pagesRotation % 180 !== 0) { + pageSizeInches = { + width: pageSizeInches.height, + height: pageSizeInches.width + }; + } + const isPortrait = isPortraitOrientation(pageSizeInches), + nonMetric = NON_METRIC_LOCALES.includes(this.l10n.getLanguage()); + let sizeInches = { + width: Math.round(pageSizeInches.width * 100) / 100, + height: Math.round(pageSizeInches.height * 100) / 100 + }; + let sizeMillimeters = { + width: Math.round(pageSizeInches.width * 25.4 * 10) / 10, + height: Math.round(pageSizeInches.height * 25.4 * 10) / 10 + }; + let nameId = getPageName(sizeInches, isPortrait, US_PAGE_NAMES) || getPageName(sizeMillimeters, isPortrait, METRIC_PAGE_NAMES); + if (!nameId && !(Number.isInteger(sizeMillimeters.width) && Number.isInteger(sizeMillimeters.height))) { + const exactMillimeters = { + width: pageSizeInches.width * 25.4, + height: pageSizeInches.height * 25.4 + }; + const intMillimeters = { + width: Math.round(sizeMillimeters.width), + height: Math.round(sizeMillimeters.height) + }; + if (Math.abs(exactMillimeters.width - intMillimeters.width) < 0.1 && Math.abs(exactMillimeters.height - intMillimeters.height) < 0.1) { + nameId = getPageName(intMillimeters, isPortrait, METRIC_PAGE_NAMES); + if (nameId) { + sizeInches = { + width: Math.round(intMillimeters.width / 25.4 * 100) / 100, + height: Math.round(intMillimeters.height / 25.4 * 100) / 100 + }; + sizeMillimeters = intMillimeters; + } + } + } + const [{ + width, + height + }, unit, name, orientation] = await Promise.all([nonMetric ? sizeInches : sizeMillimeters, this.l10n.get(nonMetric ? "pdfjs-document-properties-page-size-unit-inches" : "pdfjs-document-properties-page-size-unit-millimeters"), nameId && this.l10n.get(nameId), this.l10n.get(isPortrait ? "pdfjs-document-properties-page-size-orientation-portrait" : "pdfjs-document-properties-page-size-orientation-landscape")]); + return this.l10n.get(name ? "pdfjs-document-properties-page-size-dimension-name-string" : "pdfjs-document-properties-page-size-dimension-string", { + width, + height, + unit, + name, + orientation + }); + } + async #parseDate(metadataDate, infoDate) { + const dateObj = Date.parse(metadataDate) || PDFDateString.toDateObject(infoDate); + return dateObj ? this.l10n.get("pdfjs-document-properties-date-time-string", { + dateObj: dateObj.valueOf() + }) : undefined; + } + #parseLinearization(isLinearized) { + return this.l10n.get(isLinearized ? "pdfjs-document-properties-linearized-yes" : "pdfjs-document-properties-linearized-no"); + } +} + +;// ./web/pdf_find_utils.js +const CharacterType = { + SPACE: 0, + ALPHA_LETTER: 1, + PUNCT: 2, + HAN_LETTER: 3, + KATAKANA_LETTER: 4, + HIRAGANA_LETTER: 5, + HALFWIDTH_KATAKANA_LETTER: 6, + THAI_LETTER: 7 +}; +function isAlphabeticalScript(charCode) { + return charCode < 0x2e80; +} +function isAscii(charCode) { + return (charCode & 0xff80) === 0; +} +function isAsciiAlpha(charCode) { + return charCode >= 0x61 && charCode <= 0x7a || charCode >= 0x41 && charCode <= 0x5a; +} +function isAsciiDigit(charCode) { + return charCode >= 0x30 && charCode <= 0x39; +} +function isAsciiSpace(charCode) { + return charCode === 0x20 || charCode === 0x09 || charCode === 0x0d || charCode === 0x0a; +} +function isHan(charCode) { + return charCode >= 0x3400 && charCode <= 0x9fff || charCode >= 0xf900 && charCode <= 0xfaff; +} +function isKatakana(charCode) { + return charCode >= 0x30a0 && charCode <= 0x30ff; +} +function isHiragana(charCode) { + return charCode >= 0x3040 && charCode <= 0x309f; +} +function isHalfwidthKatakana(charCode) { + return charCode >= 0xff60 && charCode <= 0xff9f; +} +function isThai(charCode) { + return (charCode & 0xff80) === 0x0e00; +} +function getCharacterType(charCode) { + if (isAlphabeticalScript(charCode)) { + if (isAscii(charCode)) { + if (isAsciiSpace(charCode)) { + return CharacterType.SPACE; + } else if (isAsciiAlpha(charCode) || isAsciiDigit(charCode) || charCode === 0x5f) { + return CharacterType.ALPHA_LETTER; + } + return CharacterType.PUNCT; + } else if (isThai(charCode)) { + return CharacterType.THAI_LETTER; + } else if (charCode === 0xa0) { + return CharacterType.SPACE; + } + return CharacterType.ALPHA_LETTER; + } + if (isHan(charCode)) { + return CharacterType.HAN_LETTER; + } else if (isKatakana(charCode)) { + return CharacterType.KATAKANA_LETTER; + } else if (isHiragana(charCode)) { + return CharacterType.HIRAGANA_LETTER; + } else if (isHalfwidthKatakana(charCode)) { + return CharacterType.HALFWIDTH_KATAKANA_LETTER; + } + return CharacterType.ALPHA_LETTER; +} +let NormalizeWithNFKC; +function getNormalizeWithNFKC() { + NormalizeWithNFKC ||= ` ¨ª¯²-µ¸-º¼-¾IJ-ijĿ-ŀʼnſDŽ-njDZ-dzʰ-ʸ˘-˝ˠ-ˤʹͺ;΄-΅·ϐ-ϖϰ-ϲϴ-ϵϹևٵ-ٸक़-य़ড়-ঢ়য়ਲ਼ਸ਼ਖ਼-ਜ਼ਫ਼ଡ଼-ଢ଼ำຳໜ-ໝ༌གྷཌྷདྷབྷཛྷཀྵჼᴬ-ᴮᴰ-ᴺᴼ-ᵍᵏ-ᵪᵸᶛ-ᶿẚ-ẛάέήίόύώΆ᾽-῁ΈΉ῍-῏ΐΊ῝-῟ΰΎ῭-`ΌΏ´-῾ - ‑‗․-… ″-‴‶-‷‼‾⁇-⁉⁗ ⁰-ⁱ⁴-₎ₐ-ₜ₨℀-℃℅-ℇ℉-ℓℕ-№ℙ-ℝ℠-™ℤΩℨK-ℭℯ-ℱℳ-ℹ℻-⅀ⅅ-ⅉ⅐-ⅿ↉∬-∭∯-∰〈-〉①-⓪⨌⩴-⩶⫝̸ⱼ-ⱽⵯ⺟⻳⼀-⿕ 〶〸-〺゛-゜ゟヿㄱ-ㆎ㆒-㆟㈀-㈞㈠-㉇㉐-㉾㊀-㏿ꚜ-ꚝꝰꟲ-ꟴꟸ-ꟹꭜ-ꭟꭩ豈-嗀塚晴凞-羽蘒諸逸-都飯-舘並-龎ff-stﬓ-ﬗיִײַ-זּטּ-לּמּנּ-סּףּ-פּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-﷼︐-︙︰-﹄﹇-﹒﹔-﹦﹨-﹫ﹰ-ﹲﹴﹶ-ﻼ!-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ¢-₩`; + return NormalizeWithNFKC; +} + +;// ./web/pdf_find_controller.js + + +const FindState = { + FOUND: 0, + NOT_FOUND: 1, + WRAPPED: 2, + PENDING: 3 +}; +const FIND_TIMEOUT = 250; +const MATCH_SCROLL_OFFSET_TOP = -50; +const CHARACTERS_TO_NORMALIZE = { + "\u2010": "-", + "\u2018": "'", + "\u2019": "'", + "\u201A": "'", + "\u201B": "'", + "\u201C": '"', + "\u201D": '"', + "\u201E": '"', + "\u201F": '"', + "\u00BC": "1/4", + "\u00BD": "1/2", + "\u00BE": "3/4" +}; +const DIACRITICS_EXCEPTION = new Set([0x3099, 0x309a, 0x094d, 0x09cd, 0x0a4d, 0x0acd, 0x0b4d, 0x0bcd, 0x0c4d, 0x0ccd, 0x0d3b, 0x0d3c, 0x0d4d, 0x0dca, 0x0e3a, 0x0eba, 0x0f84, 0x1039, 0x103a, 0x1714, 0x1734, 0x17d2, 0x1a60, 0x1b44, 0x1baa, 0x1bab, 0x1bf2, 0x1bf3, 0x2d7f, 0xa806, 0xa82c, 0xa8c4, 0xa953, 0xa9c0, 0xaaf6, 0xabed, 0x0c56, 0x0f71, 0x0f72, 0x0f7a, 0x0f7b, 0x0f7c, 0x0f7d, 0x0f80, 0x0f74]); +let DIACRITICS_EXCEPTION_STR; +const DIACRITICS_REG_EXP = /\p{M}+/gu; +const SPECIAL_CHARS_REG_EXP = /([.*+?^${}()|[\]\\])|(\p{P})|(\s+)|(\p{M})|(\p{L})/gu; +const NOT_DIACRITIC_FROM_END_REG_EXP = /([^\p{M}])\p{M}*$/u; +const NOT_DIACRITIC_FROM_START_REG_EXP = /^\p{M}*([^\p{M}])/u; +const SYLLABLES_REG_EXP = /[\uAC00-\uD7AF\uFA6C\uFACF-\uFAD1\uFAD5-\uFAD7]+/g; +const SYLLABLES_LENGTHS = new Map(); +const FIRST_CHAR_SYLLABLES_REG_EXP = "[\\u1100-\\u1112\\ud7a4-\\ud7af\\ud84a\\ud84c\\ud850\\ud854\\ud857\\ud85f]"; +const NFKC_CHARS_TO_NORMALIZE = new Map(); +let noSyllablesRegExp = null; +let withSyllablesRegExp = null; +function normalize(text, options = {}) { + const syllablePositions = []; + let m; + while ((m = SYLLABLES_REG_EXP.exec(text)) !== null) { + let { + index + } = m; + for (const char of m[0]) { + let len = SYLLABLES_LENGTHS.get(char); + if (!len) { + len = char.normalize("NFD").length; + SYLLABLES_LENGTHS.set(char, len); + } + syllablePositions.push([len, index++]); + } + } + const hasSyllables = syllablePositions.length > 0; + const ignoreDashEOL = options.ignoreDashEOL ?? false; + let normalizationRegex; + if (!hasSyllables && noSyllablesRegExp) { + normalizationRegex = noSyllablesRegExp; + } else if (hasSyllables && withSyllablesRegExp) { + normalizationRegex = withSyllablesRegExp; + } else { + const replace = Object.keys(CHARACTERS_TO_NORMALIZE).join(""); + const toNormalizeWithNFKC = getNormalizeWithNFKC(); + const CJK = "(?:\\p{Ideographic}|[\u3040-\u30FF])"; + const HKDiacritics = "(?:\u3099|\u309A)"; + const BrokenWord = `\\p{Ll}-\\n(?=\\p{Ll})|\\p{Lu}-\\n(?=\\p{L})`; + const regexps = [`[${replace}]`, `[${toNormalizeWithNFKC}]`, `${HKDiacritics}\\n`, "\\p{M}+(?:-\\n)?", `${BrokenWord}`, "\\S-\\n", `${CJK}\\n`, "\\n", hasSyllables ? FIRST_CHAR_SYLLABLES_REG_EXP : "\\u0000"]; + normalizationRegex = new RegExp(regexps.map(r => `(${r})`).join("|"), "gum"); + if (hasSyllables) { + withSyllablesRegExp = normalizationRegex; + } else { + noSyllablesRegExp = normalizationRegex; + } + } + const rawDiacriticsPositions = []; + while ((m = DIACRITICS_REG_EXP.exec(text)) !== null) { + rawDiacriticsPositions.push([m[0].length, m.index]); + } + let normalized = text.normalize("NFD"); + const positions = [0, 0]; + let rawDiacriticsIndex = 0; + let syllableIndex = 0; + let shift = 0; + let shiftOrigin = 0; + let eol = 0; + let hasDiacritics = false; + normalized = normalized.replace(normalizationRegex, (match, p1, p2, p3, p4, p5, p6, p7, p8, p9, i) => { + i -= shiftOrigin; + if (p1) { + const replacement = CHARACTERS_TO_NORMALIZE[p1]; + const jj = replacement.length; + for (let j = 1; j < jj; j++) { + positions.push(i - shift + j, shift - j); + } + shift -= jj - 1; + return replacement; + } + if (p2) { + let replacement = NFKC_CHARS_TO_NORMALIZE.get(p2); + if (!replacement) { + replacement = p2.normalize("NFKC"); + NFKC_CHARS_TO_NORMALIZE.set(p2, replacement); + } + const jj = replacement.length; + for (let j = 1; j < jj; j++) { + positions.push(i - shift + j, shift - j); + } + shift -= jj - 1; + return replacement; + } + if (p3) { + hasDiacritics = true; + if (i + eol === rawDiacriticsPositions[rawDiacriticsIndex]?.[1]) { + ++rawDiacriticsIndex; + } else { + positions.push(i - 1 - shift + 1, shift - 1); + shift -= 1; + shiftOrigin += 1; + } + positions.push(i - shift + 1, shift); + shiftOrigin += 1; + eol += 1; + return p3.charAt(0); + } + if (p4) { + const hasTrailingDashEOL = p4.endsWith("\n"); + const len = hasTrailingDashEOL ? p4.length - 2 : p4.length; + hasDiacritics = true; + let jj = len; + if (i + eol === rawDiacriticsPositions[rawDiacriticsIndex]?.[1]) { + jj -= rawDiacriticsPositions[rawDiacriticsIndex][0]; + ++rawDiacriticsIndex; + } + for (let j = 1; j <= jj; j++) { + positions.push(i - 1 - shift + j, shift - j); + } + shift -= jj; + shiftOrigin += jj; + if (hasTrailingDashEOL) { + i += len - 1; + positions.push(i - shift + 1, 1 + shift); + shift += 1; + shiftOrigin += 1; + eol += 1; + return p4.slice(0, len); + } + return p4; + } + if (p5) { + if (ignoreDashEOL) { + shiftOrigin += 1; + eol += 1; + return p5.slice(0, -1); + } + const len = p5.length - 2; + positions.push(i - shift + len, 1 + shift); + shift += 1; + shiftOrigin += 1; + eol += 1; + return p5.slice(0, -2); + } + if (p6) { + shiftOrigin += 1; + eol += 1; + return p6.slice(0, -1); + } + if (p7) { + const len = p7.length - 1; + positions.push(i - shift + len, shift); + shiftOrigin += 1; + eol += 1; + return p7.slice(0, -1); + } + if (p8) { + positions.push(i - shift + 1, shift - 1); + shift -= 1; + shiftOrigin += 1; + eol += 1; + return " "; + } + if (i + eol === syllablePositions[syllableIndex]?.[1]) { + const newCharLen = syllablePositions[syllableIndex][0] - 1; + ++syllableIndex; + for (let j = 1; j <= newCharLen; j++) { + positions.push(i - (shift - j), shift - j); + } + shift -= newCharLen; + shiftOrigin += newCharLen; + } + return p9; + }); + positions.push(normalized.length, shift); + const starts = new Uint32Array(positions.length >> 1); + const shifts = new Int32Array(positions.length >> 1); + for (let i = 0, ii = positions.length; i < ii; i += 2) { + starts[i >> 1] = positions[i]; + shifts[i >> 1] = positions[i + 1]; + } + return [normalized, [starts, shifts], hasDiacritics]; +} +function getOriginalIndex(diffs, pos, len) { + if (!diffs) { + return [pos, len]; + } + const [starts, shifts] = diffs; + const start = pos; + const end = pos + len - 1; + let i = binarySearchFirstItem(starts, x => x >= start); + if (starts[i] > start) { + --i; + } + let j = binarySearchFirstItem(starts, x => x >= end, i); + if (starts[j] > end) { + --j; + } + const oldStart = start + shifts[i]; + const oldEnd = end + shifts[j]; + const oldLen = oldEnd + 1 - oldStart; + return [oldStart, oldLen]; +} +class PDFFindController { + #state = null; + #updateMatchesCountOnProgress = true; + #visitedPagesCount = 0; + constructor({ + linkService, + eventBus, + updateMatchesCountOnProgress = true + }) { + this._linkService = linkService; + this._eventBus = eventBus; + this.#updateMatchesCountOnProgress = updateMatchesCountOnProgress; + this.onIsPageVisible = null; + this.#reset(); + eventBus._on("find", this.#onFind.bind(this)); + eventBus._on("findbarclose", this.#onFindBarClose.bind(this)); + } + get highlightMatches() { + return this._highlightMatches; + } + get pageMatches() { + return this._pageMatches; + } + get pageMatchesLength() { + return this._pageMatchesLength; + } + get selected() { + return this._selected; + } + get state() { + return this.#state; + } + setDocument(pdfDocument) { + if (this._pdfDocument) { + this.#reset(); + } + if (!pdfDocument) { + return; + } + this._pdfDocument = pdfDocument; + this._firstPageCapability.resolve(); + } + #onFind(state) { + if (!state) { + return; + } + const pdfDocument = this._pdfDocument; + const { + type + } = state; + if (this.#state === null || this.#shouldDirtyMatch(state)) { + this._dirtyMatch = true; + } + this.#state = state; + if (type !== "highlightallchange") { + this.#updateUIState(FindState.PENDING); + } + this._firstPageCapability.promise.then(() => { + if (!this._pdfDocument || pdfDocument && this._pdfDocument !== pdfDocument) { + return; + } + this.#extractText(); + const findbarClosed = !this._highlightMatches; + const pendingTimeout = !!this._findTimeout; + if (this._findTimeout) { + clearTimeout(this._findTimeout); + this._findTimeout = null; + } + if (!type) { + this._findTimeout = setTimeout(() => { + this.#nextMatch(); + this._findTimeout = null; + }, FIND_TIMEOUT); + } else if (this._dirtyMatch) { + this.#nextMatch(); + } else if (type === "again") { + this.#nextMatch(); + if (findbarClosed && this.#state.highlightAll) { + this.#updateAllPages(); + } + } else if (type === "highlightallchange") { + if (pendingTimeout) { + this.#nextMatch(); + } else { + this._highlightMatches = true; + } + this.#updateAllPages(); + } else { + this.#nextMatch(); + } + }); + } + scrollMatchIntoView({ + element = null, + selectedLeft = 0, + pageIndex = -1, + matchIndex = -1 + }) { + if (!this._scrollMatches || !element) { + return; + } else if (matchIndex === -1 || matchIndex !== this._selected.matchIdx) { + return; + } else if (pageIndex === -1 || pageIndex !== this._selected.pageIdx) { + return; + } + this._scrollMatches = false; + const spot = { + top: MATCH_SCROLL_OFFSET_TOP, + left: selectedLeft + }; + scrollIntoView(element, spot, true); + } + #reset() { + this._highlightMatches = false; + this._scrollMatches = false; + this._pdfDocument = null; + this._pageMatches = []; + this._pageMatchesLength = []; + this.#visitedPagesCount = 0; + this.#state = null; + this._selected = { + pageIdx: -1, + matchIdx: -1 + }; + this._offset = { + pageIdx: null, + matchIdx: null, + wrapped: false + }; + this._extractTextPromises = []; + this._pageContents = []; + this._pageDiffs = []; + this._hasDiacritics = []; + this._matchesCountTotal = 0; + this._pagesToSearch = null; + this._pendingFindMatches = new Set(); + this._resumePageIdx = null; + this._dirtyMatch = false; + clearTimeout(this._findTimeout); + this._findTimeout = null; + this._firstPageCapability = Promise.withResolvers(); + } + get #query() { + const { + query + } = this.#state; + if (typeof query === "string") { + if (query !== this._rawQuery) { + this._rawQuery = query; + [this._normalizedQuery] = normalize(query); + } + return this._normalizedQuery; + } + return (query || []).filter(q => !!q).map(q => normalize(q)[0]); + } + #shouldDirtyMatch(state) { + const newQuery = state.query, + prevQuery = this.#state.query; + const newType = typeof newQuery, + prevType = typeof prevQuery; + if (newType !== prevType) { + return true; + } + if (newType === "string") { + if (newQuery !== prevQuery) { + return true; + } + } else if (JSON.stringify(newQuery) !== JSON.stringify(prevQuery)) { + return true; + } + switch (state.type) { + case "again": + const pageNumber = this._selected.pageIdx + 1; + const linkService = this._linkService; + return pageNumber >= 1 && pageNumber <= linkService.pagesCount && pageNumber !== linkService.page && !(this.onIsPageVisible?.(pageNumber) ?? true); + case "highlightallchange": + return false; + } + return true; + } + #isEntireWord(content, startIdx, length) { + let match = content.slice(0, startIdx).match(NOT_DIACRITIC_FROM_END_REG_EXP); + if (match) { + const first = content.charCodeAt(startIdx); + const limit = match[1].charCodeAt(0); + if (getCharacterType(first) === getCharacterType(limit)) { + return false; + } + } + match = content.slice(startIdx + length).match(NOT_DIACRITIC_FROM_START_REG_EXP); + if (match) { + const last = content.charCodeAt(startIdx + length - 1); + const limit = match[1].charCodeAt(0); + if (getCharacterType(last) === getCharacterType(limit)) { + return false; + } + } + return true; + } + #convertToRegExpString(query, hasDiacritics) { + const { + matchDiacritics + } = this.#state; + let isUnicode = false; + query = query.replaceAll(SPECIAL_CHARS_REG_EXP, (match, p1, p2, p3, p4, p5) => { + if (p1) { + return `[ ]*\\${p1}[ ]*`; + } + if (p2) { + return `[ ]*${p2}[ ]*`; + } + if (p3) { + return "[ ]+"; + } + if (matchDiacritics) { + return p4 || p5; + } + if (p4) { + return DIACRITICS_EXCEPTION.has(p4.charCodeAt(0)) ? p4 : ""; + } + if (hasDiacritics) { + isUnicode = true; + return `${p5}\\p{M}*`; + } + return p5; + }); + const trailingSpaces = "[ ]*"; + if (query.endsWith(trailingSpaces)) { + query = query.slice(0, query.length - trailingSpaces.length); + } + if (matchDiacritics) { + if (hasDiacritics) { + DIACRITICS_EXCEPTION_STR ||= String.fromCharCode(...DIACRITICS_EXCEPTION); + isUnicode = true; + query = `${query}(?=[${DIACRITICS_EXCEPTION_STR}]|[^\\p{M}]|$)`; + } + } + return [isUnicode, query]; + } + #calculateMatch(pageIndex) { + if (!this.#state) { + return; + } + const query = this.#query; + if (query.length === 0) { + return; + } + const pageContent = this._pageContents[pageIndex]; + const matcherResult = this.match(query, pageContent, pageIndex); + const matches = this._pageMatches[pageIndex] = []; + const matchesLength = this._pageMatchesLength[pageIndex] = []; + const diffs = this._pageDiffs[pageIndex]; + matcherResult?.forEach(({ + index, + length + }) => { + const [matchPos, matchLen] = getOriginalIndex(diffs, index, length); + if (matchLen) { + matches.push(matchPos); + matchesLength.push(matchLen); + } + }); + if (this.#state.highlightAll) { + this.#updatePage(pageIndex); + } + if (this._resumePageIdx === pageIndex) { + this._resumePageIdx = null; + this.#nextPageMatch(); + } + const pageMatchesCount = matches.length; + this._matchesCountTotal += pageMatchesCount; + if (this.#updateMatchesCountOnProgress) { + if (pageMatchesCount > 0) { + this.#updateUIResultsCount(); + } + } else if (++this.#visitedPagesCount === this._linkService.pagesCount) { + this.#updateUIResultsCount(); + } + } + match(query, pageContent, pageIndex) { + const hasDiacritics = this._hasDiacritics[pageIndex]; + let isUnicode = false; + if (typeof query === "string") { + [isUnicode, query] = this.#convertToRegExpString(query, hasDiacritics); + } else { + query = query.sort().reverse().map(q => { + const [isUnicodePart, queryPart] = this.#convertToRegExpString(q, hasDiacritics); + isUnicode ||= isUnicodePart; + return `(${queryPart})`; + }).join("|"); + } + if (!query) { + return undefined; + } + const { + caseSensitive, + entireWord + } = this.#state; + const flags = `g${isUnicode ? "u" : ""}${caseSensitive ? "" : "i"}`; + query = new RegExp(query, flags); + const matches = []; + let match; + while ((match = query.exec(pageContent)) !== null) { + if (entireWord && !this.#isEntireWord(pageContent, match.index, match[0].length)) { + continue; + } + matches.push({ + index: match.index, + length: match[0].length + }); + } + return matches; + } + #extractText() { + if (this._extractTextPromises.length > 0) { + return; + } + let deferred = Promise.resolve(); + const textOptions = { + disableNormalization: true + }; + const pdfDoc = this._pdfDocument; + for (let i = 0, ii = this._linkService.pagesCount; i < ii; i++) { + const { + promise, + resolve + } = Promise.withResolvers(); + this._extractTextPromises[i] = promise; + deferred = deferred.then(async () => { + if (pdfDoc !== this._pdfDocument) { + resolve(); + return; + } + await pdfDoc.getPage(i + 1).then(pdfPage => pdfPage.getTextContent(textOptions)).then(textContent => { + const strBuf = []; + for (const textItem of textContent.items) { + strBuf.push(textItem.str); + if (textItem.hasEOL) { + strBuf.push("\n"); + } + } + [this._pageContents[i], this._pageDiffs[i], this._hasDiacritics[i]] = normalize(strBuf.join("")); + resolve(); + }, reason => { + console.error(`Unable to get text content for page ${i + 1}`, reason); + this._pageContents[i] = ""; + this._pageDiffs[i] = null; + this._hasDiacritics[i] = false; + resolve(); + }); + }); + } + } + #updatePage(index) { + if (this._scrollMatches && this._selected.pageIdx === index) { + this._linkService.page = index + 1; + } + this._eventBus.dispatch("updatetextlayermatches", { + source: this, + pageIndex: index + }); + } + #updateAllPages() { + this._eventBus.dispatch("updatetextlayermatches", { + source: this, + pageIndex: -1 + }); + } + #nextMatch() { + const previous = this.#state.findPrevious; + const currentPageIndex = this._linkService.page - 1; + const numPages = this._linkService.pagesCount; + this._highlightMatches = true; + if (this._dirtyMatch) { + this._dirtyMatch = false; + this._selected.pageIdx = this._selected.matchIdx = -1; + this._offset.pageIdx = currentPageIndex; + this._offset.matchIdx = null; + this._offset.wrapped = false; + this._resumePageIdx = null; + this._pageMatches.length = 0; + this._pageMatchesLength.length = 0; + this.#visitedPagesCount = 0; + this._matchesCountTotal = 0; + this.#updateAllPages(); + for (let i = 0; i < numPages; i++) { + if (this._pendingFindMatches.has(i)) { + continue; + } + this._pendingFindMatches.add(i); + this._extractTextPromises[i].then(() => { + this._pendingFindMatches.delete(i); + this.#calculateMatch(i); + }); + } + } + const query = this.#query; + if (query.length === 0) { + this.#updateUIState(FindState.FOUND); + return; + } + if (this._resumePageIdx) { + return; + } + const offset = this._offset; + this._pagesToSearch = numPages; + if (offset.matchIdx !== null) { + const numPageMatches = this._pageMatches[offset.pageIdx].length; + if (!previous && offset.matchIdx + 1 < numPageMatches || previous && offset.matchIdx > 0) { + offset.matchIdx = previous ? offset.matchIdx - 1 : offset.matchIdx + 1; + this.#updateMatch(true); + return; + } + this.#advanceOffsetPage(previous); + } + this.#nextPageMatch(); + } + #matchesReady(matches) { + const offset = this._offset; + const numMatches = matches.length; + const previous = this.#state.findPrevious; + if (numMatches) { + offset.matchIdx = previous ? numMatches - 1 : 0; + this.#updateMatch(true); + return true; + } + this.#advanceOffsetPage(previous); + if (offset.wrapped) { + offset.matchIdx = null; + if (this._pagesToSearch < 0) { + this.#updateMatch(false); + return true; + } + } + return false; + } + #nextPageMatch() { + if (this._resumePageIdx !== null) { + console.error("There can only be one pending page."); + } + let matches = null; + do { + const pageIdx = this._offset.pageIdx; + matches = this._pageMatches[pageIdx]; + if (!matches) { + this._resumePageIdx = pageIdx; + break; + } + } while (!this.#matchesReady(matches)); + } + #advanceOffsetPage(previous) { + const offset = this._offset; + const numPages = this._linkService.pagesCount; + offset.pageIdx = previous ? offset.pageIdx - 1 : offset.pageIdx + 1; + offset.matchIdx = null; + this._pagesToSearch--; + if (offset.pageIdx >= numPages || offset.pageIdx < 0) { + offset.pageIdx = previous ? numPages - 1 : 0; + offset.wrapped = true; + } + } + #updateMatch(found = false) { + let state = FindState.NOT_FOUND; + const wrapped = this._offset.wrapped; + this._offset.wrapped = false; + if (found) { + const previousPage = this._selected.pageIdx; + this._selected.pageIdx = this._offset.pageIdx; + this._selected.matchIdx = this._offset.matchIdx; + state = wrapped ? FindState.WRAPPED : FindState.FOUND; + if (previousPage !== -1 && previousPage !== this._selected.pageIdx) { + this.#updatePage(previousPage); + } + } + this.#updateUIState(state, this.#state.findPrevious); + if (this._selected.pageIdx !== -1) { + this._scrollMatches = true; + this.#updatePage(this._selected.pageIdx); + } + } + #onFindBarClose(evt) { + const pdfDocument = this._pdfDocument; + this._firstPageCapability.promise.then(() => { + if (!this._pdfDocument || pdfDocument && this._pdfDocument !== pdfDocument) { + return; + } + if (this._findTimeout) { + clearTimeout(this._findTimeout); + this._findTimeout = null; + } + if (this._resumePageIdx) { + this._resumePageIdx = null; + this._dirtyMatch = true; + } + this.#updateUIState(FindState.FOUND); + this._highlightMatches = false; + this.#updateAllPages(); + }); + } + #requestMatchesCount() { + const { + pageIdx, + matchIdx + } = this._selected; + let current = 0, + total = this._matchesCountTotal; + if (matchIdx !== -1) { + for (let i = 0; i < pageIdx; i++) { + current += this._pageMatches[i]?.length || 0; + } + current += matchIdx + 1; + } + if (current < 1 || current > total) { + current = total = 0; + } + return { + current, + total + }; + } + #updateUIResultsCount() { + this._eventBus.dispatch("updatefindmatchescount", { + source: this, + matchesCount: this.#requestMatchesCount() + }); + } + #updateUIState(state, previous = false) { + if (!this.#updateMatchesCountOnProgress && (this.#visitedPagesCount !== this._linkService.pagesCount || state === FindState.PENDING)) { + return; + } + this._eventBus.dispatch("updatefindcontrolstate", { + source: this, + state, + previous, + entireWord: this.#state?.entireWord ?? null, + matchesCount: this.#requestMatchesCount(), + rawQuery: this.#state?.query ?? null + }); + } +} + +;// ./web/pdf_find_bar.js + + +const MATCHES_COUNT_LIMIT = 1000; +class PDFFindBar { + #mainContainer; + #resizeObserver = new ResizeObserver(this.#resizeObserverCallback.bind(this)); + constructor(options, mainContainer, eventBus) { + this.opened = false; + this.bar = options.bar; + this.toggleButton = options.toggleButton; + this.findField = options.findField; + this.highlightAll = options.highlightAllCheckbox; + this.caseSensitive = options.caseSensitiveCheckbox; + this.matchDiacritics = options.matchDiacriticsCheckbox; + this.entireWord = options.entireWordCheckbox; + this.findMsg = options.findMsg; + this.findResultsCount = options.findResultsCount; + this.findPreviousButton = options.findPreviousButton; + this.findNextButton = options.findNextButton; + this.eventBus = eventBus; + this.#mainContainer = mainContainer; + const checkedInputs = new Map([[this.highlightAll, "highlightallchange"], [this.caseSensitive, "casesensitivitychange"], [this.entireWord, "entirewordchange"], [this.matchDiacritics, "diacriticmatchingchange"]]); + this.toggleButton.addEventListener("click", () => { + this.toggle(); + }); + this.findField.addEventListener("input", () => { + this.dispatchEvent(""); + }); + this.bar.addEventListener("keydown", ({ + keyCode, + shiftKey, + target + }) => { + switch (keyCode) { + case 13: + if (target === this.findField) { + this.dispatchEvent("again", shiftKey); + } else if (checkedInputs.has(target)) { + target.checked = !target.checked; + this.dispatchEvent(checkedInputs.get(target)); + } + break; + case 27: + this.close(); + break; + } + }); + this.findPreviousButton.addEventListener("click", () => { + this.dispatchEvent("again", true); + }); + this.findNextButton.addEventListener("click", () => { + this.dispatchEvent("again", false); + }); + for (const [elem, evtName] of checkedInputs) { + elem.addEventListener("click", () => { + this.dispatchEvent(evtName); + }); + } + } + reset() { + this.updateUIState(); + } + dispatchEvent(type, findPrev = false) { + this.eventBus.dispatch("find", { + source: this, + type, + query: this.findField.value, + caseSensitive: this.caseSensitive.checked, + entireWord: this.entireWord.checked, + highlightAll: this.highlightAll.checked, + findPrevious: findPrev, + matchDiacritics: this.matchDiacritics.checked + }); + } + updateUIState(state, previous, matchesCount) { + const { + findField, + findMsg + } = this; + let findMsgId = "", + status = ""; + switch (state) { + case FindState.FOUND: + break; + case FindState.PENDING: + status = "pending"; + break; + case FindState.NOT_FOUND: + findMsgId = "pdfjs-find-not-found"; + status = "notFound"; + break; + case FindState.WRAPPED: + findMsgId = previous ? "pdfjs-find-reached-top" : "pdfjs-find-reached-bottom"; + break; + } + findField.setAttribute("data-status", status); + findField.setAttribute("aria-invalid", state === FindState.NOT_FOUND); + findMsg.setAttribute("data-status", status); + if (findMsgId) { + findMsg.setAttribute("data-l10n-id", findMsgId); + } else { + findMsg.removeAttribute("data-l10n-id"); + findMsg.textContent = ""; + } + this.updateResultsCount(matchesCount); + } + updateResultsCount({ + current = 0, + total = 0 + } = {}) { + const { + findResultsCount + } = this; + if (total > 0) { + const limit = MATCHES_COUNT_LIMIT; + findResultsCount.setAttribute("data-l10n-id", total > limit ? "pdfjs-find-match-count-limit" : "pdfjs-find-match-count"); + findResultsCount.setAttribute("data-l10n-args", JSON.stringify({ + limit, + current, + total + })); + } else { + findResultsCount.removeAttribute("data-l10n-id"); + findResultsCount.textContent = ""; + } + } + open() { + if (!this.opened) { + this.#resizeObserver.observe(this.#mainContainer); + this.#resizeObserver.observe(this.bar); + this.opened = true; + toggleExpandedBtn(this.toggleButton, true, this.bar); + } + this.findField.select(); + this.findField.focus(); + } + close() { + if (!this.opened) { + return; + } + this.#resizeObserver.disconnect(); + this.opened = false; + toggleExpandedBtn(this.toggleButton, false, this.bar); + this.eventBus.dispatch("findbarclose", { + source: this + }); + } + toggle() { + if (this.opened) { + this.close(); + } else { + this.open(); + } + } + #resizeObserverCallback() { + const { + bar + } = this; + bar.classList.remove("wrapContainers"); + const findbarHeight = bar.clientHeight; + const inputContainerHeight = bar.firstElementChild.clientHeight; + if (findbarHeight > inputContainerHeight) { + bar.classList.add("wrapContainers"); + } + } +} + +;// ./web/pdf_history.js + + + +const HASH_CHANGE_TIMEOUT = 1000; +const POSITION_UPDATED_THRESHOLD = 50; +const UPDATE_VIEWAREA_TIMEOUT = 1000; +function getCurrentHash() { + return document.location.hash; +} +class PDFHistory { + #eventAbortController = null; + constructor({ + linkService, + eventBus + }) { + this.linkService = linkService; + this.eventBus = eventBus; + this._initialized = false; + this._fingerprint = ""; + this.reset(); + this.eventBus._on("pagesinit", () => { + this._isPagesLoaded = false; + this.eventBus._on("pagesloaded", evt => { + this._isPagesLoaded = !!evt.pagesCount; + }, { + once: true + }); + }); + } + initialize({ + fingerprint, + resetHistory = false, + updateUrl = false + }) { + if (!fingerprint || typeof fingerprint !== "string") { + console.error('PDFHistory.initialize: The "fingerprint" must be a non-empty string.'); + return; + } + if (this._initialized) { + this.reset(); + } + const reInitialized = this._fingerprint !== "" && this._fingerprint !== fingerprint; + this._fingerprint = fingerprint; + this._updateUrl = updateUrl === true; + this._initialized = true; + this.#bindEvents(); + const state = window.history.state; + this._popStateInProgress = false; + this._blockHashChange = 0; + this._currentHash = getCurrentHash(); + this._numPositionUpdates = 0; + this._uid = this._maxUid = 0; + this._destination = null; + this._position = null; + if (!this.#isValidState(state, true) || resetHistory) { + const { + hash, + page, + rotation + } = this.#parseCurrentHash(true); + if (!hash || reInitialized || resetHistory) { + this.#pushOrReplaceState(null, true); + return; + } + this.#pushOrReplaceState({ + hash, + page, + rotation + }, true); + return; + } + const destination = state.destination; + this.#updateInternalState(destination, state.uid, true); + if (destination.rotation !== undefined) { + this._initialRotation = destination.rotation; + } + if (destination.dest) { + this._initialBookmark = JSON.stringify(destination.dest); + this._destination.page = null; + } else if (destination.hash) { + this._initialBookmark = destination.hash; + } else if (destination.page) { + this._initialBookmark = `page=${destination.page}`; + } + } + reset() { + if (this._initialized) { + this.#pageHide(); + this._initialized = false; + this.#unbindEvents(); + } + if (this._updateViewareaTimeout) { + clearTimeout(this._updateViewareaTimeout); + this._updateViewareaTimeout = null; + } + this._initialBookmark = null; + this._initialRotation = null; + } + push({ + namedDest = null, + explicitDest, + pageNumber + }) { + if (!this._initialized) { + return; + } + if (namedDest && typeof namedDest !== "string") { + console.error("PDFHistory.push: " + `"${namedDest}" is not a valid namedDest parameter.`); + return; + } else if (!Array.isArray(explicitDest)) { + console.error("PDFHistory.push: " + `"${explicitDest}" is not a valid explicitDest parameter.`); + return; + } else if (!this.#isValidPage(pageNumber)) { + if (pageNumber !== null || this._destination) { + console.error("PDFHistory.push: " + `"${pageNumber}" is not a valid pageNumber parameter.`); + return; + } + } + const hash = namedDest || JSON.stringify(explicitDest); + if (!hash) { + return; + } + let forceReplace = false; + if (this._destination && (isDestHashesEqual(this._destination.hash, hash) || isDestArraysEqual(this._destination.dest, explicitDest))) { + if (this._destination.page) { + return; + } + forceReplace = true; + } + if (this._popStateInProgress && !forceReplace) { + return; + } + this.#pushOrReplaceState({ + dest: explicitDest, + hash, + page: pageNumber, + rotation: this.linkService.rotation + }, forceReplace); + if (!this._popStateInProgress) { + this._popStateInProgress = true; + Promise.resolve().then(() => { + this._popStateInProgress = false; + }); + } + } + pushPage(pageNumber) { + if (!this._initialized) { + return; + } + if (!this.#isValidPage(pageNumber)) { + console.error(`PDFHistory.pushPage: "${pageNumber}" is not a valid page number.`); + return; + } + if (this._destination?.page === pageNumber) { + return; + } + if (this._popStateInProgress) { + return; + } + this.#pushOrReplaceState({ + dest: null, + hash: `page=${pageNumber}`, + page: pageNumber, + rotation: this.linkService.rotation + }); + if (!this._popStateInProgress) { + this._popStateInProgress = true; + Promise.resolve().then(() => { + this._popStateInProgress = false; + }); + } + } + pushCurrentPosition() { + if (!this._initialized || this._popStateInProgress) { + return; + } + this.#tryPushCurrentPosition(); + } + back() { + if (!this._initialized || this._popStateInProgress) { + return; + } + const state = window.history.state; + if (this.#isValidState(state) && state.uid > 0) { + window.history.back(); + } + } + forward() { + if (!this._initialized || this._popStateInProgress) { + return; + } + const state = window.history.state; + if (this.#isValidState(state) && state.uid < this._maxUid) { + window.history.forward(); + } + } + get popStateInProgress() { + return this._initialized && (this._popStateInProgress || this._blockHashChange > 0); + } + get initialBookmark() { + return this._initialized ? this._initialBookmark : null; + } + get initialRotation() { + return this._initialized ? this._initialRotation : null; + } + #pushOrReplaceState(destination, forceReplace = false) { + const shouldReplace = forceReplace || !this._destination; + const newState = { + fingerprint: this._fingerprint, + uid: shouldReplace ? this._uid : this._uid + 1, + destination + }; + this.#updateInternalState(destination, newState.uid); + let newUrl; + if (this._updateUrl && destination?.hash) { + const { + href, + protocol + } = document.location; + if (protocol !== "file:") { + newUrl = updateUrlHash(href, destination.hash); + } + } + if (shouldReplace) { + window.history.replaceState(newState, "", newUrl); + } else { + window.history.pushState(newState, "", newUrl); + } + } + #tryPushCurrentPosition(temporary = false) { + if (!this._position) { + return; + } + let position = this._position; + if (temporary) { + position = Object.assign(Object.create(null), this._position); + position.temporary = true; + } + if (!this._destination) { + this.#pushOrReplaceState(position); + return; + } + if (this._destination.temporary) { + this.#pushOrReplaceState(position, true); + return; + } + if (this._destination.hash === position.hash) { + return; + } + if (!this._destination.page && (POSITION_UPDATED_THRESHOLD <= 0 || this._numPositionUpdates <= POSITION_UPDATED_THRESHOLD)) { + return; + } + let forceReplace = false; + if (this._destination.page >= position.first && this._destination.page <= position.page) { + if (this._destination.dest !== undefined || !this._destination.first) { + return; + } + forceReplace = true; + } + this.#pushOrReplaceState(position, forceReplace); + } + #isValidPage(val) { + return Number.isInteger(val) && val > 0 && val <= this.linkService.pagesCount; + } + #isValidState(state, checkReload = false) { + if (!state) { + return false; + } + if (state.fingerprint !== this._fingerprint) { + if (checkReload) { + if (typeof state.fingerprint !== "string" || state.fingerprint.length !== this._fingerprint.length) { + return false; + } + const [perfEntry] = performance.getEntriesByType("navigation"); + if (perfEntry?.type !== "reload") { + return false; + } + } else { + return false; + } + } + if (!Number.isInteger(state.uid) || state.uid < 0) { + return false; + } + if (state.destination === null || typeof state.destination !== "object") { + return false; + } + return true; + } + #updateInternalState(destination, uid, removeTemporary = false) { + if (this._updateViewareaTimeout) { + clearTimeout(this._updateViewareaTimeout); + this._updateViewareaTimeout = null; + } + if (removeTemporary && destination?.temporary) { + delete destination.temporary; + } + this._destination = destination; + this._uid = uid; + this._maxUid = Math.max(this._maxUid, uid); + this._numPositionUpdates = 0; + } + #parseCurrentHash(checkNameddest = false) { + const hash = unescape(getCurrentHash()).substring(1); + const params = parseQueryString(hash); + const nameddest = params.get("nameddest") || ""; + let page = params.get("page") | 0; + if (!this.#isValidPage(page) || checkNameddest && nameddest.length > 0) { + page = null; + } + return { + hash, + page, + rotation: this.linkService.rotation + }; + } + #updateViewarea({ + location + }) { + if (this._updateViewareaTimeout) { + clearTimeout(this._updateViewareaTimeout); + this._updateViewareaTimeout = null; + } + this._position = { + hash: location.pdfOpenParams.substring(1), + page: this.linkService.page, + first: location.pageNumber, + rotation: location.rotation + }; + if (this._popStateInProgress) { + return; + } + if (POSITION_UPDATED_THRESHOLD > 0 && this._isPagesLoaded && this._destination && !this._destination.page) { + this._numPositionUpdates++; + } + if (UPDATE_VIEWAREA_TIMEOUT > 0) { + this._updateViewareaTimeout = setTimeout(() => { + if (!this._popStateInProgress) { + this.#tryPushCurrentPosition(true); + } + this._updateViewareaTimeout = null; + }, UPDATE_VIEWAREA_TIMEOUT); + } + } + #popState({ + state + }) { + const newHash = getCurrentHash(), + hashChanged = this._currentHash !== newHash; + this._currentHash = newHash; + if (!state) { + this._uid++; + const { + hash, + page, + rotation + } = this.#parseCurrentHash(); + this.#pushOrReplaceState({ + hash, + page, + rotation + }, true); + return; + } + if (!this.#isValidState(state)) { + return; + } + this._popStateInProgress = true; + if (hashChanged) { + this._blockHashChange++; + waitOnEventOrTimeout({ + target: window, + name: "hashchange", + delay: HASH_CHANGE_TIMEOUT + }).then(() => { + this._blockHashChange--; + }); + } + const destination = state.destination; + this.#updateInternalState(destination, state.uid, true); + if (isValidRotation(destination.rotation)) { + this.linkService.rotation = destination.rotation; + } + if (destination.dest) { + this.linkService.goToDestination(destination.dest); + } else if (destination.hash) { + this.linkService.setHash(destination.hash); + } else if (destination.page) { + this.linkService.page = destination.page; + } + Promise.resolve().then(() => { + this._popStateInProgress = false; + }); + } + #pageHide() { + if (!this._destination || this._destination.temporary) { + this.#tryPushCurrentPosition(); + } + } + #bindEvents() { + if (this.#eventAbortController) { + return; + } + this.#eventAbortController = new AbortController(); + const { + signal + } = this.#eventAbortController; + this.eventBus._on("updateviewarea", this.#updateViewarea.bind(this), { + signal + }); + window.addEventListener("popstate", this.#popState.bind(this), { + signal + }); + window.addEventListener("pagehide", this.#pageHide.bind(this), { + signal + }); + } + #unbindEvents() { + this.#eventAbortController?.abort(); + this.#eventAbortController = null; + } +} +function isDestHashesEqual(destHash, pushHash) { + if (typeof destHash !== "string" || typeof pushHash !== "string") { + return false; + } + if (destHash === pushHash) { + return true; + } + const nameddest = parseQueryString(destHash).get("nameddest"); + if (nameddest === pushHash) { + return true; + } + return false; +} +function isDestArraysEqual(firstDest, secondDest) { + function isEntryEqual(first, second) { + if (typeof first !== typeof second) { + return false; + } + if (Array.isArray(first) || Array.isArray(second)) { + return false; + } + if (first !== null && typeof first === "object" && second !== null) { + if (Object.keys(first).length !== Object.keys(second).length) { + return false; + } + for (const key in first) { + if (!isEntryEqual(first[key], second[key])) { + return false; + } + } + return true; + } + return first === second || Number.isNaN(first) && Number.isNaN(second); + } + if (!(Array.isArray(firstDest) && Array.isArray(secondDest))) { + return false; + } + if (firstDest.length !== secondDest.length) { + return false; + } + for (let i = 0, ii = firstDest.length; i < ii; i++) { + if (!isEntryEqual(firstDest[i], secondDest[i])) { + return false; + } + } + return true; +} + +;// ./web/pdf_layer_viewer.js + +class PDFLayerViewer extends BaseTreeViewer { + constructor(options) { + super(options); + this.eventBus._on("optionalcontentconfigchanged", evt => { + this.#updateLayers(evt.promise); + }); + this.eventBus._on("resetlayers", () => { + this.#updateLayers(); + }); + this.eventBus._on("togglelayerstree", this._toggleAllTreeItems.bind(this)); + } + reset() { + super.reset(); + this._optionalContentConfig = null; + this._optionalContentVisibility?.clear(); + this._optionalContentVisibility = null; + } + _dispatchEvent(layersCount) { + this.eventBus.dispatch("layersloaded", { + source: this, + layersCount + }); + } + _bindLink(element, { + groupId, + input + }) { + const setVisibility = () => { + const visible = input.checked; + this._optionalContentConfig.setVisibility(groupId, visible); + const cached = this._optionalContentVisibility.get(groupId); + if (cached) { + cached.visible = visible; + } + this.eventBus.dispatch("optionalcontentconfig", { + source: this, + promise: Promise.resolve(this._optionalContentConfig) + }); + }; + element.onclick = evt => { + if (evt.target === input) { + setVisibility(); + return true; + } else if (evt.target !== element) { + return true; + } + input.checked = !input.checked; + setVisibility(); + return false; + }; + } + _setNestedName(element, { + name = null + }) { + if (typeof name === "string") { + element.textContent = this._normalizeTextContent(name); + return; + } + element.setAttribute("data-l10n-id", "pdfjs-additional-layers"); + element.style.fontStyle = "italic"; + this._l10n.translateOnce(element); + } + _addToggleButton(div, { + name = null + }) { + super._addToggleButton(div, name === null); + } + _toggleAllTreeItems() { + if (!this._optionalContentConfig) { + return; + } + super._toggleAllTreeItems(); + } + render({ + optionalContentConfig, + pdfDocument + }) { + if (this._optionalContentConfig) { + this.reset(); + } + this._optionalContentConfig = optionalContentConfig || null; + this._pdfDocument = pdfDocument || null; + const groups = optionalContentConfig?.getOrder(); + if (!groups) { + this._dispatchEvent(0); + return; + } + this._optionalContentVisibility = new Map(); + const fragment = document.createDocumentFragment(), + queue = [{ + parent: fragment, + groups + }]; + let layersCount = 0, + hasAnyNesting = false; + while (queue.length > 0) { + const levelData = queue.shift(); + for (const groupId of levelData.groups) { + const div = document.createElement("div"); + div.className = "treeItem"; + const element = document.createElement("a"); + div.append(element); + if (typeof groupId === "object") { + hasAnyNesting = true; + this._addToggleButton(div, groupId); + this._setNestedName(element, groupId); + const itemsDiv = document.createElement("div"); + itemsDiv.className = "treeItems"; + div.append(itemsDiv); + queue.push({ + parent: itemsDiv, + groups: groupId.order + }); + } else { + const group = optionalContentConfig.getGroup(groupId); + const input = document.createElement("input"); + this._bindLink(element, { + groupId, + input + }); + input.type = "checkbox"; + input.checked = group.visible; + this._optionalContentVisibility.set(groupId, { + input, + visible: input.checked + }); + const label = document.createElement("label"); + label.textContent = this._normalizeTextContent(group.name); + label.append(input); + element.append(label); + layersCount++; + } + levelData.parent.append(div); + } + } + this._finishRendering(fragment, layersCount, hasAnyNesting); + } + async #updateLayers(promise = null) { + if (!this._optionalContentConfig) { + return; + } + const pdfDocument = this._pdfDocument; + const optionalContentConfig = await (promise || pdfDocument.getOptionalContentConfig({ + intent: "display" + })); + if (pdfDocument !== this._pdfDocument) { + return; + } + if (promise) { + for (const [groupId, cached] of this._optionalContentVisibility) { + const group = optionalContentConfig.getGroup(groupId); + if (group && cached.visible !== group.visible) { + cached.input.checked = cached.visible = !cached.visible; + } + } + return; + } + this.eventBus.dispatch("optionalcontentconfig", { + source: this, + promise: Promise.resolve(optionalContentConfig) + }); + this.render({ + optionalContentConfig, + pdfDocument: this._pdfDocument + }); + } +} + +;// ./web/pdf_outline_viewer.js + + +class PDFOutlineViewer extends BaseTreeViewer { + constructor(options) { + super(options); + this.linkService = options.linkService; + this.downloadManager = options.downloadManager; + this.eventBus._on("toggleoutlinetree", this._toggleAllTreeItems.bind(this)); + this.eventBus._on("currentoutlineitem", this._currentOutlineItem.bind(this)); + this.eventBus._on("pagechanging", evt => { + this._currentPageNumber = evt.pageNumber; + }); + this.eventBus._on("pagesloaded", evt => { + this._isPagesLoaded = !!evt.pagesCount; + this._currentOutlineItemCapability?.resolve(this._isPagesLoaded); + }); + this.eventBus._on("sidebarviewchanged", evt => { + this._sidebarView = evt.view; + }); + } + reset() { + super.reset(); + this._outline = null; + this._pageNumberToDestHashCapability = null; + this._currentPageNumber = 1; + this._isPagesLoaded = null; + this._currentOutlineItemCapability?.resolve(false); + this._currentOutlineItemCapability = null; + } + _dispatchEvent(outlineCount) { + this._currentOutlineItemCapability = Promise.withResolvers(); + if (outlineCount === 0 || this._pdfDocument?.loadingParams.disableAutoFetch) { + this._currentOutlineItemCapability.resolve(false); + } else if (this._isPagesLoaded !== null) { + this._currentOutlineItemCapability.resolve(this._isPagesLoaded); + } + this.eventBus.dispatch("outlineloaded", { + source: this, + outlineCount, + currentOutlineItemPromise: this._currentOutlineItemCapability.promise + }); + } + _bindLink(element, { + url, + newWindow, + action, + attachment, + dest, + setOCGState + }) { + const { + linkService + } = this; + if (url) { + linkService.addLinkAttributes(element, url, newWindow); + return; + } + if (action) { + element.href = linkService.getAnchorUrl(""); + element.onclick = () => { + linkService.executeNamedAction(action); + return false; + }; + return; + } + if (attachment) { + element.href = linkService.getAnchorUrl(""); + element.onclick = () => { + this.downloadManager.openOrDownloadData(attachment.content, attachment.filename); + return false; + }; + return; + } + if (setOCGState) { + element.href = linkService.getAnchorUrl(""); + element.onclick = () => { + linkService.executeSetOCGState(setOCGState); + return false; + }; + return; + } + element.href = linkService.getDestinationHash(dest); + element.onclick = evt => { + this._updateCurrentTreeItem(evt.target.parentNode); + if (dest) { + linkService.goToDestination(dest); + } + return false; + }; + } + _setStyles(element, { + bold, + italic + }) { + if (bold) { + element.style.fontWeight = "bold"; + } + if (italic) { + element.style.fontStyle = "italic"; + } + } + _addToggleButton(div, { + count, + items + }) { + let hidden = false; + if (count < 0) { + let totalCount = items.length; + if (totalCount > 0) { + const queue = [...items]; + while (queue.length > 0) { + const { + count: nestedCount, + items: nestedItems + } = queue.shift(); + if (nestedCount > 0 && nestedItems.length > 0) { + totalCount += nestedItems.length; + queue.push(...nestedItems); + } + } + } + if (Math.abs(count) === totalCount) { + hidden = true; + } + } + super._addToggleButton(div, hidden); + } + _toggleAllTreeItems() { + if (!this._outline) { + return; + } + super._toggleAllTreeItems(); + } + render({ + outline, + pdfDocument + }) { + if (this._outline) { + this.reset(); + } + this._outline = outline || null; + this._pdfDocument = pdfDocument || null; + if (!outline) { + this._dispatchEvent(0); + return; + } + const fragment = document.createDocumentFragment(); + const queue = [{ + parent: fragment, + items: outline + }]; + let outlineCount = 0, + hasAnyNesting = false; + while (queue.length > 0) { + const levelData = queue.shift(); + for (const item of levelData.items) { + const div = document.createElement("div"); + div.className = "treeItem"; + const element = document.createElement("a"); + this._bindLink(element, item); + this._setStyles(element, item); + element.textContent = this._normalizeTextContent(item.title); + div.append(element); + if (item.items.length > 0) { + hasAnyNesting = true; + this._addToggleButton(div, item); + const itemsDiv = document.createElement("div"); + itemsDiv.className = "treeItems"; + div.append(itemsDiv); + queue.push({ + parent: itemsDiv, + items: item.items + }); + } + levelData.parent.append(div); + outlineCount++; + } + } + this._finishRendering(fragment, outlineCount, hasAnyNesting); + } + async _currentOutlineItem() { + if (!this._isPagesLoaded) { + throw new Error("_currentOutlineItem: All pages have not been loaded."); + } + if (!this._outline || !this._pdfDocument) { + return; + } + const pageNumberToDestHash = await this._getPageNumberToDestHash(this._pdfDocument); + if (!pageNumberToDestHash) { + return; + } + this._updateCurrentTreeItem(null); + if (this._sidebarView !== SidebarView.OUTLINE) { + return; + } + for (let i = this._currentPageNumber; i > 0; i--) { + const destHash = pageNumberToDestHash.get(i); + if (!destHash) { + continue; + } + const linkElement = this.container.querySelector(`a[href="${destHash}"]`); + if (!linkElement) { + continue; + } + this._scrollToCurrentTreeItem(linkElement.parentNode); + break; + } + } + async _getPageNumberToDestHash(pdfDocument) { + if (this._pageNumberToDestHashCapability) { + return this._pageNumberToDestHashCapability.promise; + } + this._pageNumberToDestHashCapability = Promise.withResolvers(); + const pageNumberToDestHash = new Map(), + pageNumberNesting = new Map(); + const queue = [{ + nesting: 0, + items: this._outline + }]; + while (queue.length > 0) { + const levelData = queue.shift(), + currentNesting = levelData.nesting; + for (const { + dest, + items + } of levelData.items) { + let explicitDest, pageNumber; + if (typeof dest === "string") { + explicitDest = await pdfDocument.getDestination(dest); + if (pdfDocument !== this._pdfDocument) { + return null; + } + } else { + explicitDest = dest; + } + if (Array.isArray(explicitDest)) { + const [destRef] = explicitDest; + if (destRef && typeof destRef === "object") { + pageNumber = pdfDocument.cachedPageNumber(destRef); + } else if (Number.isInteger(destRef)) { + pageNumber = destRef + 1; + } + if (Number.isInteger(pageNumber) && (!pageNumberToDestHash.has(pageNumber) || currentNesting > pageNumberNesting.get(pageNumber))) { + const destHash = this.linkService.getDestinationHash(dest); + pageNumberToDestHash.set(pageNumber, destHash); + pageNumberNesting.set(pageNumber, currentNesting); + } + } + if (items.length > 0) { + queue.push({ + nesting: currentNesting + 1, + items + }); + } + } + } + this._pageNumberToDestHashCapability.resolve(pageNumberToDestHash.size > 0 ? pageNumberToDestHash : null); + return this._pageNumberToDestHashCapability.promise; + } +} + +;// ./web/pdf_presentation_mode.js + + +const DELAY_BEFORE_HIDING_CONTROLS = 3000; +const ACTIVE_SELECTOR = "pdfPresentationMode"; +const CONTROLS_SELECTOR = "pdfPresentationModeControls"; +const MOUSE_SCROLL_COOLDOWN_TIME = 50; +const PAGE_SWITCH_THRESHOLD = 0.1; +const SWIPE_MIN_DISTANCE_THRESHOLD = 50; +const SWIPE_ANGLE_THRESHOLD = Math.PI / 6; +class PDFPresentationMode { + #state = PresentationModeState.UNKNOWN; + #args = null; + #fullscreenChangeAbortController = null; + #windowAbortController = null; + constructor({ + container, + pdfViewer, + eventBus + }) { + this.container = container; + this.pdfViewer = pdfViewer; + this.eventBus = eventBus; + this.contextMenuOpen = false; + this.mouseScrollTimeStamp = 0; + this.mouseScrollDelta = 0; + this.touchSwipeState = null; + } + async request() { + const { + container, + pdfViewer + } = this; + if (this.active || !pdfViewer.pagesCount || !container.requestFullscreen) { + return false; + } + this.#addFullscreenChangeListeners(); + this.#notifyStateChange(PresentationModeState.CHANGING); + const promise = container.requestFullscreen(); + this.#args = { + pageNumber: pdfViewer.currentPageNumber, + scaleValue: pdfViewer.currentScaleValue, + scrollMode: pdfViewer.scrollMode, + spreadMode: null, + annotationEditorMode: null + }; + if (pdfViewer.spreadMode !== SpreadMode.NONE && !(pdfViewer.pageViewsReady && pdfViewer.hasEqualPageSizes)) { + console.warn("Ignoring Spread modes when entering PresentationMode, " + "since the document may contain varying page sizes."); + this.#args.spreadMode = pdfViewer.spreadMode; + } + if (pdfViewer.annotationEditorMode !== AnnotationEditorType.DISABLE) { + this.#args.annotationEditorMode = pdfViewer.annotationEditorMode; + } + try { + await promise; + pdfViewer.focus(); + return true; + } catch { + this.#removeFullscreenChangeListeners(); + this.#notifyStateChange(PresentationModeState.NORMAL); + } + return false; + } + get active() { + return this.#state === PresentationModeState.CHANGING || this.#state === PresentationModeState.FULLSCREEN; + } + #mouseWheel(evt) { + if (!this.active) { + return; + } + evt.preventDefault(); + const delta = normalizeWheelEventDelta(evt); + const currentTime = Date.now(); + const storedTime = this.mouseScrollTimeStamp; + if (currentTime > storedTime && currentTime - storedTime < MOUSE_SCROLL_COOLDOWN_TIME) { + return; + } + if (this.mouseScrollDelta > 0 && delta < 0 || this.mouseScrollDelta < 0 && delta > 0) { + this.#resetMouseScrollState(); + } + this.mouseScrollDelta += delta; + if (Math.abs(this.mouseScrollDelta) >= PAGE_SWITCH_THRESHOLD) { + const totalDelta = this.mouseScrollDelta; + this.#resetMouseScrollState(); + const success = totalDelta > 0 ? this.pdfViewer.previousPage() : this.pdfViewer.nextPage(); + if (success) { + this.mouseScrollTimeStamp = currentTime; + } + } + } + #notifyStateChange(state) { + this.#state = state; + this.eventBus.dispatch("presentationmodechanged", { + source: this, + state + }); + } + #enter() { + this.#notifyStateChange(PresentationModeState.FULLSCREEN); + this.container.classList.add(ACTIVE_SELECTOR); + setTimeout(() => { + this.pdfViewer.scrollMode = ScrollMode.PAGE; + if (this.#args.spreadMode !== null) { + this.pdfViewer.spreadMode = SpreadMode.NONE; + } + this.pdfViewer.currentPageNumber = this.#args.pageNumber; + this.pdfViewer.currentScaleValue = "page-fit"; + if (this.#args.annotationEditorMode !== null) { + this.pdfViewer.annotationEditorMode = { + mode: AnnotationEditorType.NONE + }; + } + }, 0); + this.#addWindowListeners(); + this.#showControls(); + this.contextMenuOpen = false; + document.getSelection().empty(); + } + #exit() { + const pageNumber = this.pdfViewer.currentPageNumber; + this.container.classList.remove(ACTIVE_SELECTOR); + setTimeout(() => { + this.#removeFullscreenChangeListeners(); + this.#notifyStateChange(PresentationModeState.NORMAL); + this.pdfViewer.scrollMode = this.#args.scrollMode; + if (this.#args.spreadMode !== null) { + this.pdfViewer.spreadMode = this.#args.spreadMode; + } + this.pdfViewer.currentScaleValue = this.#args.scaleValue; + this.pdfViewer.currentPageNumber = pageNumber; + if (this.#args.annotationEditorMode !== null) { + this.pdfViewer.annotationEditorMode = { + mode: this.#args.annotationEditorMode + }; + } + this.#args = null; + }, 0); + this.#removeWindowListeners(); + this.#hideControls(); + this.#resetMouseScrollState(); + this.contextMenuOpen = false; + } + #mouseDown(evt) { + if (this.contextMenuOpen) { + this.contextMenuOpen = false; + evt.preventDefault(); + return; + } + if (evt.button !== 0) { + return; + } + if (evt.target.href && evt.target.parentNode?.hasAttribute("data-internal-link")) { + return; + } + evt.preventDefault(); + if (evt.shiftKey) { + this.pdfViewer.previousPage(); + } else { + this.pdfViewer.nextPage(); + } + } + #contextMenu() { + this.contextMenuOpen = true; + } + #showControls() { + if (this.controlsTimeout) { + clearTimeout(this.controlsTimeout); + } else { + this.container.classList.add(CONTROLS_SELECTOR); + } + this.controlsTimeout = setTimeout(() => { + this.container.classList.remove(CONTROLS_SELECTOR); + delete this.controlsTimeout; + }, DELAY_BEFORE_HIDING_CONTROLS); + } + #hideControls() { + if (!this.controlsTimeout) { + return; + } + clearTimeout(this.controlsTimeout); + this.container.classList.remove(CONTROLS_SELECTOR); + delete this.controlsTimeout; + } + #resetMouseScrollState() { + this.mouseScrollTimeStamp = 0; + this.mouseScrollDelta = 0; + } + #touchSwipe(evt) { + if (!this.active) { + return; + } + if (evt.touches.length > 1) { + this.touchSwipeState = null; + return; + } + switch (evt.type) { + case "touchstart": + this.touchSwipeState = { + startX: evt.touches[0].pageX, + startY: evt.touches[0].pageY, + endX: evt.touches[0].pageX, + endY: evt.touches[0].pageY + }; + break; + case "touchmove": + if (this.touchSwipeState === null) { + return; + } + this.touchSwipeState.endX = evt.touches[0].pageX; + this.touchSwipeState.endY = evt.touches[0].pageY; + evt.preventDefault(); + break; + case "touchend": + if (this.touchSwipeState === null) { + return; + } + let delta = 0; + const dx = this.touchSwipeState.endX - this.touchSwipeState.startX; + const dy = this.touchSwipeState.endY - this.touchSwipeState.startY; + const absAngle = Math.abs(Math.atan2(dy, dx)); + if (Math.abs(dx) > SWIPE_MIN_DISTANCE_THRESHOLD && (absAngle <= SWIPE_ANGLE_THRESHOLD || absAngle >= Math.PI - SWIPE_ANGLE_THRESHOLD)) { + delta = dx; + } else if (Math.abs(dy) > SWIPE_MIN_DISTANCE_THRESHOLD && Math.abs(absAngle - Math.PI / 2) <= SWIPE_ANGLE_THRESHOLD) { + delta = dy; + } + if (delta > 0) { + this.pdfViewer.previousPage(); + } else if (delta < 0) { + this.pdfViewer.nextPage(); + } + break; + } + } + #addWindowListeners() { + if (this.#windowAbortController) { + return; + } + this.#windowAbortController = new AbortController(); + const { + signal + } = this.#windowAbortController; + const touchSwipeBind = this.#touchSwipe.bind(this); + window.addEventListener("mousemove", this.#showControls.bind(this), { + signal + }); + window.addEventListener("mousedown", this.#mouseDown.bind(this), { + signal + }); + window.addEventListener("wheel", this.#mouseWheel.bind(this), { + passive: false, + signal + }); + window.addEventListener("keydown", this.#resetMouseScrollState.bind(this), { + signal + }); + window.addEventListener("contextmenu", this.#contextMenu.bind(this), { + signal + }); + window.addEventListener("touchstart", touchSwipeBind, { + signal + }); + window.addEventListener("touchmove", touchSwipeBind, { + signal + }); + window.addEventListener("touchend", touchSwipeBind, { + signal + }); + } + #removeWindowListeners() { + this.#windowAbortController?.abort(); + this.#windowAbortController = null; + } + #addFullscreenChangeListeners() { + if (this.#fullscreenChangeAbortController) { + return; + } + this.#fullscreenChangeAbortController = new AbortController(); + window.addEventListener("fullscreenchange", () => { + if (document.fullscreenElement) { + this.#enter(); + } else { + this.#exit(); + } + }, { + signal: this.#fullscreenChangeAbortController.signal + }); + } + #removeFullscreenChangeListeners() { + this.#fullscreenChangeAbortController?.abort(); + this.#fullscreenChangeAbortController = null; + } +} + +;// ./web/xfa_layer_builder.js + +class XfaLayerBuilder { + constructor({ + pdfPage, + annotationStorage = null, + linkService, + xfaHtml = null + }) { + this.pdfPage = pdfPage; + this.annotationStorage = annotationStorage; + this.linkService = linkService; + this.xfaHtml = xfaHtml; + this.div = null; + this._cancelled = false; + } + async render({ + viewport, + intent = "display" + }) { + if (intent === "print") { + const parameters = { + viewport: viewport.clone({ + dontFlip: true + }), + div: this.div, + xfaHtml: this.xfaHtml, + annotationStorage: this.annotationStorage, + linkService: this.linkService, + intent + }; + this.div = document.createElement("div"); + parameters.div = this.div; + return XfaLayer.render(parameters); + } + const xfaHtml = await this.pdfPage.getXfa(); + if (this._cancelled || !xfaHtml) { + return { + textDivs: [] + }; + } + const parameters = { + viewport: viewport.clone({ + dontFlip: true + }), + div: this.div, + xfaHtml, + annotationStorage: this.annotationStorage, + linkService: this.linkService, + intent + }; + if (this.div) { + return XfaLayer.update(parameters); + } + this.div = document.createElement("div"); + parameters.div = this.div; + return XfaLayer.render(parameters); + } + cancel() { + this._cancelled = true; + } + hide() { + if (!this.div) { + return; + } + this.div.hidden = true; + } +} + +;// ./web/print_utils.js + + + +function getXfaHtmlForPrinting(printContainer, pdfDocument) { + const xfaHtml = pdfDocument.allXfaHtml; + const linkService = new SimpleLinkService(); + const scale = Math.round(PixelsPerInch.PDF_TO_CSS_UNITS * 100) / 100; + for (const xfaPage of xfaHtml.children) { + const page = document.createElement("div"); + page.className = "xfaPrintedPage"; + printContainer.append(page); + const builder = new XfaLayerBuilder({ + pdfPage: null, + annotationStorage: pdfDocument.annotationStorage, + linkService, + xfaHtml: xfaPage + }); + const viewport = getXfaPageViewport(xfaPage, { + scale + }); + builder.render({ + viewport, + intent: "print" + }); + page.append(builder.div); + } +} + +;// ./web/pdf_print_service.js + + +let activeService = null; +let dialog = null; +let overlayManager = null; +let viewerApp = { + initialized: false +}; +function renderPage(activeServiceOnEntry, pdfDocument, pageNumber, size, printResolution, optionalContentConfigPromise, printAnnotationStoragePromise) { + const scratchCanvas = activeService.scratchCanvas; + const PRINT_UNITS = printResolution / PixelsPerInch.PDF; + scratchCanvas.width = Math.floor(size.width * PRINT_UNITS); + scratchCanvas.height = Math.floor(size.height * PRINT_UNITS); + const ctx = scratchCanvas.getContext("2d"); + ctx.save(); + ctx.fillStyle = "rgb(255, 255, 255)"; + ctx.fillRect(0, 0, scratchCanvas.width, scratchCanvas.height); + ctx.restore(); + return Promise.all([pdfDocument.getPage(pageNumber), printAnnotationStoragePromise]).then(function ([pdfPage, printAnnotationStorage]) { + const renderContext = { + canvas: scratchCanvas, + transform: [PRINT_UNITS, 0, 0, PRINT_UNITS, 0, 0], + viewport: pdfPage.getViewport({ + scale: 1, + rotation: size.rotation + }), + intent: "print", + annotationMode: AnnotationMode.ENABLE_STORAGE, + optionalContentConfigPromise, + printAnnotationStorage + }; + const renderTask = pdfPage.render(renderContext); + return renderTask.promise.catch(reason => { + if (!(reason instanceof RenderingCancelledException)) { + console.error(reason); + } + throw reason; + }); + }); +} +class PDFPrintService { + constructor({ + pdfDocument, + pagesOverview, + printContainer, + printResolution, + printAnnotationStoragePromise = null + }) { + this.pdfDocument = pdfDocument; + this.pagesOverview = pagesOverview; + this.printContainer = printContainer; + this._printResolution = printResolution || 150; + this._optionalContentConfigPromise = pdfDocument.getOptionalContentConfig({ + intent: "print" + }); + this._printAnnotationStoragePromise = printAnnotationStoragePromise || Promise.resolve(); + this.currentPage = -1; + this.scratchCanvas = document.createElement("canvas"); + } + layout() { + this.throwIfInactive(); + const body = document.querySelector("body"); + body.setAttribute("data-pdfjsprinting", true); + const { + width, + height + } = this.pagesOverview[0]; + const hasEqualPageSizes = this.pagesOverview.every(size => size.width === width && size.height === height); + if (!hasEqualPageSizes) { + console.warn("Not all pages have the same size. The printed result may be incorrect!"); + } + this.pageStyleSheet = document.createElement("style"); + this.pageStyleSheet.textContent = `@page { size: ${width}pt ${height}pt;}`; + body.append(this.pageStyleSheet); + } + destroy() { + if (activeService !== this) { + return; + } + this.printContainer.textContent = ""; + const body = document.querySelector("body"); + body.removeAttribute("data-pdfjsprinting"); + if (this.pageStyleSheet) { + this.pageStyleSheet.remove(); + this.pageStyleSheet = null; + } + this.scratchCanvas.width = this.scratchCanvas.height = 0; + this.scratchCanvas = null; + activeService = null; + ensureOverlay().then(function () { + overlayManager.closeIfActive(dialog); + }); + } + renderPages() { + if (this.pdfDocument.isPureXfa) { + getXfaHtmlForPrinting(this.printContainer, this.pdfDocument); + return Promise.resolve(); + } + const pageCount = this.pagesOverview.length; + const renderNextPage = (resolve, reject) => { + this.throwIfInactive(); + if (++this.currentPage >= pageCount) { + renderProgress(pageCount, pageCount); + resolve(); + return; + } + const index = this.currentPage; + renderProgress(index, pageCount); + renderPage(this, this.pdfDocument, index + 1, this.pagesOverview[index], this._printResolution, this._optionalContentConfigPromise, this._printAnnotationStoragePromise).then(this.useRenderedPage.bind(this)).then(function () { + renderNextPage(resolve, reject); + }, reject); + }; + return new Promise(renderNextPage); + } + useRenderedPage() { + this.throwIfInactive(); + const img = document.createElement("img"); + this.scratchCanvas.toBlob(blob => { + img.src = URL.createObjectURL(blob); + }); + const wrapper = document.createElement("div"); + wrapper.className = "printedPage"; + wrapper.append(img); + this.printContainer.append(wrapper); + const { + promise, + resolve, + reject + } = Promise.withResolvers(); + img.onload = resolve; + img.onerror = reject; + promise.catch(() => {}).then(() => { + URL.revokeObjectURL(img.src); + }); + return promise; + } + performPrint() { + this.throwIfInactive(); + return new Promise(resolve => { + setTimeout(() => { + if (!this.active) { + resolve(); + return; + } + print.call(window); + setTimeout(resolve, 20); + }, 0); + }); + } + get active() { + return this === activeService; + } + throwIfInactive() { + if (!this.active) { + throw new Error("This print request was cancelled or completed."); + } + } +} +const print = window.print; +window.print = function () { + if (activeService) { + console.warn("Ignored window.print() because of a pending print job."); + return; + } + ensureOverlay().then(function () { + if (activeService) { + overlayManager.open(dialog); + } + }); + try { + dispatchEvent("beforeprint"); + } finally { + if (!activeService) { + console.error("Expected print service to be initialized."); + ensureOverlay().then(function () { + overlayManager.closeIfActive(dialog); + }); + } else { + const activeServiceOnEntry = activeService; + activeService.renderPages().then(() => activeServiceOnEntry.performPrint()).catch(() => {}).then(() => { + if (activeServiceOnEntry.active) { + abort(); + } + }); + } + } +}; +function dispatchEvent(eventType) { + const event = new CustomEvent(eventType, { + bubbles: false, + cancelable: false, + detail: "custom" + }); + window.dispatchEvent(event); +} +function abort() { + if (activeService) { + activeService.destroy(); + dispatchEvent("afterprint"); + } +} +function renderProgress(index, total) { + dialog ||= document.getElementById("printServiceDialog"); + const progress = Math.round(100 * index / total); + const progressBar = dialog.querySelector("progress"); + const progressPerc = dialog.querySelector(".relative-progress"); + progressBar.value = progress; + progressPerc.setAttribute("data-l10n-args", JSON.stringify({ + progress + })); +} +window.addEventListener("keydown", function (event) { + if (event.keyCode === 80 && (event.ctrlKey || event.metaKey) && !event.altKey && (!event.shiftKey || window.chrome || window.opera)) { + window.print(); + event.preventDefault(); + event.stopImmediatePropagation(); + } +}, true); +if ("onbeforeprint" in window) { + const stopPropagationIfNeeded = function (event) { + if (event.detail !== "custom") { + event.stopImmediatePropagation(); + } + }; + window.addEventListener("beforeprint", stopPropagationIfNeeded); + window.addEventListener("afterprint", stopPropagationIfNeeded); +} +let overlayPromise; +function ensureOverlay() { + if (!overlayPromise) { + overlayManager = viewerApp.overlayManager; + if (!overlayManager) { + throw new Error("The overlay manager has not yet been initialized."); + } + dialog ||= document.getElementById("printServiceDialog"); + overlayPromise = overlayManager.register(dialog, true); + document.getElementById("printCancel").onclick = abort; + dialog.addEventListener("close", abort); + } + return overlayPromise; +} +class PDFPrintServiceFactory { + static initGlobals(app) { + viewerApp = app; + } + static get supportsPrinting() { + return shadow(this, "supportsPrinting", true); + } + static createPrintService(params) { + if (activeService) { + throw new Error("The print service is created and active."); + } + return activeService = new PDFPrintService(params); + } +} + +;// ./web/pdf_rendering_queue.js + + +const CLEANUP_TIMEOUT = 30000; +class PDFRenderingQueue { + constructor() { + this.pdfViewer = null; + this.pdfThumbnailViewer = null; + this.onIdle = null; + this.highestPriorityPage = null; + this.idleTimeout = null; + this.printing = false; + this.isThumbnailViewEnabled = false; + Object.defineProperty(this, "hasViewer", { + value: () => !!this.pdfViewer + }); + } + setViewer(pdfViewer) { + this.pdfViewer = pdfViewer; + } + setThumbnailViewer(pdfThumbnailViewer) { + this.pdfThumbnailViewer = pdfThumbnailViewer; + } + isHighestPriority(view) { + return this.highestPriorityPage === view.renderingId; + } + renderHighestPriority(currentlyVisiblePages) { + if (this.idleTimeout) { + clearTimeout(this.idleTimeout); + this.idleTimeout = null; + } + if (this.pdfViewer.forceRendering(currentlyVisiblePages)) { + return; + } + if (this.isThumbnailViewEnabled && this.pdfThumbnailViewer?.forceRendering()) { + return; + } + if (this.printing) { + return; + } + if (this.onIdle) { + this.idleTimeout = setTimeout(this.onIdle.bind(this), CLEANUP_TIMEOUT); + } + } + getHighestPriority(visible, views, scrolledDown, preRenderExtra = false, ignoreDetailViews = false) { + const visibleViews = visible.views, + numVisible = visibleViews.length; + if (numVisible === 0) { + return null; + } + for (let i = 0; i < numVisible; i++) { + const view = visibleViews[i].view; + if (!this.isViewFinished(view)) { + return view; + } + } + if (!ignoreDetailViews) { + for (let i = 0; i < numVisible; i++) { + const { + detailView + } = visibleViews[i].view; + if (detailView && !this.isViewFinished(detailView)) { + return detailView; + } + } + } + const firstId = visible.first.id, + lastId = visible.last.id; + if (lastId - firstId + 1 > numVisible) { + const visibleIds = visible.ids; + for (let i = 1, ii = lastId - firstId; i < ii; i++) { + const holeId = scrolledDown ? firstId + i : lastId - i; + if (visibleIds.has(holeId)) { + continue; + } + const holeView = views[holeId - 1]; + if (!this.isViewFinished(holeView)) { + return holeView; + } + } + } + let preRenderIndex = scrolledDown ? lastId : firstId - 2; + let preRenderView = views[preRenderIndex]; + if (preRenderView && !this.isViewFinished(preRenderView)) { + return preRenderView; + } + if (preRenderExtra) { + preRenderIndex += scrolledDown ? 1 : -1; + preRenderView = views[preRenderIndex]; + if (preRenderView && !this.isViewFinished(preRenderView)) { + return preRenderView; + } + } + return null; + } + isViewFinished(view) { + return view.renderingState === RenderingStates.FINISHED; + } + renderView(view) { + switch (view.renderingState) { + case RenderingStates.FINISHED: + return false; + case RenderingStates.PAUSED: + this.highestPriorityPage = view.renderingId; + view.resume(); + break; + case RenderingStates.RUNNING: + this.highestPriorityPage = view.renderingId; + break; + case RenderingStates.INITIAL: + this.highestPriorityPage = view.renderingId; + view.draw().finally(() => { + this.renderHighestPriority(); + }).catch(reason => { + if (reason instanceof RenderingCancelledException) { + return; + } + console.error("renderView:", reason); + }); + break; + } + return true; + } +} + +;// ./web/pdf_scripting_manager.js + + +class PDFScriptingManager { + #closeCapability = null; + #destroyCapability = null; + #docProperties = null; + #eventAbortController = null; + #eventBus = null; + #externalServices = null; + #pdfDocument = null; + #pdfViewer = null; + #ready = false; + #scripting = null; + #willPrintCapability = null; + constructor({ + eventBus, + externalServices = null, + docProperties = null + }) { + this.#eventBus = eventBus; + this.#externalServices = externalServices; + this.#docProperties = docProperties; + } + setViewer(pdfViewer) { + this.#pdfViewer = pdfViewer; + } + async setDocument(pdfDocument) { + if (this.#pdfDocument) { + await this.#destroyScripting(); + } + this.#pdfDocument = pdfDocument; + if (!pdfDocument) { + return; + } + const [objects, calculationOrder, docActions] = await Promise.all([pdfDocument.getFieldObjects(), pdfDocument.getCalculationOrderIds(), pdfDocument.getJSActions()]); + if (!objects && !docActions) { + await this.#destroyScripting(); + return; + } + if (pdfDocument !== this.#pdfDocument) { + return; + } + try { + this.#scripting = this.#initScripting(); + } catch (error) { + console.error("setDocument:", error); + await this.#destroyScripting(); + return; + } + const eventBus = this.#eventBus; + this.#eventAbortController = new AbortController(); + const { + signal + } = this.#eventAbortController; + eventBus._on("updatefromsandbox", event => { + if (event?.source === window) { + this.#updateFromSandbox(event.detail); + } + }, { + signal + }); + eventBus._on("dispatcheventinsandbox", event => { + this.#scripting?.dispatchEventInSandbox(event.detail); + }, { + signal + }); + eventBus._on("pagechanging", ({ + pageNumber, + previous + }) => { + if (pageNumber === previous) { + return; + } + this.#dispatchPageClose(previous); + this.#dispatchPageOpen(pageNumber); + }, { + signal + }); + eventBus._on("pagerendered", ({ + pageNumber + }) => { + if (!this._pageOpenPending.has(pageNumber)) { + return; + } + if (pageNumber !== this.#pdfViewer.currentPageNumber) { + return; + } + this.#dispatchPageOpen(pageNumber); + }, { + signal + }); + eventBus._on("pagesdestroy", async () => { + await this.#dispatchPageClose(this.#pdfViewer.currentPageNumber); + await this.#scripting?.dispatchEventInSandbox({ + id: "doc", + name: "WillClose" + }); + this.#closeCapability?.resolve(); + }, { + signal + }); + try { + const docProperties = await this.#docProperties(pdfDocument); + if (pdfDocument !== this.#pdfDocument) { + return; + } + await this.#scripting.createSandbox({ + objects, + calculationOrder, + appInfo: { + platform: navigator.platform, + language: navigator.language + }, + docInfo: { + ...docProperties, + actions: docActions + } + }); + eventBus.dispatch("sandboxcreated", { + source: this + }); + } catch (error) { + console.error("setDocument:", error); + await this.#destroyScripting(); + return; + } + await this.#scripting?.dispatchEventInSandbox({ + id: "doc", + name: "Open" + }); + await this.#dispatchPageOpen(this.#pdfViewer.currentPageNumber, true); + Promise.resolve().then(() => { + if (pdfDocument === this.#pdfDocument) { + this.#ready = true; + } + }); + } + async dispatchWillSave() { + return this.#scripting?.dispatchEventInSandbox({ + id: "doc", + name: "WillSave" + }); + } + async dispatchDidSave() { + return this.#scripting?.dispatchEventInSandbox({ + id: "doc", + name: "DidSave" + }); + } + async dispatchWillPrint() { + if (!this.#scripting) { + return; + } + await this.#willPrintCapability?.promise; + this.#willPrintCapability = Promise.withResolvers(); + try { + await this.#scripting.dispatchEventInSandbox({ + id: "doc", + name: "WillPrint" + }); + } catch (ex) { + this.#willPrintCapability.resolve(); + this.#willPrintCapability = null; + throw ex; + } + await this.#willPrintCapability.promise; + } + async dispatchDidPrint() { + return this.#scripting?.dispatchEventInSandbox({ + id: "doc", + name: "DidPrint" + }); + } + get destroyPromise() { + return this.#destroyCapability?.promise || null; + } + get ready() { + return this.#ready; + } + get _pageOpenPending() { + return shadow(this, "_pageOpenPending", new Set()); + } + get _visitedPages() { + return shadow(this, "_visitedPages", new Map()); + } + async #updateFromSandbox(detail) { + const pdfViewer = this.#pdfViewer; + const isInPresentationMode = pdfViewer.isInPresentationMode || pdfViewer.isChangingPresentationMode; + const { + id, + siblings, + command, + value + } = detail; + if (!id) { + switch (command) { + case "clear": + console.clear(); + break; + case "error": + console.error(value); + break; + case "layout": + if (!isInPresentationMode) { + const modes = apiPageLayoutToViewerModes(value); + pdfViewer.spreadMode = modes.spreadMode; + } + break; + case "page-num": + pdfViewer.currentPageNumber = value + 1; + break; + case "print": + await pdfViewer.pagesPromise; + this.#eventBus.dispatch("print", { + source: this + }); + break; + case "println": + console.log(value); + break; + case "zoom": + if (!isInPresentationMode) { + pdfViewer.currentScaleValue = value; + } + break; + case "SaveAs": + this.#eventBus.dispatch("download", { + source: this + }); + break; + case "FirstPage": + pdfViewer.currentPageNumber = 1; + break; + case "LastPage": + pdfViewer.currentPageNumber = pdfViewer.pagesCount; + break; + case "NextPage": + pdfViewer.nextPage(); + break; + case "PrevPage": + pdfViewer.previousPage(); + break; + case "ZoomViewIn": + if (!isInPresentationMode) { + pdfViewer.increaseScale(); + } + break; + case "ZoomViewOut": + if (!isInPresentationMode) { + pdfViewer.decreaseScale(); + } + break; + case "WillPrintFinished": + this.#willPrintCapability?.resolve(); + this.#willPrintCapability = null; + break; + } + return; + } + if (isInPresentationMode && detail.focus) { + return; + } + delete detail.id; + delete detail.siblings; + const ids = siblings ? [id, ...siblings] : [id]; + for (const elementId of ids) { + const element = document.querySelector(`[data-element-id="${elementId}"]`); + if (element) { + element.dispatchEvent(new CustomEvent("updatefromsandbox", { + detail + })); + } else { + this.#pdfDocument?.annotationStorage.setValue(elementId, detail); + } + } + } + async #dispatchPageOpen(pageNumber, initialize = false) { + const pdfDocument = this.#pdfDocument, + visitedPages = this._visitedPages; + if (initialize) { + this.#closeCapability = Promise.withResolvers(); + } + if (!this.#closeCapability) { + return; + } + const pageView = this.#pdfViewer.getPageView(pageNumber - 1); + if (pageView?.renderingState !== RenderingStates.FINISHED) { + this._pageOpenPending.add(pageNumber); + return; + } + this._pageOpenPending.delete(pageNumber); + const actionsPromise = (async () => { + const actions = await (!visitedPages.has(pageNumber) ? pageView.pdfPage?.getJSActions() : null); + if (pdfDocument !== this.#pdfDocument) { + return; + } + await this.#scripting?.dispatchEventInSandbox({ + id: "page", + name: "PageOpen", + pageNumber, + actions + }); + })(); + visitedPages.set(pageNumber, actionsPromise); + } + async #dispatchPageClose(pageNumber) { + const pdfDocument = this.#pdfDocument, + visitedPages = this._visitedPages; + if (!this.#closeCapability) { + return; + } + if (this._pageOpenPending.has(pageNumber)) { + return; + } + const actionsPromise = visitedPages.get(pageNumber); + if (!actionsPromise) { + return; + } + visitedPages.set(pageNumber, null); + await actionsPromise; + if (pdfDocument !== this.#pdfDocument) { + return; + } + await this.#scripting?.dispatchEventInSandbox({ + id: "page", + name: "PageClose", + pageNumber + }); + } + #initScripting() { + this.#destroyCapability = Promise.withResolvers(); + if (this.#scripting) { + throw new Error("#initScripting: Scripting already exists."); + } + return this.#externalServices.createScripting(); + } + async #destroyScripting() { + if (!this.#scripting) { + this.#pdfDocument = null; + this.#destroyCapability?.resolve(); + return; + } + if (this.#closeCapability) { + await Promise.race([this.#closeCapability.promise, new Promise(resolve => { + setTimeout(resolve, 1000); + })]).catch(() => {}); + this.#closeCapability = null; + } + this.#pdfDocument = null; + try { + await this.#scripting.destroySandbox(); + } catch {} + this.#willPrintCapability?.reject(new Error("Scripting destroyed.")); + this.#willPrintCapability = null; + this.#eventAbortController?.abort(); + this.#eventAbortController = null; + this._pageOpenPending.clear(); + this._visitedPages.clear(); + this.#scripting = null; + this.#ready = false; + this.#destroyCapability?.resolve(); + } +} + +;// ./web/pdf_sidebar.js + +const SIDEBAR_WIDTH_VAR = "--sidebar-width"; +const SIDEBAR_MIN_WIDTH = 200; +const SIDEBAR_RESIZING_CLASS = "sidebarResizing"; +const UI_NOTIFICATION_CLASS = "pdfSidebarNotification"; +class PDFSidebar { + #isRTL = false; + #mouseAC = null; + #outerContainerWidth = null; + #width = null; + constructor({ + elements, + eventBus, + l10n + }) { + this.isOpen = false; + this.active = SidebarView.THUMBS; + this.isInitialViewSet = false; + this.isInitialEventDispatched = false; + this.onToggled = null; + this.onUpdateThumbnails = null; + this.outerContainer = elements.outerContainer; + this.sidebarContainer = elements.sidebarContainer; + this.toggleButton = elements.toggleButton; + this.resizer = elements.resizer; + this.thumbnailButton = elements.thumbnailButton; + this.outlineButton = elements.outlineButton; + this.attachmentsButton = elements.attachmentsButton; + this.layersButton = elements.layersButton; + this.thumbnailView = elements.thumbnailView; + this.outlineView = elements.outlineView; + this.attachmentsView = elements.attachmentsView; + this.layersView = elements.layersView; + this._currentOutlineItemButton = elements.currentOutlineItemButton; + this.eventBus = eventBus; + this.#isRTL = l10n.getDirection() === "rtl"; + this.#addEventListeners(); + } + reset() { + this.isInitialViewSet = false; + this.isInitialEventDispatched = false; + this.#hideUINotification(true); + this.switchView(SidebarView.THUMBS); + this.outlineButton.disabled = false; + this.attachmentsButton.disabled = false; + this.layersButton.disabled = false; + this._currentOutlineItemButton.disabled = true; + } + get visibleView() { + return this.isOpen ? this.active : SidebarView.NONE; + } + setInitialView(view = SidebarView.NONE) { + if (this.isInitialViewSet) { + return; + } + this.isInitialViewSet = true; + if (view === SidebarView.NONE || view === SidebarView.UNKNOWN) { + this.#dispatchEvent(); + return; + } + this.switchView(view, true); + if (!this.isInitialEventDispatched) { + this.#dispatchEvent(); + } + } + switchView(view, forceOpen = false) { + const isViewChanged = view !== this.active; + let forceRendering = false; + switch (view) { + case SidebarView.NONE: + if (this.isOpen) { + this.close(); + } + return; + case SidebarView.THUMBS: + if (this.isOpen && isViewChanged) { + forceRendering = true; + } + break; + case SidebarView.OUTLINE: + if (this.outlineButton.disabled) { + return; + } + break; + case SidebarView.ATTACHMENTS: + if (this.attachmentsButton.disabled) { + return; + } + break; + case SidebarView.LAYERS: + if (this.layersButton.disabled) { + return; + } + break; + default: + console.error(`PDFSidebar.switchView: "${view}" is not a valid view.`); + return; + } + this.active = view; + toggleCheckedBtn(this.thumbnailButton, view === SidebarView.THUMBS, this.thumbnailView); + toggleCheckedBtn(this.outlineButton, view === SidebarView.OUTLINE, this.outlineView); + toggleCheckedBtn(this.attachmentsButton, view === SidebarView.ATTACHMENTS, this.attachmentsView); + toggleCheckedBtn(this.layersButton, view === SidebarView.LAYERS, this.layersView); + if (forceOpen && !this.isOpen) { + this.open(); + return; + } + if (forceRendering) { + this.onUpdateThumbnails(); + this.onToggled(); + } + if (isViewChanged) { + this.#dispatchEvent(); + } + } + open() { + if (this.isOpen) { + return; + } + this.isOpen = true; + toggleExpandedBtn(this.toggleButton, true); + this.outerContainer.classList.add("sidebarMoving", "sidebarOpen"); + if (this.active === SidebarView.THUMBS) { + this.onUpdateThumbnails(); + } + this.onToggled(); + this.#dispatchEvent(); + this.#hideUINotification(); + } + close(evt = null) { + if (!this.isOpen) { + return; + } + this.isOpen = false; + toggleExpandedBtn(this.toggleButton, false); + this.outerContainer.classList.add("sidebarMoving"); + this.outerContainer.classList.remove("sidebarOpen"); + this.onToggled(); + this.#dispatchEvent(); + if (evt?.detail > 0) { + this.toggleButton.blur(); + } + } + toggle(evt = null) { + if (this.isOpen) { + this.close(evt); + } else { + this.open(); + } + } + #dispatchEvent() { + if (this.isInitialViewSet) { + this.isInitialEventDispatched ||= true; + } + this.eventBus.dispatch("sidebarviewchanged", { + source: this, + view: this.visibleView + }); + } + #showUINotification() { + this.toggleButton.setAttribute("data-l10n-id", "pdfjs-toggle-sidebar-notification-button"); + if (!this.isOpen) { + this.toggleButton.classList.add(UI_NOTIFICATION_CLASS); + } + } + #hideUINotification(reset = false) { + if (this.isOpen || reset) { + this.toggleButton.classList.remove(UI_NOTIFICATION_CLASS); + } + if (reset) { + this.toggleButton.setAttribute("data-l10n-id", "pdfjs-toggle-sidebar-button"); + } + } + #addEventListeners() { + const { + eventBus, + outerContainer + } = this; + this.sidebarContainer.addEventListener("transitionend", evt => { + if (evt.target === this.sidebarContainer) { + outerContainer.classList.remove("sidebarMoving"); + eventBus.dispatch("resize", { + source: this + }); + } + }); + this.toggleButton.addEventListener("click", evt => { + this.toggle(evt); + }); + this.thumbnailButton.addEventListener("click", () => { + this.switchView(SidebarView.THUMBS); + }); + this.outlineButton.addEventListener("click", () => { + this.switchView(SidebarView.OUTLINE); + }); + this.outlineButton.addEventListener("dblclick", () => { + eventBus.dispatch("toggleoutlinetree", { + source: this + }); + }); + this.attachmentsButton.addEventListener("click", () => { + this.switchView(SidebarView.ATTACHMENTS); + }); + this.layersButton.addEventListener("click", () => { + this.switchView(SidebarView.LAYERS); + }); + this.layersButton.addEventListener("dblclick", () => { + eventBus.dispatch("resetlayers", { + source: this + }); + }); + this._currentOutlineItemButton.addEventListener("click", () => { + eventBus.dispatch("currentoutlineitem", { + source: this + }); + }); + const onTreeLoaded = (count, button, view) => { + button.disabled = !count; + if (count) { + this.#showUINotification(); + } else if (this.active === view) { + this.switchView(SidebarView.THUMBS); + } + }; + eventBus._on("outlineloaded", evt => { + onTreeLoaded(evt.outlineCount, this.outlineButton, SidebarView.OUTLINE); + evt.currentOutlineItemPromise.then(enabled => { + if (!this.isInitialViewSet) { + return; + } + this._currentOutlineItemButton.disabled = !enabled; + }); + }); + eventBus._on("attachmentsloaded", evt => { + onTreeLoaded(evt.attachmentsCount, this.attachmentsButton, SidebarView.ATTACHMENTS); + }); + eventBus._on("layersloaded", evt => { + onTreeLoaded(evt.layersCount, this.layersButton, SidebarView.LAYERS); + }); + eventBus._on("presentationmodechanged", evt => { + if (evt.state === PresentationModeState.NORMAL && this.visibleView === SidebarView.THUMBS) { + this.onUpdateThumbnails(); + } + }); + this.resizer.addEventListener("mousedown", evt => { + if (evt.button !== 0) { + return; + } + outerContainer.classList.add(SIDEBAR_RESIZING_CLASS); + this.#mouseAC = new AbortController(); + const opts = { + signal: this.#mouseAC.signal + }; + window.addEventListener("mousemove", this.#mouseMove.bind(this), opts); + window.addEventListener("mouseup", this.#mouseUp.bind(this), opts); + window.addEventListener("blur", this.#mouseUp.bind(this), opts); + }); + eventBus._on("resize", evt => { + if (evt.source !== window) { + return; + } + this.#outerContainerWidth = null; + if (!this.#width) { + return; + } + if (!this.isOpen) { + this.#updateWidth(this.#width); + return; + } + outerContainer.classList.add(SIDEBAR_RESIZING_CLASS); + const updated = this.#updateWidth(this.#width); + Promise.resolve().then(() => { + outerContainer.classList.remove(SIDEBAR_RESIZING_CLASS); + if (updated) { + eventBus.dispatch("resize", { + source: this + }); + } + }); + }); + } + get outerContainerWidth() { + return this.#outerContainerWidth ||= this.outerContainer.clientWidth; + } + #updateWidth(width = 0) { + const maxWidth = Math.floor(this.outerContainerWidth / 2); + if (width > maxWidth) { + width = maxWidth; + } + if (width < SIDEBAR_MIN_WIDTH) { + width = SIDEBAR_MIN_WIDTH; + } + if (width === this.#width) { + return false; + } + this.#width = width; + docStyle.setProperty(SIDEBAR_WIDTH_VAR, `${width}px`); + return true; + } + #mouseMove(evt) { + let width = evt.clientX; + if (this.#isRTL) { + width = this.outerContainerWidth - width; + } + this.#updateWidth(width); + } + #mouseUp(evt) { + this.outerContainer.classList.remove(SIDEBAR_RESIZING_CLASS); + this.eventBus.dispatch("resize", { + source: this + }); + this.#mouseAC?.abort(); + this.#mouseAC = null; + } +} + +;// ./web/pdf_text_extractor.js +class PdfTextExtractor { + #pdfViewer; + #externalServices; + #textPromise; + #pendingRequests = new Set(); + constructor(externalServices) { + this.#externalServices = externalServices; + window.addEventListener("requestTextContent", ({ + detail + }) => { + this.extractTextContent(detail.requestId); + }); + } + setViewer(pdfViewer) { + this.#pdfViewer = pdfViewer; + if (this.#pdfViewer && this.#pendingRequests.size) { + for (const pendingRequest of this.#pendingRequests) { + this.extractTextContent(pendingRequest); + } + this.#pendingRequests.clear(); + } + } + async extractTextContent(requestId) { + if (!this.#pdfViewer) { + this.#pendingRequests.add(requestId); + return; + } + if (!this.#textPromise) { + const textPromise = this.#textPromise = this.#pdfViewer.getAllText(); + textPromise.then(() => { + setTimeout(() => { + if (this.#textPromise === textPromise) { + this.#textPromise = null; + } + }, 5000); + }); + } + this.#externalServices.reportText({ + text: await this.#textPromise, + requestId + }); + } +} + +;// ./web/pdf_thumbnail_view.js + + + +const DRAW_UPSCALE_FACTOR = 2; +const MAX_NUM_SCALING_STEPS = 3; +const THUMBNAIL_WIDTH = 98; +function zeroCanvas(c) { + c.width = 0; + c.height = 0; +} +class TempImageFactory { + static #tempCanvas = null; + static getCanvas(width, height) { + const tempCanvas = this.#tempCanvas ||= document.createElement("canvas"); + tempCanvas.width = width; + tempCanvas.height = height; + const ctx = tempCanvas.getContext("2d", { + alpha: false + }); + ctx.save(); + ctx.fillStyle = "rgb(255, 255, 255)"; + ctx.fillRect(0, 0, width, height); + ctx.restore(); + return [tempCanvas, tempCanvas.getContext("2d")]; + } + static destroyCanvas() { + if (this.#tempCanvas) { + zeroCanvas(this.#tempCanvas); + } + this.#tempCanvas = null; + } +} +class PDFThumbnailView { + constructor({ + container, + eventBus, + id, + defaultViewport, + optionalContentConfigPromise, + linkService, + renderingQueue, + maxCanvasPixels, + maxCanvasDim, + pageColors + }) { + this.id = id; + this.renderingId = "thumbnail" + id; + this.pageLabel = null; + this.pdfPage = null; + this.rotation = 0; + this.viewport = defaultViewport; + this.pdfPageRotate = defaultViewport.rotation; + this._optionalContentConfigPromise = optionalContentConfigPromise || null; + this.maxCanvasPixels = maxCanvasPixels ?? AppOptions.get("maxCanvasPixels"); + this.maxCanvasDim = maxCanvasDim || AppOptions.get("maxCanvasDim"); + this.pageColors = pageColors || null; + this.eventBus = eventBus; + this.linkService = linkService; + this.renderingQueue = renderingQueue; + this.renderTask = null; + this.renderingState = RenderingStates.INITIAL; + this.resume = null; + const anchor = document.createElement("a"); + anchor.href = linkService.getAnchorUrl("#page=" + id); + anchor.setAttribute("data-l10n-id", "pdfjs-thumb-page-title"); + anchor.setAttribute("data-l10n-args", this.#pageL10nArgs); + anchor.onclick = function () { + linkService.goToPage(id); + return false; + }; + this.anchor = anchor; + const div = document.createElement("div"); + div.className = "thumbnail"; + div.setAttribute("data-page-number", this.id); + this.div = div; + this.#updateDims(); + const img = document.createElement("div"); + img.className = "thumbnailImage"; + this._placeholderImg = img; + div.append(img); + anchor.append(div); + container.append(anchor); + } + #updateDims() { + const { + width, + height + } = this.viewport; + const ratio = width / height; + this.canvasWidth = THUMBNAIL_WIDTH; + this.canvasHeight = this.canvasWidth / ratio | 0; + this.scale = this.canvasWidth / width; + const { + style + } = this.div; + style.setProperty("--thumbnail-width", `${this.canvasWidth}px`); + style.setProperty("--thumbnail-height", `${this.canvasHeight}px`); + } + setPdfPage(pdfPage) { + this.pdfPage = pdfPage; + this.pdfPageRotate = pdfPage.rotate; + const totalRotation = (this.rotation + this.pdfPageRotate) % 360; + this.viewport = pdfPage.getViewport({ + scale: 1, + rotation: totalRotation + }); + this.reset(); + } + reset() { + this.cancelRendering(); + this.renderingState = RenderingStates.INITIAL; + this.div.removeAttribute("data-loaded"); + this.image?.replaceWith(this._placeholderImg); + this.#updateDims(); + if (this.image) { + this.image.removeAttribute("src"); + delete this.image; + } + } + update({ + rotation = null + }) { + if (typeof rotation === "number") { + this.rotation = rotation; + } + const totalRotation = (this.rotation + this.pdfPageRotate) % 360; + this.viewport = this.viewport.clone({ + scale: 1, + rotation: totalRotation + }); + this.reset(); + } + cancelRendering() { + if (this.renderTask) { + this.renderTask.cancel(); + this.renderTask = null; + } + this.resume = null; + } + #getPageDrawContext(upscaleFactor = 1) { + const canvas = document.createElement("canvas"); + const outputScale = new OutputScale(); + const width = upscaleFactor * this.canvasWidth, + height = upscaleFactor * this.canvasHeight; + outputScale.limitCanvas(width, height, this.maxCanvasPixels, this.maxCanvasDim); + canvas.width = width * outputScale.sx | 0; + canvas.height = height * outputScale.sy | 0; + const transform = outputScale.scaled ? [outputScale.sx, 0, 0, outputScale.sy, 0, 0] : null; + return { + canvas, + transform + }; + } + #convertCanvasToImage(canvas) { + if (this.renderingState !== RenderingStates.FINISHED) { + throw new Error("#convertCanvasToImage: Rendering has not finished."); + } + const reducedCanvas = this.#reduceImage(canvas); + const image = document.createElement("img"); + image.className = "thumbnailImage"; + image.setAttribute("data-l10n-id", "pdfjs-thumb-page-canvas"); + image.setAttribute("data-l10n-args", this.#pageL10nArgs); + image.src = reducedCanvas.toDataURL(); + this.image = image; + this.div.setAttribute("data-loaded", true); + this._placeholderImg.replaceWith(image); + zeroCanvas(reducedCanvas); + } + async draw() { + if (this.renderingState !== RenderingStates.INITIAL) { + console.error("Must be in new state before drawing"); + return; + } + const { + pageColors, + pdfPage + } = this; + if (!pdfPage) { + this.renderingState = RenderingStates.FINISHED; + throw new Error("pdfPage is not loaded"); + } + this.renderingState = RenderingStates.RUNNING; + const { + canvas, + transform + } = this.#getPageDrawContext(DRAW_UPSCALE_FACTOR); + const drawViewport = this.viewport.clone({ + scale: DRAW_UPSCALE_FACTOR * this.scale + }); + const renderContinueCallback = cont => { + if (!this.renderingQueue.isHighestPriority(this)) { + this.renderingState = RenderingStates.PAUSED; + this.resume = () => { + this.renderingState = RenderingStates.RUNNING; + cont(); + }; + return; + } + cont(); + }; + const renderContext = { + canvas, + transform, + viewport: drawViewport, + optionalContentConfigPromise: this._optionalContentConfigPromise, + pageColors + }; + const renderTask = this.renderTask = pdfPage.render(renderContext); + renderTask.onContinue = renderContinueCallback; + let error = null; + try { + await renderTask.promise; + } catch (e) { + if (e instanceof RenderingCancelledException) { + zeroCanvas(canvas); + return; + } + error = e; + } finally { + if (renderTask === this.renderTask) { + this.renderTask = null; + } + } + this.renderingState = RenderingStates.FINISHED; + this.#convertCanvasToImage(canvas); + zeroCanvas(canvas); + this.eventBus.dispatch("thumbnailrendered", { + source: this, + pageNumber: this.id, + pdfPage + }); + if (error) { + throw error; + } + } + setImage(pageView) { + if (this.renderingState !== RenderingStates.INITIAL) { + return; + } + const { + thumbnailCanvas: canvas, + pdfPage, + scale + } = pageView; + if (!canvas) { + return; + } + if (!this.pdfPage) { + this.setPdfPage(pdfPage); + } + if (scale < this.scale) { + return; + } + this.renderingState = RenderingStates.FINISHED; + this.#convertCanvasToImage(canvas); + } + #getReducedImageDims(canvas) { + const width = canvas.width << MAX_NUM_SCALING_STEPS, + height = canvas.height << MAX_NUM_SCALING_STEPS; + const outputScale = new OutputScale(); + outputScale.sx = outputScale.sy = 1; + outputScale.limitCanvas(width, height, this.maxCanvasPixels, this.maxCanvasDim); + return [width * outputScale.sx | 0, height * outputScale.sy | 0]; + } + #reduceImage(img) { + const { + canvas + } = this.#getPageDrawContext(1); + const ctx = canvas.getContext("2d", { + alpha: false, + willReadFrequently: false + }); + if (img.width <= 2 * canvas.width) { + ctx.drawImage(img, 0, 0, img.width, img.height, 0, 0, canvas.width, canvas.height); + return canvas; + } + let [reducedWidth, reducedHeight] = this.#getReducedImageDims(canvas); + const [reducedImage, reducedImageCtx] = TempImageFactory.getCanvas(reducedWidth, reducedHeight); + while (reducedWidth > img.width || reducedHeight > img.height) { + reducedWidth >>= 1; + reducedHeight >>= 1; + } + reducedImageCtx.drawImage(img, 0, 0, img.width, img.height, 0, 0, reducedWidth, reducedHeight); + while (reducedWidth > 2 * canvas.width) { + reducedImageCtx.drawImage(reducedImage, 0, 0, reducedWidth, reducedHeight, 0, 0, reducedWidth >> 1, reducedHeight >> 1); + reducedWidth >>= 1; + reducedHeight >>= 1; + } + ctx.drawImage(reducedImage, 0, 0, reducedWidth, reducedHeight, 0, 0, canvas.width, canvas.height); + return canvas; + } + get #pageL10nArgs() { + return JSON.stringify({ + page: this.pageLabel ?? this.id + }); + } + setPageLabel(label) { + this.pageLabel = typeof label === "string" ? label : null; + this.anchor.setAttribute("data-l10n-args", this.#pageL10nArgs); + if (this.renderingState !== RenderingStates.FINISHED) { + return; + } + this.image?.setAttribute("data-l10n-args", this.#pageL10nArgs); + } +} + +;// ./web/pdf_thumbnail_viewer.js + + +const THUMBNAIL_SCROLL_MARGIN = -19; +const THUMBNAIL_SELECTED_CLASS = "selected"; +class PDFThumbnailViewer { + constructor({ + container, + eventBus, + linkService, + renderingQueue, + maxCanvasPixels, + maxCanvasDim, + pageColors, + abortSignal, + enableHWA + }) { + this.container = container; + this.eventBus = eventBus; + this.linkService = linkService; + this.renderingQueue = renderingQueue; + this.maxCanvasPixels = maxCanvasPixels; + this.maxCanvasDim = maxCanvasDim; + this.pageColors = pageColors || null; + this.enableHWA = enableHWA || false; + this.scroll = watchScroll(this.container, this.#scrollUpdated.bind(this), abortSignal); + this.#resetView(); + } + #scrollUpdated() { + this.renderingQueue.renderHighestPriority(); + } + getThumbnail(index) { + return this._thumbnails[index]; + } + #getVisibleThumbs() { + return getVisibleElements({ + scrollEl: this.container, + views: this._thumbnails + }); + } + scrollThumbnailIntoView(pageNumber) { + if (!this.pdfDocument) { + return; + } + const thumbnailView = this._thumbnails[pageNumber - 1]; + if (!thumbnailView) { + console.error('scrollThumbnailIntoView: Invalid "pageNumber" parameter.'); + return; + } + if (pageNumber !== this._currentPageNumber) { + const prevThumbnailView = this._thumbnails[this._currentPageNumber - 1]; + prevThumbnailView.div.classList.remove(THUMBNAIL_SELECTED_CLASS); + thumbnailView.div.classList.add(THUMBNAIL_SELECTED_CLASS); + } + const { + first, + last, + views + } = this.#getVisibleThumbs(); + if (views.length > 0) { + let shouldScroll = false; + if (pageNumber <= first.id || pageNumber >= last.id) { + shouldScroll = true; + } else { + for (const { + id, + percent + } of views) { + if (id !== pageNumber) { + continue; + } + shouldScroll = percent < 100; + break; + } + } + if (shouldScroll) { + scrollIntoView(thumbnailView.div, { + top: THUMBNAIL_SCROLL_MARGIN + }); + } + } + this._currentPageNumber = pageNumber; + } + get pagesRotation() { + return this._pagesRotation; + } + set pagesRotation(rotation) { + if (!isValidRotation(rotation)) { + throw new Error("Invalid thumbnails rotation angle."); + } + if (!this.pdfDocument) { + return; + } + if (this._pagesRotation === rotation) { + return; + } + this._pagesRotation = rotation; + const updateArgs = { + rotation + }; + for (const thumbnail of this._thumbnails) { + thumbnail.update(updateArgs); + } + } + cleanup() { + for (const thumbnail of this._thumbnails) { + if (thumbnail.renderingState !== RenderingStates.FINISHED) { + thumbnail.reset(); + } + } + TempImageFactory.destroyCanvas(); + } + #resetView() { + this._thumbnails = []; + this._currentPageNumber = 1; + this._pageLabels = null; + this._pagesRotation = 0; + this.container.textContent = ""; + } + setDocument(pdfDocument) { + if (this.pdfDocument) { + this.#cancelRendering(); + this.#resetView(); + } + this.pdfDocument = pdfDocument; + if (!pdfDocument) { + return; + } + const firstPagePromise = pdfDocument.getPage(1); + const optionalContentConfigPromise = pdfDocument.getOptionalContentConfig({ + intent: "display" + }); + firstPagePromise.then(firstPdfPage => { + const pagesCount = pdfDocument.numPages; + const viewport = firstPdfPage.getViewport({ + scale: 1 + }); + for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) { + const thumbnail = new PDFThumbnailView({ + container: this.container, + eventBus: this.eventBus, + id: pageNum, + defaultViewport: viewport.clone(), + optionalContentConfigPromise, + linkService: this.linkService, + renderingQueue: this.renderingQueue, + maxCanvasPixels: this.maxCanvasPixels, + maxCanvasDim: this.maxCanvasDim, + pageColors: this.pageColors, + enableHWA: this.enableHWA + }); + this._thumbnails.push(thumbnail); + } + this._thumbnails[0]?.setPdfPage(firstPdfPage); + const thumbnailView = this._thumbnails[this._currentPageNumber - 1]; + thumbnailView.div.classList.add(THUMBNAIL_SELECTED_CLASS); + }).catch(reason => { + console.error("Unable to initialize thumbnail viewer", reason); + }); + } + #cancelRendering() { + for (const thumbnail of this._thumbnails) { + thumbnail.cancelRendering(); + } + } + setPageLabels(labels) { + if (!this.pdfDocument) { + return; + } + if (!labels) { + this._pageLabels = null; + } else if (!(Array.isArray(labels) && this.pdfDocument.numPages === labels.length)) { + this._pageLabels = null; + console.error("PDFThumbnailViewer_setPageLabels: Invalid page labels."); + } else { + this._pageLabels = labels; + } + for (let i = 0, ii = this._thumbnails.length; i < ii; i++) { + this._thumbnails[i].setPageLabel(this._pageLabels?.[i] ?? null); + } + } + async #ensurePdfPageLoaded(thumbView) { + if (thumbView.pdfPage) { + return thumbView.pdfPage; + } + try { + const pdfPage = await this.pdfDocument.getPage(thumbView.id); + if (!thumbView.pdfPage) { + thumbView.setPdfPage(pdfPage); + } + return pdfPage; + } catch (reason) { + console.error("Unable to get page for thumb view", reason); + return null; + } + } + #getScrollAhead(visible) { + if (visible.first?.id === 1) { + return true; + } else if (visible.last?.id === this._thumbnails.length) { + return false; + } + return this.scroll.down; + } + forceRendering() { + const visibleThumbs = this.#getVisibleThumbs(); + const scrollAhead = this.#getScrollAhead(visibleThumbs); + const thumbView = this.renderingQueue.getHighestPriority(visibleThumbs, this._thumbnails, scrollAhead, false, true); + if (thumbView) { + this.#ensurePdfPageLoaded(thumbView).then(() => { + this.renderingQueue.renderView(thumbView); + }); + return true; + } + return false; + } +} + +;// ./web/annotation_editor_layer_builder.js + + +class AnnotationEditorLayerBuilder { + #annotationLayer = null; + #drawLayer = null; + #onAppend = null; + #structTreeLayer = null; + #textLayer = null; + #uiManager; + constructor(options) { + this.pdfPage = options.pdfPage; + this.accessibilityManager = options.accessibilityManager; + this.l10n = options.l10n; + this.l10n ||= new genericl10n_GenericL10n(); + this.annotationEditorLayer = null; + this.div = null; + this._cancelled = false; + this.#uiManager = options.uiManager; + this.#annotationLayer = options.annotationLayer || null; + this.#textLayer = options.textLayer || null; + this.#drawLayer = options.drawLayer || null; + this.#onAppend = options.onAppend || null; + this.#structTreeLayer = options.structTreeLayer || null; + } + async render({ + viewport, + intent = "display" + }) { + if (intent !== "display") { + return; + } + if (this._cancelled) { + return; + } + const clonedViewport = viewport.clone({ + dontFlip: true + }); + if (this.div) { + this.annotationEditorLayer.update({ + viewport: clonedViewport + }); + this.show(); + return; + } + const div = this.div = document.createElement("div"); + div.className = "annotationEditorLayer"; + div.hidden = true; + div.dir = this.#uiManager.direction; + this.#onAppend?.(div); + this.annotationEditorLayer = new AnnotationEditorLayer({ + uiManager: this.#uiManager, + div, + structTreeLayer: this.#structTreeLayer, + accessibilityManager: this.accessibilityManager, + pageIndex: this.pdfPage.pageNumber - 1, + l10n: this.l10n, + viewport: clonedViewport, + annotationLayer: this.#annotationLayer, + textLayer: this.#textLayer, + drawLayer: this.#drawLayer + }); + const parameters = { + viewport: clonedViewport, + div, + annotations: null, + intent + }; + this.annotationEditorLayer.render(parameters); + this.show(); + } + cancel() { + this._cancelled = true; + if (!this.div) { + return; + } + this.annotationEditorLayer.destroy(); + } + hide() { + if (!this.div) { + return; + } + this.annotationEditorLayer.pause(true); + this.div.hidden = true; + } + show() { + if (!this.div || this.annotationEditorLayer.isInvisible) { + return; + } + this.div.hidden = false; + this.annotationEditorLayer.pause(false); + } +} + +;// ./web/annotation_layer_builder.js + + +class AnnotationLayerBuilder { + #annotations = null; + #commentManager = null; + #externalHide = false; + #onAppend = null; + #eventAbortController = null; + #linksInjected = false; + constructor({ + pdfPage, + linkService, + downloadManager, + annotationStorage = null, + imageResourcesPath = "", + renderForms = true, + enableComment = false, + commentManager = null, + enableScripting = false, + hasJSActionsPromise = null, + fieldObjectsPromise = null, + annotationCanvasMap = null, + accessibilityManager = null, + annotationEditorUIManager = null, + onAppend = null + }) { + this.pdfPage = pdfPage; + this.linkService = linkService; + this.downloadManager = downloadManager; + this.imageResourcesPath = imageResourcesPath; + this.renderForms = renderForms; + this.annotationStorage = annotationStorage; + this.enableComment = enableComment; + this.#commentManager = commentManager; + this.enableScripting = enableScripting; + this._hasJSActionsPromise = hasJSActionsPromise || Promise.resolve(false); + this._fieldObjectsPromise = fieldObjectsPromise || Promise.resolve(null); + this._annotationCanvasMap = annotationCanvasMap; + this._accessibilityManager = accessibilityManager; + this._annotationEditorUIManager = annotationEditorUIManager; + this.#onAppend = onAppend; + this.annotationLayer = null; + this.div = null; + this._cancelled = false; + this._eventBus = linkService.eventBus; + } + async render({ + viewport, + intent = "display", + structTreeLayer = null + }) { + if (this.div) { + if (this._cancelled || !this.annotationLayer) { + return; + } + this.annotationLayer.update({ + viewport: viewport.clone({ + dontFlip: true + }) + }); + return; + } + const [annotations, hasJSActions, fieldObjects] = await Promise.all([this.pdfPage.getAnnotations({ + intent + }), this._hasJSActionsPromise, this._fieldObjectsPromise]); + if (this._cancelled) { + return; + } + const div = this.div = document.createElement("div"); + div.className = "annotationLayer"; + this.#onAppend?.(div); + this.#initAnnotationLayer(viewport, structTreeLayer); + if (annotations.length === 0) { + this.#annotations = annotations; + setLayerDimensions(this.div, viewport); + return; + } + await this.annotationLayer.render({ + annotations, + imageResourcesPath: this.imageResourcesPath, + renderForms: this.renderForms, + downloadManager: this.downloadManager, + enableComment: this.enableComment, + enableScripting: this.enableScripting, + hasJSActions, + fieldObjects + }); + this.#annotations = annotations; + if (this.linkService.isInPresentationMode) { + this.#updatePresentationModeState(PresentationModeState.FULLSCREEN); + } + if (!this.#eventAbortController) { + this.#eventAbortController = new AbortController(); + this._eventBus?._on("presentationmodechanged", evt => { + this.#updatePresentationModeState(evt.state); + }, { + signal: this.#eventAbortController.signal + }); + } + } + #initAnnotationLayer(viewport, structTreeLayer) { + this.annotationLayer = new AnnotationLayer({ + div: this.div, + accessibilityManager: this._accessibilityManager, + annotationCanvasMap: this._annotationCanvasMap, + annotationEditorUIManager: this._annotationEditorUIManager, + annotationStorage: this.annotationStorage, + page: this.pdfPage, + viewport: viewport.clone({ + dontFlip: true + }), + structTreeLayer, + commentManager: this.#commentManager, + linkService: this.linkService + }); + } + cancel() { + this._cancelled = true; + this.#eventAbortController?.abort(); + this.#eventAbortController = null; + } + hide(internal = false) { + this.#externalHide = !internal; + if (!this.div) { + return; + } + this.div.hidden = true; + } + hasEditableAnnotations() { + return !!this.annotationLayer?.hasEditableAnnotations(); + } + async injectLinkAnnotations(inferredLinks) { + if (this.#annotations === null) { + throw new Error("`render` method must be called before `injectLinkAnnotations`."); + } + if (this._cancelled || this.#linksInjected) { + return; + } + this.#linksInjected = true; + const newLinks = this.#annotations.length ? this.#checkInferredLinks(inferredLinks) : inferredLinks; + if (!newLinks.length) { + return; + } + await this.annotationLayer.addLinkAnnotations(newLinks); + if (!this.#externalHide) { + this.div.hidden = false; + } + } + #updatePresentationModeState(state) { + if (!this.div) { + return; + } + let disableFormElements = false; + switch (state) { + case PresentationModeState.FULLSCREEN: + disableFormElements = true; + break; + case PresentationModeState.NORMAL: + break; + default: + return; + } + for (const section of this.div.childNodes) { + if (section.hasAttribute("data-internal-link")) { + continue; + } + section.inert = disableFormElements; + } + } + #checkInferredLinks(inferredLinks) { + function annotationRects(annot) { + if (!annot.quadPoints) { + return [annot.rect]; + } + const rects = []; + for (let i = 2, ii = annot.quadPoints.length; i < ii; i += 8) { + const trX = annot.quadPoints[i]; + const trY = annot.quadPoints[i + 1]; + const blX = annot.quadPoints[i + 2]; + const blY = annot.quadPoints[i + 3]; + rects.push([blX, blY, trX, trY]); + } + return rects; + } + function intersectAnnotations(annot1, annot2) { + const intersections = []; + const annot1Rects = annotationRects(annot1); + const annot2Rects = annotationRects(annot2); + for (const rect1 of annot1Rects) { + for (const rect2 of annot2Rects) { + const intersection = Util.intersect(rect1, rect2); + if (intersection) { + intersections.push(intersection); + } + } + } + return intersections; + } + function areaRects(rects) { + let totalArea = 0; + for (const rect of rects) { + totalArea += Math.abs((rect[2] - rect[0]) * (rect[3] - rect[1])); + } + return totalArea; + } + return inferredLinks.filter(link => { + let linkAreaRects; + for (const annotation of this.#annotations) { + if (annotation.annotationType !== AnnotationType.LINK || !annotation.url) { + continue; + } + const intersections = intersectAnnotations(annotation, link); + if (intersections.length === 0) { + continue; + } + linkAreaRects ??= areaRects(annotationRects(link)); + if (areaRects(intersections) / linkAreaRects > 0.5) { + return false; + } + } + return true; + }); + } +} + +;// ./web/autolinker.js + + +function DOMRectToPDF({ + width, + height, + left, + top +}, pdfPageView) { + if (width === 0 || height === 0) { + return null; + } + const pageBox = pdfPageView.textLayer.div.getBoundingClientRect(); + const bottomLeft = pdfPageView.getPagePoint(left - pageBox.left, top - pageBox.top); + const topRight = pdfPageView.getPagePoint(left - pageBox.left + width, top - pageBox.top + height); + return Util.normalizeRect([bottomLeft[0], bottomLeft[1], topRight[0], topRight[1]]); +} +function calculateLinkPosition(range, pdfPageView) { + const rangeRects = range.getClientRects(); + if (rangeRects.length === 1) { + return { + rect: DOMRectToPDF(rangeRects[0], pdfPageView) + }; + } + const rect = [Infinity, Infinity, -Infinity, -Infinity]; + const quadPoints = []; + let i = 0; + for (const domRect of rangeRects) { + const normalized = DOMRectToPDF(domRect, pdfPageView); + if (normalized === null) { + continue; + } + quadPoints[i] = quadPoints[i + 4] = normalized[0]; + quadPoints[i + 1] = quadPoints[i + 3] = normalized[3]; + quadPoints[i + 2] = quadPoints[i + 6] = normalized[2]; + quadPoints[i + 5] = quadPoints[i + 7] = normalized[1]; + Util.rectBoundingBox(...normalized, rect); + i += 8; + } + return { + quadPoints, + rect + }; +} +function textPosition(container, offset) { + let currentContainer = container; + do { + if (currentContainer.nodeType === Node.TEXT_NODE) { + const currentLength = currentContainer.textContent.length; + if (offset <= currentLength) { + return [currentContainer, offset]; + } + offset -= currentLength; + } else if (currentContainer.firstChild) { + currentContainer = currentContainer.firstChild; + continue; + } + while (!currentContainer.nextSibling && currentContainer !== container) { + currentContainer = currentContainer.parentNode; + } + if (currentContainer !== container) { + currentContainer = currentContainer.nextSibling; + } + } while (currentContainer !== container); + throw new Error("Offset is bigger than container's contents length."); +} +function createLinkAnnotation({ + url, + index, + length +}, pdfPageView, id) { + const highlighter = pdfPageView._textHighlighter; + const [{ + begin, + end + }] = highlighter._convertMatches([index], [length]); + const range = new Range(); + range.setStart(...textPosition(highlighter.textDivs[begin.divIdx], begin.offset)); + range.setEnd(...textPosition(highlighter.textDivs[end.divIdx], end.offset)); + return { + id: `inferred_link_${id}`, + unsafeUrl: url, + url, + annotationType: AnnotationType.LINK, + rotation: 0, + ...calculateLinkPosition(range, pdfPageView), + borderStyle: null + }; +} +class Autolinker { + static #index = 0; + static #regex; + static findLinks(text) { + this.#regex ??= /\b(?:https?:\/\/|mailto:|www\.)(?:[\S--[\p{P}<>]]|\/|[\S--[\[\]]]+[\S--[\p{P}<>]])+|\b[\S--[@\p{Ps}\p{Pe}<>]]+@([\S--[\p{P}<>]]+(?:\.[\S--[\p{P}<>]]+)+)/gmv; + const [normalizedText, diffs] = normalize(text, { + ignoreDashEOL: true + }); + const matches = normalizedText.matchAll(this.#regex); + const links = []; + for (const match of matches) { + const [url, emailDomain] = match; + let raw; + if (url.startsWith("www.") || url.startsWith("http://") || url.startsWith("https://")) { + raw = url; + } else if (URL.canParse(`http://${emailDomain}`)) { + raw = url.startsWith("mailto:") ? url : `mailto:${url}`; + } else { + continue; + } + const absoluteURL = createValidAbsoluteUrl(raw, null, { + addDefaultProtocol: true + }); + if (absoluteURL) { + const [index, length] = getOriginalIndex(diffs, match.index, url.length); + links.push({ + url: absoluteURL.href, + index, + length + }); + } + } + return links; + } + static processLinks(pdfPageView) { + return this.findLinks(pdfPageView._textHighlighter.textContentItemsStr.join("\n")).map(link => createLinkAnnotation(link, pdfPageView, this.#index++)); + } +} + +;// ./web/base_pdf_page_view.js + + +class BasePDFPageView { + #loadingId = null; + #minDurationToUpdateCanvas = 0; + #renderError = null; + #renderingState = RenderingStates.INITIAL; + #showCanvas = null; + #startTime = 0; + #tempCanvas = null; + canvas = null; + div = null; + enableOptimizedPartialRendering = false; + eventBus = null; + id = null; + pageColors = null; + recordedBBoxes = null; + renderingQueue = null; + renderTask = null; + resume = null; + constructor(options) { + this.eventBus = options.eventBus; + this.id = options.id; + this.pageColors = options.pageColors || null; + this.renderingQueue = options.renderingQueue; + this.enableOptimizedPartialRendering = options.enableOptimizedPartialRendering ?? false; + this.#minDurationToUpdateCanvas = options.minDurationToUpdateCanvas ?? 500; + } + get renderingState() { + return this.#renderingState; + } + set renderingState(state) { + if (state === this.#renderingState) { + return; + } + this.#renderingState = state; + if (this.#loadingId) { + clearTimeout(this.#loadingId); + this.#loadingId = null; + } + switch (state) { + case RenderingStates.PAUSED: + this.div.classList.remove("loading"); + this.#startTime = 0; + this.#showCanvas?.(false); + break; + case RenderingStates.RUNNING: + this.div.classList.add("loadingIcon"); + this.#loadingId = setTimeout(() => { + this.div.classList.add("loading"); + this.#loadingId = null; + }, 0); + this.#startTime = Date.now(); + break; + case RenderingStates.INITIAL: + case RenderingStates.FINISHED: + this.div.classList.remove("loadingIcon", "loading"); + this.#startTime = 0; + break; + } + } + _createCanvas(onShow, hideUntilComplete = false) { + const { + pageColors + } = this; + const hasHCM = !!(pageColors?.background && pageColors?.foreground); + const prevCanvas = this.canvas; + const updateOnFirstShow = !prevCanvas && !hasHCM && !hideUntilComplete; + let canvas = this.canvas = document.createElement("canvas"); + this.#showCanvas = isLastShow => { + if (updateOnFirstShow) { + let tempCanvas = this.#tempCanvas; + if (!isLastShow && this.#minDurationToUpdateCanvas > 0) { + if (Date.now() - this.#startTime < this.#minDurationToUpdateCanvas) { + return; + } + if (!tempCanvas) { + tempCanvas = this.#tempCanvas = canvas; + canvas = this.canvas = canvas.cloneNode(false); + onShow(canvas); + } + } + if (tempCanvas) { + const ctx = canvas.getContext("2d", { + alpha: false + }); + ctx.drawImage(tempCanvas, 0, 0); + if (isLastShow) { + this.#resetTempCanvas(); + } else { + this.#startTime = Date.now(); + } + return; + } + onShow(canvas); + this.#showCanvas = null; + return; + } + if (!isLastShow) { + return; + } + if (prevCanvas) { + prevCanvas.replaceWith(canvas); + prevCanvas.width = prevCanvas.height = 0; + } else { + onShow(canvas); + } + }; + return { + canvas, + prevCanvas + }; + } + #renderContinueCallback = cont => { + this.#showCanvas?.(false); + if (this.renderingQueue && !this.renderingQueue.isHighestPriority(this)) { + this.renderingState = RenderingStates.PAUSED; + this.resume = () => { + this.renderingState = RenderingStates.RUNNING; + cont(); + }; + return; + } + cont(); + }; + _resetCanvas() { + const { + canvas + } = this; + if (!canvas) { + return; + } + canvas.remove(); + canvas.width = canvas.height = 0; + this.canvas = null; + this.#resetTempCanvas(); + } + #resetTempCanvas() { + if (this.#tempCanvas) { + this.#tempCanvas.width = this.#tempCanvas.height = 0; + this.#tempCanvas = null; + } + } + async _drawCanvas(options, onCancel, onFinish) { + const renderTask = this.renderTask = this.pdfPage.render(options); + renderTask.onContinue = this.#renderContinueCallback; + renderTask.onError = error => { + if (error instanceof RenderingCancelledException) { + onCancel(); + this.#renderError = null; + } + }; + let error = null; + try { + await renderTask.promise; + this.#showCanvas?.(true); + } catch (e) { + if (e instanceof RenderingCancelledException) { + return; + } + error = e; + this.#showCanvas?.(true); + } finally { + this.#renderError = error; + if (renderTask === this.renderTask) { + this.renderTask = null; + if (this.enableOptimizedPartialRendering) { + this.recordedBBoxes ??= renderTask.recordedBBoxes; + } + } + } + this.renderingState = RenderingStates.FINISHED; + onFinish(renderTask); + if (error) { + throw error; + } + } + cancelRendering({ + cancelExtraDelay = 0 + } = {}) { + if (this.renderTask) { + this.renderTask.cancel(cancelExtraDelay); + this.renderTask = null; + } + this.resume = null; + } + dispatchPageRender() { + this.eventBus.dispatch("pagerender", { + source: this, + pageNumber: this.id + }); + } + dispatchPageRendered(cssTransform, isDetailView) { + this.eventBus.dispatch("pagerendered", { + source: this, + pageNumber: this.id, + cssTransform, + isDetailView, + timestamp: performance.now(), + error: this.#renderError + }); + } +} + +;// ./web/draw_layer_builder.js + +class DrawLayerBuilder { + #drawLayer = null; + constructor(options) { + this.pageIndex = options.pageIndex; + } + async render({ + intent = "display" + }) { + if (intent !== "display" || this.#drawLayer || this._cancelled) { + return; + } + this.#drawLayer = new DrawLayer({ + pageIndex: this.pageIndex + }); + } + cancel() { + this._cancelled = true; + if (!this.#drawLayer) { + return; + } + this.#drawLayer.destroy(); + this.#drawLayer = null; + } + setParent(parent) { + this.#drawLayer?.setParent(parent); + } + getDrawLayer() { + return this.#drawLayer; + } +} + +;// ./web/pdf_page_detail_view.js + + + +class PDFPageDetailView extends BasePDFPageView { + #detailArea = null; + renderingCancelled = false; + constructor({ + pageView + }) { + super(pageView); + this.pageView = pageView; + this.renderingId = "detail" + this.id; + this.div = pageView.div; + } + setPdfPage(pdfPage) { + this.pageView.setPdfPage(pdfPage); + } + get pdfPage() { + return this.pageView.pdfPage; + } + get renderingState() { + return super.renderingState; + } + set renderingState(value) { + this.renderingCancelled = false; + super.renderingState = value; + } + reset({ + keepCanvas = false + } = {}) { + const renderingCancelled = this.renderingCancelled || this.renderingState === RenderingStates.RUNNING || this.renderingState === RenderingStates.PAUSED; + this.cancelRendering(); + this.renderingState = RenderingStates.INITIAL; + this.renderingCancelled = renderingCancelled; + if (!keepCanvas) { + this._resetCanvas(); + } + } + #shouldRenderDifferentArea(visibleArea) { + if (!this.#detailArea) { + return true; + } + const minDetailX = this.#detailArea.minX; + const minDetailY = this.#detailArea.minY; + const maxDetailX = this.#detailArea.width + minDetailX; + const maxDetailY = this.#detailArea.height + minDetailY; + if (visibleArea.minX < minDetailX || visibleArea.minY < minDetailY || visibleArea.maxX > maxDetailX || visibleArea.maxY > maxDetailY) { + return true; + } + const { + width: maxWidth, + height: maxHeight, + scale + } = this.pageView.viewport; + if (this.#detailArea.scale !== scale) { + return true; + } + const paddingLeftSize = visibleArea.minX - minDetailX; + const paddingRightSize = maxDetailX - visibleArea.maxX; + const paddingTopSize = visibleArea.minY - minDetailY; + const paddingBottomSize = maxDetailY - visibleArea.maxY; + const MOVEMENT_THRESHOLD = 0.5; + const ratio = (1 + MOVEMENT_THRESHOLD) / MOVEMENT_THRESHOLD; + if (minDetailX > 0 && paddingRightSize / paddingLeftSize > ratio || maxDetailX < maxWidth && paddingLeftSize / paddingRightSize > ratio || minDetailY > 0 && paddingBottomSize / paddingTopSize > ratio || maxDetailY < maxHeight && paddingTopSize / paddingBottomSize > ratio) { + return true; + } + return false; + } + update({ + visibleArea = null, + underlyingViewUpdated = false + } = {}) { + if (underlyingViewUpdated) { + this.cancelRendering(); + this.renderingState = RenderingStates.INITIAL; + return; + } + if (!this.#shouldRenderDifferentArea(visibleArea)) { + return; + } + const { + viewport, + maxCanvasPixels, + capCanvasAreaFactor + } = this.pageView; + const visibleWidth = visibleArea.maxX - visibleArea.minX; + const visibleHeight = visibleArea.maxY - visibleArea.minY; + const visiblePixels = visibleWidth * visibleHeight * OutputScale.pixelRatio ** 2; + const maxDetailToVisibleLinearRatio = Math.sqrt(OutputScale.capPixels(maxCanvasPixels, capCanvasAreaFactor) / visiblePixels); + const maxOverflowScale = (maxDetailToVisibleLinearRatio - 1) / 2; + let overflowScale = Math.min(1, maxOverflowScale); + if (overflowScale < 0) { + overflowScale = 0; + } + const overflowWidth = visibleWidth * overflowScale; + const overflowHeight = visibleHeight * overflowScale; + const minX = Math.max(0, visibleArea.minX - overflowWidth); + const maxX = Math.min(viewport.width, visibleArea.maxX + overflowWidth); + const minY = Math.max(0, visibleArea.minY - overflowHeight); + const maxY = Math.min(viewport.height, visibleArea.maxY + overflowHeight); + const width = maxX - minX; + const height = maxY - minY; + this.#detailArea = { + minX, + minY, + width, + height, + scale: viewport.scale + }; + this.reset({ + keepCanvas: true + }); + } + _getRenderingContext(canvas, transform) { + const baseContext = this.pageView._getRenderingContext(canvas, transform, false); + const recordedBBoxes = this.pdfPage.recordedBBoxes; + if (!recordedBBoxes || !this.enableOptimizedPartialRendering) { + return baseContext; + } + const { + viewport: { + width: vWidth, + height: vHeight + } + } = this.pageView; + const { + width: aWidth, + height: aHeight, + minX: aMinX, + minY: aMinY + } = this.#detailArea; + const detailMinX = aMinX / vWidth; + const detailMinY = aMinY / vHeight; + const detailMaxX = (aMinX + aWidth) / vWidth; + const detailMaxY = (aMinY + aHeight) / vHeight; + return { + ...baseContext, + operationsFilter(index) { + if (recordedBBoxes.isEmpty(index)) { + return false; + } + return recordedBBoxes.minX(index) <= detailMaxX && recordedBBoxes.maxX(index) >= detailMinX && recordedBBoxes.minY(index) <= detailMaxY && recordedBBoxes.maxY(index) >= detailMinY; + } + }; + } + async draw() { + if (this.pageView.detailView !== this) { + return undefined; + } + const hideUntilComplete = this.pageView.renderingState === RenderingStates.FINISHED || this.renderingState === RenderingStates.FINISHED; + if (this.renderingState !== RenderingStates.INITIAL) { + console.error("Must be in new state before drawing"); + this.reset(); + } + const { + div, + pdfPage, + viewport + } = this.pageView; + if (!pdfPage) { + this.renderingState = RenderingStates.FINISHED; + throw new Error("pdfPage is not loaded"); + } + this.renderingState = RenderingStates.RUNNING; + const canvasWrapper = this.pageView._ensureCanvasWrapper(); + const { + canvas, + prevCanvas + } = this._createCanvas(newCanvas => { + if (canvasWrapper.firstElementChild?.tagName === "CANVAS") { + canvasWrapper.firstElementChild.after(newCanvas); + } else { + canvasWrapper.prepend(newCanvas); + } + }, hideUntilComplete); + canvas.ariaHidden = true; + if (this.enableOptimizedPartialRendering) { + canvas.className = "detailView"; + } + const { + width, + height + } = viewport; + const area = this.#detailArea; + const { + pixelRatio + } = OutputScale; + const transform = [pixelRatio, 0, 0, pixelRatio, -area.minX * pixelRatio, -area.minY * pixelRatio]; + canvas.width = area.width * pixelRatio; + canvas.height = area.height * pixelRatio; + const { + style + } = canvas; + style.width = `${area.width * 100 / width}%`; + style.height = `${area.height * 100 / height}%`; + style.top = `${area.minY * 100 / height}%`; + style.left = `${area.minX * 100 / width}%`; + const renderingPromise = this._drawCanvas(this._getRenderingContext(canvas, transform), () => { + this.canvas?.remove(); + this.canvas = prevCanvas; + }, () => { + this.dispatchPageRendered(false, true); + }); + div.setAttribute("data-loaded", true); + this.dispatchPageRender(); + return renderingPromise; + } +} + +;// ./web/struct_tree_layer_builder.js + + +const PDF_ROLE_TO_HTML_ROLE = { + Document: null, + DocumentFragment: null, + Part: "group", + Sect: "group", + Div: "group", + Aside: "note", + NonStruct: "none", + P: null, + H: "heading", + Title: null, + FENote: "note", + Sub: "group", + Lbl: null, + Span: null, + Em: null, + Strong: null, + Link: "link", + Annot: "note", + Form: "form", + Ruby: null, + RB: null, + RT: null, + RP: null, + Warichu: null, + WT: null, + WP: null, + L: "list", + LI: "listitem", + LBody: null, + Table: "table", + TR: "row", + TH: "columnheader", + TD: "cell", + THead: "columnheader", + TBody: null, + TFoot: null, + Caption: null, + Figure: "figure", + Formula: null, + Artifact: null +}; +const MathMLElements = new Set(["math", "merror", "mfrac", "mi", "mmultiscripts", "mn", "mo", "mover", "mpadded", "mprescripts", "mroot", "mrow", "ms", "mspace", "msqrt", "mstyle", "msub", "msubsup", "msup", "mtable", "mtd", "mtext", "mtr", "munder", "munderover", "semantics"]); +const MathMLNamespace = "http://www.w3.org/1998/Math/MathML"; +class MathMLSanitizer { + static get sanitizer() { + return shadow(this, "sanitizer", FeatureTest.isSanitizerSupported ? new Sanitizer({ + elements: [...MathMLElements].map(name => ({ + name, + namespace: MathMLNamespace + })), + replaceWithChildrenElements: [{ + name: "maction", + namespace: MathMLNamespace + }], + attributes: ["dir", "displaystyle", "mathbackground", "mathcolor", "mathsize", "scriptlevel", "encoding", "display", "linethickness", "intent", "arg", "form", "fence", "separator", "lspace", "rspace", "stretchy", "symmetric", "maxsize", "minsize", "largeop", "movablelimits", "width", "height", "depth", "voffset", "accent", "accentunder", "columnspan", "rowspan"], + comments: false + }) : null); + } +} +const HEADING_PATTERN = /^H(\d+)$/; +class StructTreeLayerBuilder { + #promise; + #treeDom = null; + #treePromise; + #elementAttributes = new Map(); + #rawDims; + #elementsToAddToTextLayer = null; + constructor(pdfPage, rawDims) { + this.#promise = pdfPage.getStructTree(); + this.#rawDims = rawDims; + } + async render() { + if (this.#treePromise) { + return this.#treePromise; + } + const { + promise, + resolve, + reject + } = Promise.withResolvers(); + this.#treePromise = promise; + try { + this.#treeDom = this.#walk(await this.#promise); + } catch (ex) { + reject(ex); + } + this.#promise = null; + this.#treeDom?.classList.add("structTree"); + resolve(this.#treeDom); + return promise; + } + async getAriaAttributes(annotationId) { + try { + await this.render(); + return this.#elementAttributes.get(annotationId); + } catch {} + return null; + } + hide() { + if (this.#treeDom && !this.#treeDom.hidden) { + this.#treeDom.hidden = true; + } + } + show() { + if (this.#treeDom?.hidden) { + this.#treeDom.hidden = false; + } + } + #setAttributes(structElement, htmlElement) { + const { + alt, + id, + lang + } = structElement; + if (alt !== undefined) { + let added = false; + const label = removeNullCharacters(alt); + for (const child of structElement.children) { + if (child.type === "annotation") { + let attrs = this.#elementAttributes.get(child.id); + if (!attrs) { + attrs = new Map(); + this.#elementAttributes.set(child.id, attrs); + } + attrs.set("aria-label", label); + added = true; + } + } + if (!added) { + htmlElement.setAttribute("aria-label", label); + } + } + if (id !== undefined) { + htmlElement.setAttribute("aria-owns", id); + } + if (lang !== undefined) { + htmlElement.setAttribute("lang", removeNullCharacters(lang, true)); + } + } + #addImageInTextLayer(node, element) { + const { + alt, + bbox, + children + } = node; + const child = children?.[0]; + if (!this.#rawDims || !alt || !bbox || child?.type !== "content") { + return false; + } + const { + id + } = child; + if (!id) { + return false; + } + element.setAttribute("aria-owns", id); + const img = document.createElement("span"); + (this.#elementsToAddToTextLayer ||= new Map()).set(id, img); + img.setAttribute("role", "img"); + img.setAttribute("aria-label", removeNullCharacters(alt)); + const { + pageHeight, + pageX, + pageY + } = this.#rawDims; + const calc = "calc(var(--total-scale-factor) *"; + const { + style + } = img; + style.width = `${calc}${bbox[2] - bbox[0]}px)`; + style.height = `${calc}${bbox[3] - bbox[1]}px)`; + style.left = `${calc}${bbox[0] - pageX}px)`; + style.top = `${calc}${pageHeight - bbox[3] + pageY}px)`; + return true; + } + addElementsToTextLayer() { + if (!this.#elementsToAddToTextLayer) { + return; + } + for (const [id, img] of this.#elementsToAddToTextLayer) { + document.getElementById(id)?.append(img); + } + this.#elementsToAddToTextLayer.clear(); + this.#elementsToAddToTextLayer = null; + } + #walk(node) { + if (!node) { + return null; + } + let element; + if ("role" in node) { + const { + role + } = node; + element = MathMLElements.has(role) ? document.createElementNS(MathMLNamespace, role) : document.createElement("span"); + const match = role.match(HEADING_PATTERN); + if (match) { + element.setAttribute("role", "heading"); + element.setAttribute("aria-level", match[1]); + } else if (PDF_ROLE_TO_HTML_ROLE[role]) { + element.setAttribute("role", PDF_ROLE_TO_HTML_ROLE[role]); + } + if (role === "Figure" && this.#addImageInTextLayer(node, element)) { + return element; + } + if (role === "Formula") { + if (node.mathML && MathMLSanitizer.sanitizer) { + element.setHTML(node.mathML, { + sanitizer: MathMLSanitizer.sanitizer + }); + } + if (!node.mathML && node.children.length === 1 && node.children[0].role !== "math") { + element = document.createElementNS(MathMLNamespace, "math"); + } + } + } + element ||= document.createElement("span"); + this.#setAttributes(node, element); + if (node.children) { + if (node.children.length === 1 && "id" in node.children[0]) { + this.#setAttributes(node.children[0], element); + } else { + for (const kid of node.children) { + element.append(this.#walk(kid)); + } + } + } + return element; + } +} + +;// ./web/text_accessibility.js + +class TextAccessibilityManager { + #enabled = false; + #textChildren = null; + #textNodes = new Map(); + #waitingElements = new Map(); + setTextMapping(textDivs) { + this.#textChildren = textDivs; + } + static #compareElementPositions(e1, e2) { + const rect1 = e1.getBoundingClientRect(); + const rect2 = e2.getBoundingClientRect(); + if (rect1.width === 0 && rect1.height === 0) { + return +1; + } + if (rect2.width === 0 && rect2.height === 0) { + return -1; + } + const top1 = rect1.y; + const bot1 = rect1.y + rect1.height; + const mid1 = rect1.y + rect1.height / 2; + const top2 = rect2.y; + const bot2 = rect2.y + rect2.height; + const mid2 = rect2.y + rect2.height / 2; + if (mid1 <= top2 && mid2 >= bot1) { + return -1; + } + if (mid2 <= top1 && mid1 >= bot2) { + return +1; + } + const centerX1 = rect1.x + rect1.width / 2; + const centerX2 = rect2.x + rect2.width / 2; + return centerX1 - centerX2; + } + enable() { + if (this.#enabled) { + throw new Error("TextAccessibilityManager is already enabled."); + } + if (!this.#textChildren) { + throw new Error("Text divs and strings have not been set."); + } + this.#enabled = true; + this.#textChildren = this.#textChildren.slice(); + this.#textChildren.sort(TextAccessibilityManager.#compareElementPositions); + if (this.#textNodes.size > 0) { + const textChildren = this.#textChildren; + for (const [id, nodeIndex] of this.#textNodes) { + const element = document.getElementById(id); + if (!element) { + this.#textNodes.delete(id); + continue; + } + this.#addIdToAriaOwns(id, textChildren[nodeIndex]); + } + } + for (const [element, isRemovable] of this.#waitingElements) { + this.addPointerInTextLayer(element, isRemovable); + } + this.#waitingElements.clear(); + } + disable() { + if (!this.#enabled) { + return; + } + this.#waitingElements.clear(); + this.#textChildren = null; + this.#enabled = false; + } + removePointerInTextLayer(element) { + if (!this.#enabled) { + this.#waitingElements.delete(element); + return; + } + const children = this.#textChildren; + if (!children || children.length === 0) { + return; + } + const { + id + } = element; + const nodeIndex = this.#textNodes.get(id); + if (nodeIndex === undefined) { + return; + } + const node = children[nodeIndex]; + this.#textNodes.delete(id); + let owns = node.getAttribute("aria-owns"); + if (owns?.includes(id)) { + owns = owns.split(" ").filter(x => x !== id).join(" "); + if (owns) { + node.setAttribute("aria-owns", owns); + } else { + node.removeAttribute("aria-owns"); + node.setAttribute("role", "presentation"); + } + } + } + #addIdToAriaOwns(id, node) { + const owns = node.getAttribute("aria-owns"); + if (!owns?.includes(id)) { + node.setAttribute("aria-owns", owns ? `${owns} ${id}` : id); + } + node.removeAttribute("role"); + } + addPointerInTextLayer(element, isRemovable) { + const { + id + } = element; + if (!id) { + return null; + } + if (!this.#enabled) { + this.#waitingElements.set(element, isRemovable); + return null; + } + if (isRemovable) { + this.removePointerInTextLayer(element); + } + const children = this.#textChildren; + if (!children || children.length === 0) { + return null; + } + const index = binarySearchFirstItem(children, node => TextAccessibilityManager.#compareElementPositions(element, node) < 0); + const nodeIndex = Math.max(0, index - 1); + const child = children[nodeIndex]; + this.#addIdToAriaOwns(id, child); + this.#textNodes.set(id, nodeIndex); + const parent = child.parentNode; + return parent?.classList.contains("markedContent") ? parent.id : null; + } + moveElementInDOM(container, element, contentElement, isRemovable) { + const id = this.addPointerInTextLayer(contentElement, isRemovable); + if (!container.hasChildNodes()) { + container.append(element); + return id; + } + const children = Array.from(container.childNodes).filter(node => node !== element); + if (children.length === 0) { + return id; + } + const index = binarySearchFirstItem(children, node => TextAccessibilityManager.#compareElementPositions(element, node) < 0); + if (index === 0) { + children[0].before(element); + } else { + children[index - 1].after(element); + } + return id; + } +} + +;// ./web/text_highlighter.js +class TextHighlighter { + #eventAbortController = null; + constructor({ + findController, + eventBus, + pageIndex + }) { + this.findController = findController; + this.matches = []; + this.eventBus = eventBus; + this.pageIdx = pageIndex; + this.textDivs = null; + this.textContentItemsStr = null; + this.enabled = false; + } + setTextMapping(divs, texts) { + this.textDivs = divs; + this.textContentItemsStr = texts; + } + enable() { + if (!this.textDivs || !this.textContentItemsStr) { + throw new Error("Text divs and strings have not been set."); + } + if (this.enabled) { + throw new Error("TextHighlighter is already enabled."); + } + this.enabled = true; + if (!this.#eventAbortController) { + this.#eventAbortController = new AbortController(); + this.eventBus._on("updatetextlayermatches", evt => { + if (evt.pageIndex === this.pageIdx || evt.pageIndex === -1) { + this._updateMatches(); + } + }, { + signal: this.#eventAbortController.signal + }); + } + this._updateMatches(); + } + disable() { + if (!this.enabled) { + return; + } + this.enabled = false; + this.#eventAbortController?.abort(); + this.#eventAbortController = null; + this._updateMatches(true); + } + _convertMatches(matches, matchesLength) { + if (!matches) { + return []; + } + const { + textContentItemsStr + } = this; + let i = 0, + iIndex = 0; + const end = textContentItemsStr.length - 1; + const result = []; + for (let m = 0, mm = matches.length; m < mm; m++) { + let matchIdx = matches[m]; + while (i !== end && matchIdx >= iIndex + textContentItemsStr[i].length) { + iIndex += textContentItemsStr[i].length; + i++; + } + if (i === textContentItemsStr.length) { + console.error("Could not find a matching mapping"); + } + const match = { + begin: { + divIdx: i, + offset: matchIdx - iIndex + } + }; + matchIdx += matchesLength[m]; + while (i !== end && matchIdx > iIndex + textContentItemsStr[i].length) { + iIndex += textContentItemsStr[i].length; + i++; + } + match.end = { + divIdx: i, + offset: matchIdx - iIndex + }; + result.push(match); + } + return result; + } + _renderMatches(matches) { + if (matches.length === 0) { + return; + } + const { + findController, + pageIdx + } = this; + const { + textContentItemsStr, + textDivs + } = this; + const isSelectedPage = pageIdx === findController.selected.pageIdx; + const selectedMatchIdx = findController.selected.matchIdx; + const highlightAll = findController.state.highlightAll; + let prevEnd = null; + const infinity = { + divIdx: -1, + offset: undefined + }; + function beginText(begin, className) { + const divIdx = begin.divIdx; + textDivs[divIdx].textContent = ""; + return appendTextToDiv(divIdx, 0, begin.offset, className); + } + function appendTextToDiv(divIdx, fromOffset, toOffset, className) { + let div = textDivs[divIdx]; + if (div.nodeType === Node.TEXT_NODE) { + const span = document.createElement("span"); + div.before(span); + span.append(div); + textDivs[divIdx] = span; + div = span; + } + const content = textContentItemsStr[divIdx].substring(fromOffset, toOffset); + const node = document.createTextNode(content); + if (className) { + const span = document.createElement("span"); + span.className = `${className} appended`; + span.append(node); + div.append(span); + if (className.includes("selected")) { + const { + left + } = span.getClientRects()[0]; + const parentLeft = div.getBoundingClientRect().left; + return left - parentLeft; + } + return 0; + } + div.append(node); + return 0; + } + let i0 = selectedMatchIdx, + i1 = i0 + 1; + if (highlightAll) { + i0 = 0; + i1 = matches.length; + } else if (!isSelectedPage) { + return; + } + let lastDivIdx = -1; + let lastOffset = -1; + for (let i = i0; i < i1; i++) { + const match = matches[i]; + const begin = match.begin; + if (begin.divIdx === lastDivIdx && begin.offset === lastOffset) { + continue; + } + lastDivIdx = begin.divIdx; + lastOffset = begin.offset; + const end = match.end; + const isSelected = isSelectedPage && i === selectedMatchIdx; + const highlightSuffix = isSelected ? " selected" : ""; + let selectedLeft = 0; + if (!prevEnd || begin.divIdx !== prevEnd.divIdx) { + if (prevEnd !== null) { + appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset); + } + beginText(begin); + } else { + appendTextToDiv(prevEnd.divIdx, prevEnd.offset, begin.offset); + } + if (begin.divIdx === end.divIdx) { + selectedLeft = appendTextToDiv(begin.divIdx, begin.offset, end.offset, "highlight" + highlightSuffix); + } else { + selectedLeft = appendTextToDiv(begin.divIdx, begin.offset, infinity.offset, "highlight begin" + highlightSuffix); + for (let n0 = begin.divIdx + 1, n1 = end.divIdx; n0 < n1; n0++) { + textDivs[n0].className = "highlight middle" + highlightSuffix; + } + beginText(end, "highlight end" + highlightSuffix); + } + prevEnd = end; + if (isSelected) { + findController.scrollMatchIntoView({ + element: textDivs[begin.divIdx], + selectedLeft, + pageIndex: pageIdx, + matchIndex: selectedMatchIdx + }); + } + } + if (prevEnd) { + appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset); + } + } + _updateMatches(reset = false) { + if (!this.enabled && !reset) { + return; + } + const { + findController, + matches, + pageIdx + } = this; + const { + textContentItemsStr, + textDivs + } = this; + let clearedUntilDivIdx = -1; + for (const match of matches) { + const begin = Math.max(clearedUntilDivIdx, match.begin.divIdx); + for (let n = begin, end = match.end.divIdx; n <= end; n++) { + const div = textDivs[n]; + div.textContent = textContentItemsStr[n]; + div.className = ""; + } + clearedUntilDivIdx = match.end.divIdx + 1; + } + if (!findController?.highlightMatches || reset) { + return; + } + const pageMatches = findController.pageMatches[pageIdx] || null; + const pageMatchesLength = findController.pageMatchesLength[pageIdx] || null; + this.matches = this._convertMatches(pageMatches, pageMatchesLength); + this._renderMatches(this.matches); + } +} + +;// ./web/text_layer_builder.js + + +class TextLayerBuilder { + #enablePermissions = false; + #onAppend = null; + #renderingDone = false; + #textLayer = null; + static #textLayers = new Map(); + static #selectionChangeAbortController = null; + constructor({ + pdfPage, + highlighter = null, + accessibilityManager = null, + enablePermissions = false, + onAppend = null + }) { + this.pdfPage = pdfPage; + this.highlighter = highlighter; + this.accessibilityManager = accessibilityManager; + this.#enablePermissions = enablePermissions === true; + this.#onAppend = onAppend; + this.div = document.createElement("div"); + this.div.tabIndex = 0; + this.div.className = "textLayer"; + } + async render({ + viewport, + textContentParams = null + }) { + if (this.#renderingDone && this.#textLayer) { + this.#textLayer.update({ + viewport, + onBefore: this.hide.bind(this) + }); + this.show(); + return; + } + this.cancel(); + this.#textLayer = new TextLayer({ + textContentSource: this.pdfPage.streamTextContent(textContentParams || { + includeMarkedContent: true, + disableNormalization: true + }), + container: this.div, + viewport + }); + const { + textDivs, + textContentItemsStr + } = this.#textLayer; + this.highlighter?.setTextMapping(textDivs, textContentItemsStr); + this.accessibilityManager?.setTextMapping(textDivs); + await this.#textLayer.render(); + this.#renderingDone = true; + const endOfContent = document.createElement("div"); + endOfContent.className = "endOfContent"; + this.div.append(endOfContent); + this.#bindMouse(endOfContent); + this.#onAppend?.(this.div); + this.highlighter?.enable(); + this.accessibilityManager?.enable(); + } + hide() { + if (!this.div.hidden && this.#renderingDone) { + this.highlighter?.disable(); + this.div.hidden = true; + } + } + show() { + if (this.div.hidden && this.#renderingDone) { + this.div.hidden = false; + this.highlighter?.enable(); + } + } + cancel() { + this.#textLayer?.cancel(); + this.#textLayer = null; + this.highlighter?.disable(); + this.accessibilityManager?.disable(); + TextLayerBuilder.#removeGlobalSelectionListener(this.div); + } + #bindMouse(end) { + const { + div + } = this; + div.addEventListener("mousedown", () => { + div.classList.add("selecting"); + }); + div.addEventListener("copy", event => { + if (!this.#enablePermissions) { + const selection = document.getSelection(); + event.clipboardData.setData("text/plain", removeNullCharacters(normalizeUnicode(selection.toString()))); + } + stopEvent(event); + }); + TextLayerBuilder.#textLayers.set(div, end); + TextLayerBuilder.#enableGlobalSelectionListener(); + } + static #removeGlobalSelectionListener(textLayerDiv) { + this.#textLayers.delete(textLayerDiv); + if (this.#textLayers.size === 0) { + this.#selectionChangeAbortController?.abort(); + this.#selectionChangeAbortController = null; + } + } + static #enableGlobalSelectionListener() { + if (this.#selectionChangeAbortController) { + return; + } + this.#selectionChangeAbortController = new AbortController(); + const { + signal + } = this.#selectionChangeAbortController; + const reset = (end, textLayer) => { + textLayer.append(end); + end.style.width = ""; + end.style.height = ""; + textLayer.classList.remove("selecting"); + }; + let isPointerDown = false; + document.addEventListener("pointerdown", () => { + isPointerDown = true; + }, { + signal + }); + document.addEventListener("pointerup", () => { + isPointerDown = false; + this.#textLayers.forEach(reset); + }, { + signal + }); + window.addEventListener("blur", () => { + isPointerDown = false; + this.#textLayers.forEach(reset); + }, { + signal + }); + document.addEventListener("keyup", () => { + if (!isPointerDown) { + this.#textLayers.forEach(reset); + } + }, { + signal + }); + var isFirefox, prevRange; + document.addEventListener("selectionchange", () => { + const selection = document.getSelection(); + if (selection.rangeCount === 0) { + this.#textLayers.forEach(reset); + return; + } + const activeTextLayers = new Set(); + for (let i = 0; i < selection.rangeCount; i++) { + const range = selection.getRangeAt(i); + for (const textLayerDiv of this.#textLayers.keys()) { + if (!activeTextLayers.has(textLayerDiv) && range.intersectsNode(textLayerDiv)) { + activeTextLayers.add(textLayerDiv); + } + } + } + for (const [textLayerDiv, endDiv] of this.#textLayers) { + if (activeTextLayers.has(textLayerDiv)) { + textLayerDiv.classList.add("selecting"); + } else { + reset(endDiv, textLayerDiv); + } + } + isFirefox ??= getComputedStyle(this.#textLayers.values().next().value).getPropertyValue("-moz-user-select") === "none"; + if (isFirefox) { + return; + } + const range = selection.getRangeAt(0); + const modifyStart = prevRange && (range.compareBoundaryPoints(Range.END_TO_END, prevRange) === 0 || range.compareBoundaryPoints(Range.START_TO_END, prevRange) === 0); + let anchor = modifyStart ? range.startContainer : range.endContainer; + if (anchor.nodeType === Node.TEXT_NODE) { + anchor = anchor.parentNode; + } + if (!modifyStart && range.endOffset === 0) { + do { + while (!anchor.previousSibling) { + anchor = anchor.parentNode; + } + anchor = anchor.previousSibling; + } while (!anchor.childNodes.length); + } + const parentTextLayer = anchor.parentElement?.closest(".textLayer"); + const endDiv = this.#textLayers.get(parentTextLayer); + if (endDiv) { + endDiv.style.width = parentTextLayer.style.width; + endDiv.style.height = parentTextLayer.style.height; + anchor.parentElement.insertBefore(endDiv, modifyStart ? anchor : anchor.nextSibling); + } + prevRange = range.cloneRange(); + }, { + signal + }); + } +} + +;// ./web/pdf_page_view.js + + + + + + + + + + + + + + + + +const DEFAULT_LAYER_PROPERTIES = null; +const LAYERS_ORDER = new Map([["canvasWrapper", 0], ["textLayer", 1], ["annotationLayer", 2], ["annotationEditorLayer", 3], ["xfaLayer", 3]]); +class PDFPageView extends BasePDFPageView { + #annotationMode = AnnotationMode.ENABLE_FORMS; + #canvasWrapper = null; + #commentManager = null; + #enableAutoLinking = true; + #hasRestrictedScaling = false; + #isEditing = false; + #layerProperties = null; + #needsRestrictedScaling = false; + #originalViewport = null; + #previousRotation = null; + #scaleRoundX = 1; + #scaleRoundY = 1; + #textLayerMode = TextLayerMode.ENABLE; + #userUnit = 1; + #useThumbnailCanvas = { + directDrawing: true, + initialOptionalContent: true, + regularAnnotations: true + }; + #layers = [null, null, null, null]; + constructor(options) { + super(options); + const container = options.container; + const defaultViewport = options.defaultViewport; + this.renderingId = "page" + this.id; + this.#layerProperties = options.layerProperties || DEFAULT_LAYER_PROPERTIES; + this.pdfPage = null; + this.pageLabel = null; + this.rotation = 0; + this.scale = options.scale || DEFAULT_SCALE; + this.viewport = defaultViewport; + this.pdfPageRotate = defaultViewport.rotation; + this._optionalContentConfigPromise = options.optionalContentConfigPromise || null; + this.#textLayerMode = options.textLayerMode ?? TextLayerMode.ENABLE; + this.#annotationMode = options.annotationMode ?? AnnotationMode.ENABLE_FORMS; + this.imageResourcesPath = options.imageResourcesPath || ""; + this.enableDetailCanvas = options.enableDetailCanvas ?? true; + this.maxCanvasPixels = options.maxCanvasPixels ?? AppOptions.get("maxCanvasPixels"); + this.maxCanvasDim = options.maxCanvasDim || AppOptions.get("maxCanvasDim"); + this.capCanvasAreaFactor = options.capCanvasAreaFactor ?? AppOptions.get("capCanvasAreaFactor"); + this.#enableAutoLinking = options.enableAutoLinking !== false; + this.#commentManager = options.commentManager || null; + this.l10n = options.l10n; + this.l10n ||= new genericl10n_GenericL10n(); + this._isStandalone = !this.renderingQueue?.hasViewer(); + this._container = container; + this._annotationCanvasMap = null; + this.annotationLayer = null; + this.annotationEditorLayer = null; + this.textLayer = null; + this.xfaLayer = null; + this.structTreeLayer = null; + this.drawLayer = null; + this.detailView = null; + const div = document.createElement("div"); + div.className = "page"; + div.setAttribute("data-page-number", this.id); + div.setAttribute("role", "region"); + div.setAttribute("data-l10n-id", "pdfjs-page-landmark"); + div.setAttribute("data-l10n-args", JSON.stringify({ + page: this.id + })); + this.div = div; + this.#setDimensions(); + container?.append(div); + if (this._isStandalone) { + container?.style.setProperty("--scale-factor", this.scale * PixelsPerInch.PDF_TO_CSS_UNITS); + if (this.pageColors?.background) { + container?.style.setProperty("--page-bg-color", this.pageColors.background); + } + const { + optionalContentConfigPromise + } = options; + if (optionalContentConfigPromise) { + optionalContentConfigPromise.then(optionalContentConfig => { + if (optionalContentConfigPromise !== this._optionalContentConfigPromise) { + return; + } + this.#useThumbnailCanvas.initialOptionalContent = optionalContentConfig.hasInitialVisibility; + }); + } + if (!options.l10n) { + this.l10n.translate(this.div); + } + } + } + #addLayer(div, name) { + const pos = LAYERS_ORDER.get(name); + const oldDiv = this.#layers[pos]; + this.#layers[pos] = div; + if (oldDiv) { + oldDiv.replaceWith(div); + return; + } + for (let i = pos - 1; i >= 0; i--) { + const layer = this.#layers[i]; + if (layer) { + layer.after(div); + return; + } + } + this.div.prepend(div); + } + #setDimensions() { + const { + div, + viewport + } = this; + if (viewport.userUnit !== this.#userUnit) { + if (viewport.userUnit !== 1) { + div.style.setProperty("--user-unit", viewport.userUnit); + } else { + div.style.removeProperty("--user-unit"); + } + this.#userUnit = viewport.userUnit; + } + if (this.pdfPage) { + if (this.#previousRotation === viewport.rotation) { + return; + } + this.#previousRotation = viewport.rotation; + } + setLayerDimensions(div, viewport, true, false); + } + setPdfPage(pdfPage) { + if (this._isStandalone && (this.pageColors?.foreground === "CanvasText" || this.pageColors?.background === "Canvas")) { + this._container?.style.setProperty("--hcm-highlight-filter", pdfPage.filterFactory.addHighlightHCMFilter("highlight", "CanvasText", "Canvas", "HighlightText", "Highlight")); + this._container?.style.setProperty("--hcm-highlight-selected-filter", pdfPage.filterFactory.addHighlightHCMFilter("highlight_selected", "CanvasText", "Canvas", "HighlightText", "Highlight")); + } + this.pdfPage = pdfPage; + this.pdfPageRotate = pdfPage.rotate; + const totalRotation = (this.rotation + this.pdfPageRotate) % 360; + this.viewport = pdfPage.getViewport({ + scale: this.scale * PixelsPerInch.PDF_TO_CSS_UNITS, + rotation: totalRotation + }); + this.#setDimensions(); + this.reset(); + } + destroy() { + this.reset(); + this.pdfPage?.cleanup(); + } + hasEditableAnnotations() { + return !!this.annotationLayer?.hasEditableAnnotations(); + } + get _textHighlighter() { + return shadow(this, "_textHighlighter", new TextHighlighter({ + pageIndex: this.id - 1, + eventBus: this.eventBus, + findController: this.#layerProperties.findController + })); + } + #dispatchLayerRendered(name, error) { + this.eventBus.dispatch(name, { + source: this, + pageNumber: this.id, + error + }); + } + async #renderAnnotationLayer() { + let error = null; + try { + await this.annotationLayer.render({ + viewport: this.viewport, + intent: "display", + structTreeLayer: this.structTreeLayer + }); + } catch (ex) { + console.error("#renderAnnotationLayer:", ex); + error = ex; + } finally { + this.#dispatchLayerRendered("annotationlayerrendered", error); + } + } + async #renderAnnotationEditorLayer() { + let error = null; + try { + await this.annotationEditorLayer.render({ + viewport: this.viewport, + intent: "display" + }); + } catch (ex) { + console.error("#renderAnnotationEditorLayer:", ex); + error = ex; + } finally { + this.#dispatchLayerRendered("annotationeditorlayerrendered", error); + } + } + async #renderDrawLayer() { + try { + await this.drawLayer.render({ + intent: "display" + }); + } catch (ex) { + console.error("#renderDrawLayer:", ex); + } + } + async #renderXfaLayer() { + let error = null; + try { + const result = await this.xfaLayer.render({ + viewport: this.viewport, + intent: "display" + }); + if (result?.textDivs && this._textHighlighter) { + this.#buildXfaTextContentItems(result.textDivs); + } + } catch (ex) { + console.error("#renderXfaLayer:", ex); + error = ex; + } finally { + if (this.xfaLayer?.div) { + this.l10n.pause(); + this.#addLayer(this.xfaLayer.div, "xfaLayer"); + this.l10n.resume(); + } + this.#dispatchLayerRendered("xfalayerrendered", error); + } + } + async #renderTextLayer() { + if (!this.textLayer) { + return; + } + let error = null; + try { + await this.textLayer.render({ + viewport: this.viewport + }); + } catch (ex) { + if (ex instanceof AbortException) { + return; + } + console.error("#renderTextLayer:", ex); + error = ex; + } + this.#dispatchLayerRendered("textlayerrendered", error); + this.#renderStructTreeLayer(); + } + async #renderStructTreeLayer() { + if (!this.textLayer) { + return; + } + const treeDom = await this.structTreeLayer?.render(); + if (treeDom) { + this.l10n.pause(); + this.structTreeLayer?.addElementsToTextLayer(); + if (this.canvas && treeDom.parentNode !== this.canvas) { + this.canvas.append(treeDom); + } + this.l10n.resume(); + } + this.structTreeLayer?.show(); + } + async #buildXfaTextContentItems(textDivs) { + const text = await this.pdfPage.getTextContent(); + const items = []; + for (const item of text.items) { + items.push(item.str); + } + this._textHighlighter.setTextMapping(textDivs, items); + this._textHighlighter.enable(); + } + async #injectLinkAnnotations(textLayerPromise) { + let error = null; + try { + await textLayerPromise; + if (!this.annotationLayer) { + return; + } + await this.annotationLayer.injectLinkAnnotations(Autolinker.processLinks(this)); + } catch (ex) { + console.error("#injectLinkAnnotations:", ex); + error = ex; + } + } + _resetCanvas() { + super._resetCanvas(); + this.#originalViewport = null; + } + reset({ + keepAnnotationLayer = false, + keepAnnotationEditorLayer = false, + keepXfaLayer = false, + keepTextLayer = false, + keepCanvasWrapper = false, + preserveDetailViewState = false + } = {}) { + const keepPdfBugGroups = this.pdfPage?._pdfBug ?? false; + this.cancelRendering({ + keepAnnotationLayer, + keepAnnotationEditorLayer, + keepXfaLayer, + keepTextLayer + }); + this.renderingState = RenderingStates.INITIAL; + const div = this.div; + const childNodes = div.childNodes, + annotationLayerNode = keepAnnotationLayer && this.annotationLayer?.div || null, + annotationEditorLayerNode = keepAnnotationEditorLayer && this.annotationEditorLayer?.div || null, + xfaLayerNode = keepXfaLayer && this.xfaLayer?.div || null, + textLayerNode = keepTextLayer && this.textLayer?.div || null, + canvasWrapperNode = keepCanvasWrapper && this.#canvasWrapper || null; + for (let i = childNodes.length - 1; i >= 0; i--) { + const node = childNodes[i]; + switch (node) { + case annotationLayerNode: + case annotationEditorLayerNode: + case xfaLayerNode: + case textLayerNode: + case canvasWrapperNode: + continue; + } + if (keepPdfBugGroups && node.classList.contains("pdfBugGroupsLayer")) { + continue; + } + node.remove(); + const layerIndex = this.#layers.indexOf(node); + if (layerIndex >= 0) { + this.#layers[layerIndex] = null; + } + } + div.removeAttribute("data-loaded"); + if (annotationLayerNode) { + this.annotationLayer.hide(); + } + if (annotationEditorLayerNode) { + this.annotationEditorLayer.hide(); + } + if (xfaLayerNode) { + this.xfaLayer.hide(); + } + if (textLayerNode) { + this.textLayer.hide(); + } + this.structTreeLayer?.hide(); + if (!keepCanvasWrapper && this.#canvasWrapper) { + this.#canvasWrapper = null; + this._resetCanvas(); + } + if (!preserveDetailViewState) { + this.detailView?.reset({ + keepCanvas: keepCanvasWrapper + }); + if (!keepCanvasWrapper) { + this.detailView = null; + } + } + } + toggleEditingMode(isEditing) { + this.#isEditing = isEditing; + if (!this.hasEditableAnnotations()) { + return; + } + this.reset({ + keepAnnotationLayer: true, + keepAnnotationEditorLayer: true, + keepXfaLayer: true, + keepTextLayer: true, + keepCanvasWrapper: true + }); + } + updateVisibleArea(visibleArea) { + if (this.enableDetailCanvas) { + if (this.#needsRestrictedScaling && this.maxCanvasPixels > 0 && visibleArea) { + this.detailView ??= new PDFPageDetailView({ + pageView: this, + enableOptimizedPartialRendering: this.enableOptimizedPartialRendering + }); + this.detailView.update({ + visibleArea + }); + } else if (this.detailView) { + this.detailView.reset(); + this.detailView = null; + } + } + } + update({ + scale = 0, + rotation = null, + optionalContentConfigPromise = null, + drawingDelay = -1 + }) { + this.scale = scale || this.scale; + if (typeof rotation === "number") { + this.rotation = rotation; + } + if (optionalContentConfigPromise instanceof Promise) { + this._optionalContentConfigPromise = optionalContentConfigPromise; + optionalContentConfigPromise.then(optionalContentConfig => { + if (optionalContentConfigPromise !== this._optionalContentConfigPromise) { + return; + } + this.#useThumbnailCanvas.initialOptionalContent = optionalContentConfig.hasInitialVisibility; + }); + } + this.#useThumbnailCanvas.directDrawing = true; + const totalRotation = (this.rotation + this.pdfPageRotate) % 360; + this.viewport = this.viewport.clone({ + scale: this.scale * PixelsPerInch.PDF_TO_CSS_UNITS, + rotation: totalRotation + }); + this.#setDimensions(); + if (this._isStandalone) { + this._container?.style.setProperty("--scale-factor", this.viewport.scale); + } + this.#computeScale(); + if (this.canvas) { + const onlyCssZoom = this.#hasRestrictedScaling && this.#needsRestrictedScaling; + const postponeDrawing = drawingDelay >= 0 && drawingDelay < 1000; + if (postponeDrawing || onlyCssZoom) { + if (postponeDrawing && !onlyCssZoom && this.renderingState !== RenderingStates.FINISHED) { + this.cancelRendering({ + keepAnnotationLayer: true, + keepAnnotationEditorLayer: true, + keepXfaLayer: true, + keepTextLayer: true, + cancelExtraDelay: drawingDelay + }); + this.renderingState = RenderingStates.FINISHED; + this.#useThumbnailCanvas.directDrawing = false; + } + this.cssTransform({ + redrawAnnotationLayer: true, + redrawAnnotationEditorLayer: true, + redrawXfaLayer: true, + redrawTextLayer: !postponeDrawing, + hideTextLayer: postponeDrawing + }); + if (!postponeDrawing) { + this.detailView?.update({ + underlyingViewUpdated: true + }); + this.dispatchPageRendered(true, false); + } + return; + } + } + this.cssTransform({}); + this.reset({ + keepAnnotationLayer: true, + keepAnnotationEditorLayer: true, + keepXfaLayer: true, + keepTextLayer: true, + keepCanvasWrapper: true, + preserveDetailViewState: true + }); + this.detailView?.update({ + underlyingViewUpdated: true + }); + } + #computeScale() { + const { + width, + height + } = this.viewport; + const outputScale = this.outputScale = new OutputScale(); + if (this.maxCanvasPixels === 0) { + const invScale = 1 / this.scale; + outputScale.sx *= invScale; + outputScale.sy *= invScale; + this.#needsRestrictedScaling = true; + } else { + this.#needsRestrictedScaling = outputScale.limitCanvas(width, height, this.maxCanvasPixels, this.maxCanvasDim, this.capCanvasAreaFactor); + if (this.#needsRestrictedScaling && this.enableDetailCanvas) { + const factor = this.enableOptimizedPartialRendering ? 4 : 2; + outputScale.sx /= factor; + outputScale.sy /= factor; + } + } + } + cancelRendering({ + keepAnnotationLayer = false, + keepAnnotationEditorLayer = false, + keepXfaLayer = false, + keepTextLayer = false, + cancelExtraDelay = 0 + } = {}) { + super.cancelRendering({ + cancelExtraDelay + }); + if (this.textLayer && (!keepTextLayer || !this.textLayer.div)) { + this.textLayer.cancel(); + this.textLayer = null; + } + if (this.annotationLayer && (!keepAnnotationLayer || !this.annotationLayer.div)) { + this.annotationLayer.cancel(); + this.annotationLayer = null; + this._annotationCanvasMap = null; + } + if (this.structTreeLayer && !this.textLayer) { + this.structTreeLayer = null; + } + if (this.annotationEditorLayer && (!keepAnnotationEditorLayer || !this.annotationEditorLayer.div)) { + if (this.drawLayer) { + this.drawLayer.cancel(); + this.drawLayer = null; + } + this.annotationEditorLayer.cancel(); + this.annotationEditorLayer = null; + } + if (this.xfaLayer && (!keepXfaLayer || !this.xfaLayer.div)) { + this.xfaLayer.cancel(); + this.xfaLayer = null; + this._textHighlighter?.disable(); + } + } + cssTransform({ + redrawAnnotationLayer = false, + redrawAnnotationEditorLayer = false, + redrawXfaLayer = false, + redrawTextLayer = false, + hideTextLayer = false + }) { + const { + canvas + } = this; + if (!canvas) { + return; + } + const originalViewport = this.#originalViewport; + if (this.viewport !== originalViewport) { + const relativeRotation = (360 + this.viewport.rotation - originalViewport.rotation) % 360; + if (relativeRotation === 90 || relativeRotation === 270) { + const { + width, + height + } = this.viewport; + const scaleX = height / width; + const scaleY = width / height; + canvas.style.transform = `rotate(${relativeRotation}deg) scale(${scaleX},${scaleY})`; + } else { + canvas.style.transform = relativeRotation === 0 ? "" : `rotate(${relativeRotation}deg)`; + } + } + if (redrawAnnotationLayer && this.annotationLayer) { + this.#renderAnnotationLayer(); + } + if (redrawAnnotationEditorLayer && this.annotationEditorLayer) { + if (this.drawLayer) { + this.#renderDrawLayer(); + } + this.#renderAnnotationEditorLayer(); + } + if (redrawXfaLayer && this.xfaLayer) { + this.#renderXfaLayer(); + } + if (this.textLayer) { + if (hideTextLayer) { + this.textLayer.hide(); + this.structTreeLayer?.hide(); + } else if (redrawTextLayer) { + this.#renderTextLayer(); + } + } + } + get width() { + return this.viewport.width; + } + get height() { + return this.viewport.height; + } + getPagePoint(x, y) { + return this.viewport.convertToPdfPoint(x, y); + } + _ensureCanvasWrapper() { + let canvasWrapper = this.#canvasWrapper; + if (!canvasWrapper) { + canvasWrapper = this.#canvasWrapper = document.createElement("div"); + canvasWrapper.classList.add("canvasWrapper"); + this.#addLayer(canvasWrapper, "canvasWrapper"); + } + return canvasWrapper; + } + _getRenderingContext(canvas, transform, recordOperations) { + return { + canvas, + transform, + viewport: this.viewport, + annotationMode: this.#annotationMode, + optionalContentConfigPromise: this._optionalContentConfigPromise, + annotationCanvasMap: this._annotationCanvasMap, + pageColors: this.pageColors, + isEditing: this.#isEditing, + recordOperations + }; + } + async draw() { + if (this.renderingState !== RenderingStates.INITIAL) { + console.error("Must be in new state before drawing"); + this.reset(); + } + const { + div, + l10n, + pdfPage, + viewport + } = this; + if (!pdfPage) { + this.renderingState = RenderingStates.FINISHED; + throw new Error("pdfPage is not loaded"); + } + this.renderingState = RenderingStates.RUNNING; + const canvasWrapper = this._ensureCanvasWrapper(); + if (!this.textLayer && this.#textLayerMode !== TextLayerMode.DISABLE && !pdfPage.isPureXfa) { + this._accessibilityManager ||= new TextAccessibilityManager(); + this.textLayer = new TextLayerBuilder({ + pdfPage, + highlighter: this._textHighlighter, + accessibilityManager: this._accessibilityManager, + enablePermissions: this.#textLayerMode === TextLayerMode.ENABLE_PERMISSIONS, + onAppend: textLayerDiv => { + this.l10n.pause(); + this.#addLayer(textLayerDiv, "textLayer"); + this.l10n.resume(); + } + }); + } + if (!this.annotationLayer && this.#annotationMode !== AnnotationMode.DISABLE) { + const { + annotationStorage, + annotationEditorUIManager, + downloadManager, + enableComment, + enableScripting, + fieldObjectsPromise, + hasJSActionsPromise, + linkService + } = this.#layerProperties; + this._annotationCanvasMap ||= new Map(); + this.annotationLayer = new AnnotationLayerBuilder({ + pdfPage, + annotationStorage, + imageResourcesPath: this.imageResourcesPath, + renderForms: this.#annotationMode === AnnotationMode.ENABLE_FORMS, + linkService, + downloadManager, + enableComment, + enableScripting, + hasJSActionsPromise, + fieldObjectsPromise, + annotationCanvasMap: this._annotationCanvasMap, + accessibilityManager: this._accessibilityManager, + annotationEditorUIManager, + commentManager: this.#commentManager, + onAppend: annotationLayerDiv => { + this.#addLayer(annotationLayerDiv, "annotationLayer"); + } + }); + } + const { + width, + height + } = viewport; + this.#originalViewport = viewport; + const { + canvas, + prevCanvas + } = this._createCanvas(newCanvas => { + canvasWrapper.prepend(newCanvas); + }); + canvas.setAttribute("role", "presentation"); + if (!this.outputScale) { + this.#computeScale(); + } + const { + outputScale + } = this; + this.#hasRestrictedScaling = this.#needsRestrictedScaling; + const sfx = approximateFraction(outputScale.sx); + const sfy = approximateFraction(outputScale.sy); + const canvasWidth = canvas.width = floorToDivide(calcRound(width * outputScale.sx), sfx[0]); + const canvasHeight = canvas.height = floorToDivide(calcRound(height * outputScale.sy), sfy[0]); + const pageWidth = floorToDivide(calcRound(width), sfx[1]); + const pageHeight = floorToDivide(calcRound(height), sfy[1]); + outputScale.sx = canvasWidth / pageWidth; + outputScale.sy = canvasHeight / pageHeight; + if (this.#scaleRoundX !== sfx[1]) { + div.style.setProperty("--scale-round-x", `${sfx[1]}px`); + this.#scaleRoundX = sfx[1]; + } + if (this.#scaleRoundY !== sfy[1]) { + div.style.setProperty("--scale-round-y", `${sfy[1]}px`); + this.#scaleRoundY = sfy[1]; + } + const recordBBoxes = this.enableOptimizedPartialRendering && this.#hasRestrictedScaling && !this.recordedBBoxes; + const transform = outputScale.scaled ? [outputScale.sx, 0, 0, outputScale.sy, 0, 0] : null; + const resultPromise = this._drawCanvas(this._getRenderingContext(canvas, transform, recordBBoxes), () => { + prevCanvas?.remove(); + this._resetCanvas(); + }, renderTask => { + this.#useThumbnailCanvas.regularAnnotations = !renderTask.separateAnnots; + this.dispatchPageRendered(false, false); + }).then(async () => { + if (this.renderingState !== RenderingStates.FINISHED) { + return; + } + this.structTreeLayer ||= new StructTreeLayerBuilder(pdfPage, viewport.rawDims); + const textLayerPromise = this.#renderTextLayer(); + if (this.annotationLayer) { + await this.#renderAnnotationLayer(); + if (this.#enableAutoLinking && this.annotationLayer && this.textLayer) { + await this.#injectLinkAnnotations(textLayerPromise); + } + } + const { + annotationEditorUIManager + } = this.#layerProperties; + if (!annotationEditorUIManager) { + return; + } + this.drawLayer ||= new DrawLayerBuilder({ + pageIndex: this.id + }); + await this.#renderDrawLayer(); + this.drawLayer.setParent(canvasWrapper); + if (this.annotationLayer || this.#annotationMode === AnnotationMode.DISABLE) { + this.annotationEditorLayer ||= new AnnotationEditorLayerBuilder({ + uiManager: annotationEditorUIManager, + pdfPage, + l10n, + structTreeLayer: this.structTreeLayer, + accessibilityManager: this._accessibilityManager, + annotationLayer: this.annotationLayer?.annotationLayer, + textLayer: this.textLayer, + drawLayer: this.drawLayer.getDrawLayer(), + onAppend: annotationEditorLayerDiv => { + this.#addLayer(annotationEditorLayerDiv, "annotationEditorLayer"); + } + }); + this.#renderAnnotationEditorLayer(); + } + }); + if (pdfPage.isPureXfa) { + if (!this.xfaLayer) { + const { + annotationStorage, + linkService + } = this.#layerProperties; + this.xfaLayer = new XfaLayerBuilder({ + pdfPage, + annotationStorage, + linkService + }); + } + this.#renderXfaLayer(); + } + div.setAttribute("data-loaded", true); + this.dispatchPageRender(); + return resultPromise; + } + setPageLabel(label) { + this.pageLabel = typeof label === "string" ? label : null; + this.div.setAttribute("data-l10n-args", JSON.stringify({ + page: this.pageLabel ?? this.id + })); + if (this.pageLabel !== null) { + this.div.setAttribute("data-page-label", this.pageLabel); + } else { + this.div.removeAttribute("data-page-label"); + } + } + get thumbnailCanvas() { + const { + directDrawing, + initialOptionalContent, + regularAnnotations + } = this.#useThumbnailCanvas; + return directDrawing && initialOptionalContent && regularAnnotations ? this.canvas : null; + } +} + +;// ./web/pdf_viewer.js + + + + + + +const DEFAULT_CACHE_SIZE = 10; +const PagesCountLimit = { + FORCE_SCROLL_MODE_PAGE: 10000, + FORCE_LAZY_PAGE_INIT: 5000, + PAUSE_EAGER_PAGE_INIT: 250 +}; +function isValidAnnotationEditorMode(mode) { + return Object.values(AnnotationEditorType).includes(mode) && mode !== AnnotationEditorType.DISABLE; +} +class PDFPageViewBuffer { + #buf = new Set(); + #size = 0; + constructor(size) { + this.#size = size; + } + push(view) { + const buf = this.#buf; + if (buf.has(view)) { + buf.delete(view); + } + buf.add(view); + if (buf.size > this.#size) { + this.#destroyFirstView(); + } + } + resize(newSize, idsToKeep = null) { + this.#size = newSize; + const buf = this.#buf; + if (idsToKeep) { + const ii = buf.size; + let i = 1; + for (const view of buf) { + if (idsToKeep.has(view.id)) { + buf.delete(view); + buf.add(view); + } + if (++i > ii) { + break; + } + } + } + while (buf.size > this.#size) { + this.#destroyFirstView(); + } + } + has(view) { + return this.#buf.has(view); + } + [Symbol.iterator]() { + return this.#buf.keys(); + } + #destroyFirstView() { + const firstView = this.#buf.keys().next().value; + firstView?.destroy(); + this.#buf.delete(firstView); + } +} +class PDFViewer { + #buffer = null; + #altTextManager = null; + #annotationEditorHighlightColors = null; + #annotationEditorMode = AnnotationEditorType.NONE; + #annotationEditorUIManager = null; + #annotationMode = AnnotationMode.ENABLE_FORMS; + #commentManager = null; + #containerTopLeft = null; + #editorUndoBar = null; + #enableHWA = false; + #enableHighlightFloatingButton = false; + #enablePermissions = false; + #enableUpdatedAddImage = false; + #enableNewAltTextWhenAddingImage = false; + #enableAutoLinking = true; + #eventAbortController = null; + #minDurationToUpdateCanvas = 0; + #mlManager = null; + #printingAllowed = true; + #scrollTimeoutId = null; + #switchAnnotationEditorModeAC = null; + #switchAnnotationEditorModeTimeoutId = null; + #getAllTextInProgress = false; + #hiddenCopyElement = null; + #interruptCopyCondition = false; + #previousContainerHeight = 0; + #resizeObserver = new ResizeObserver(this.#resizeObserverCallback.bind(this)); + #scrollModePageState = null; + #scaleTimeoutId = null; + #signatureManager = null; + #supportsPinchToZoom = true; + #textLayerMode = TextLayerMode.ENABLE; + #viewerAlert = null; + constructor(options) { + const viewerVersion = "5.4.394"; + if (version !== viewerVersion) { + throw new Error(`The API version "${version}" does not match the Viewer version "${viewerVersion}".`); + } + this.container = options.container; + this.viewer = options.viewer || options.container.firstElementChild; + this.#viewerAlert = options.viewerAlert || null; + if (this.container?.tagName !== "DIV" || this.viewer?.tagName !== "DIV") { + throw new Error("Invalid `container` and/or `viewer` option."); + } + if (this.container.offsetParent && getComputedStyle(this.container).position !== "absolute") { + throw new Error("The `container` must be absolutely positioned."); + } + this.#resizeObserver.observe(this.container); + this.eventBus = options.eventBus; + this.linkService = options.linkService || new SimpleLinkService(); + this.downloadManager = options.downloadManager || null; + this.findController = options.findController || null; + this.#altTextManager = options.altTextManager || null; + this.#commentManager = options.commentManager || null; + this.#signatureManager = options.signatureManager || null; + this.#editorUndoBar = options.editorUndoBar || null; + if (this.findController) { + this.findController.onIsPageVisible = pageNumber => this._getVisiblePages().ids.has(pageNumber); + } + this._scriptingManager = options.scriptingManager || null; + this.#textLayerMode = options.textLayerMode ?? TextLayerMode.ENABLE; + this.#annotationMode = options.annotationMode ?? AnnotationMode.ENABLE_FORMS; + this.#annotationEditorMode = options.annotationEditorMode ?? AnnotationEditorType.NONE; + this.#annotationEditorHighlightColors = options.annotationEditorHighlightColors || null; + this.#enableHighlightFloatingButton = options.enableHighlightFloatingButton === true; + this.#enableUpdatedAddImage = options.enableUpdatedAddImage === true; + this.#enableNewAltTextWhenAddingImage = options.enableNewAltTextWhenAddingImage === true; + this.imageResourcesPath = options.imageResourcesPath || ""; + this.enablePrintAutoRotate = options.enablePrintAutoRotate || false; + this.removePageBorders = options.removePageBorders || false; + this.maxCanvasPixels = options.maxCanvasPixels; + this.maxCanvasDim = options.maxCanvasDim; + this.capCanvasAreaFactor = options.capCanvasAreaFactor; + this.enableDetailCanvas = options.enableDetailCanvas ?? true; + this.enableOptimizedPartialRendering = options.enableOptimizedPartialRendering ?? false; + this.l10n = options.l10n; + this.l10n ||= new genericl10n_GenericL10n(); + this.#enablePermissions = options.enablePermissions || false; + this.pageColors = options.pageColors || null; + this.#mlManager = options.mlManager || null; + this.#enableHWA = options.enableHWA || false; + this.#supportsPinchToZoom = options.supportsPinchToZoom !== false; + this.#enableAutoLinking = options.enableAutoLinking !== false; + this.#minDurationToUpdateCanvas = options.minDurationToUpdateCanvas ?? 500; + this.defaultRenderingQueue = !options.renderingQueue; + if (this.defaultRenderingQueue) { + this.renderingQueue = new PDFRenderingQueue(); + this.renderingQueue.setViewer(this); + } else { + this.renderingQueue = options.renderingQueue; + } + const { + abortSignal + } = options; + abortSignal?.addEventListener("abort", () => { + this.#resizeObserver.disconnect(); + this.#resizeObserver = null; + }, { + once: true + }); + this.scroll = watchScroll(this.container, this._scrollUpdate.bind(this), abortSignal); + this.presentationModeState = PresentationModeState.UNKNOWN; + this._resetView(); + if (this.removePageBorders) { + this.viewer.classList.add("removePageBorders"); + } + this.#updateContainerHeightCss(); + this.eventBus._on("thumbnailrendered", ({ + pageNumber, + pdfPage + }) => { + const pageView = this._pages[pageNumber - 1]; + if (!this.#buffer.has(pageView)) { + pdfPage?.cleanup(); + } + }); + if (!options.l10n) { + this.l10n.translate(this.container); + } + } + get printingAllowed() { + return this.#printingAllowed; + } + get pagesCount() { + return this._pages.length; + } + getPageView(index) { + return this._pages[index]; + } + getCachedPageViews() { + return new Set(this.#buffer); + } + get pageViewsReady() { + return this._pages.every(pageView => pageView?.pdfPage); + } + get renderForms() { + return this.#annotationMode === AnnotationMode.ENABLE_FORMS; + } + get enableScripting() { + return !!this._scriptingManager; + } + get currentPageNumber() { + return this._currentPageNumber; + } + set currentPageNumber(val) { + if (!Number.isInteger(val)) { + throw new Error("Invalid page number."); + } + if (!this.pdfDocument) { + return; + } + if (!this._setCurrentPageNumber(val, true)) { + console.error(`currentPageNumber: "${val}" is not a valid page.`); + } + } + _setCurrentPageNumber(val, resetCurrentPageView = false) { + if (this._currentPageNumber === val) { + if (resetCurrentPageView) { + this.#resetCurrentPageView(); + } + return true; + } + if (!(0 < val && val <= this.pagesCount)) { + return false; + } + const previous = this._currentPageNumber; + this._currentPageNumber = val; + this.eventBus.dispatch("pagechanging", { + source: this, + pageNumber: val, + pageLabel: this._pageLabels?.[val - 1] ?? null, + previous + }); + if (resetCurrentPageView) { + this.#resetCurrentPageView(); + } + return true; + } + get currentPageLabel() { + return this._pageLabels?.[this._currentPageNumber - 1] ?? null; + } + set currentPageLabel(val) { + if (!this.pdfDocument) { + return; + } + let page = val | 0; + if (this._pageLabels) { + const i = this._pageLabels.indexOf(val); + if (i >= 0) { + page = i + 1; + } + } + if (!this._setCurrentPageNumber(page, true)) { + console.error(`currentPageLabel: "${val}" is not a valid page.`); + } + } + get currentScale() { + return this._currentScale !== UNKNOWN_SCALE ? this._currentScale : DEFAULT_SCALE; + } + set currentScale(val) { + if (isNaN(val)) { + throw new Error("Invalid numeric scale."); + } + if (!this.pdfDocument) { + return; + } + this.#setScale(val, { + noScroll: false + }); + } + get currentScaleValue() { + return this._currentScaleValue; + } + set currentScaleValue(val) { + if (!this.pdfDocument) { + return; + } + this.#setScale(val, { + noScroll: false + }); + } + get pagesRotation() { + return this._pagesRotation; + } + set pagesRotation(rotation) { + if (!isValidRotation(rotation)) { + throw new Error("Invalid pages rotation angle."); + } + if (!this.pdfDocument) { + return; + } + rotation %= 360; + if (rotation < 0) { + rotation += 360; + } + if (this._pagesRotation === rotation) { + return; + } + this._pagesRotation = rotation; + const pageNumber = this._currentPageNumber; + this.refresh(true, { + rotation + }); + if (this._currentScaleValue) { + this.#setScale(this._currentScaleValue, { + noScroll: true + }); + } + this.eventBus.dispatch("rotationchanging", { + source: this, + pagesRotation: rotation, + pageNumber + }); + if (this.defaultRenderingQueue) { + this.update(); + } + } + get firstPagePromise() { + return this.pdfDocument ? this._firstPageCapability.promise : null; + } + get onePageRendered() { + return this.pdfDocument ? this._onePageRenderedCapability.promise : null; + } + get pagesPromise() { + return this.pdfDocument ? this._pagesCapability.promise : null; + } + get _layerProperties() { + const self = this; + return shadow(this, "_layerProperties", { + get annotationEditorUIManager() { + return self.#annotationEditorUIManager; + }, + get annotationStorage() { + return self.pdfDocument?.annotationStorage; + }, + get downloadManager() { + return self.downloadManager; + }, + get enableComment() { + return !!self.#commentManager; + }, + get enableScripting() { + return !!self._scriptingManager; + }, + get fieldObjectsPromise() { + return self.pdfDocument?.getFieldObjects(); + }, + get findController() { + return self.findController; + }, + get hasJSActionsPromise() { + return self.pdfDocument?.hasJSActions(); + }, + get linkService() { + return self.linkService; + } + }); + } + #initializePermissions(permissions) { + const params = { + annotationEditorMode: this.#annotationEditorMode, + annotationMode: this.#annotationMode, + textLayerMode: this.#textLayerMode + }; + if (!permissions) { + this.#printingAllowed = true; + this.eventBus.dispatch("printingallowed", { + source: this, + isAllowed: this.#printingAllowed + }); + return params; + } + this.#printingAllowed = permissions.includes(PermissionFlag.PRINT_HIGH_QUALITY) || permissions.includes(PermissionFlag.PRINT); + this.eventBus.dispatch("printingallowed", { + source: this, + isAllowed: this.#printingAllowed + }); + if (!permissions.includes(PermissionFlag.COPY) && this.#textLayerMode === TextLayerMode.ENABLE) { + params.textLayerMode = TextLayerMode.ENABLE_PERMISSIONS; + } + if (!permissions.includes(PermissionFlag.MODIFY_CONTENTS)) { + params.annotationEditorMode = AnnotationEditorType.DISABLE; + } + if (!permissions.includes(PermissionFlag.MODIFY_ANNOTATIONS) && !permissions.includes(PermissionFlag.FILL_INTERACTIVE_FORMS) && this.#annotationMode === AnnotationMode.ENABLE_FORMS) { + params.annotationMode = AnnotationMode.ENABLE; + } + return params; + } + async #onePageRenderedOrForceFetch(signal) { + if (document.visibilityState === "hidden" || !this.container.offsetParent || this._getVisiblePages().views.length === 0) { + return; + } + const hiddenCapability = Promise.withResolvers(), + ac = new AbortController(); + document.addEventListener("visibilitychange", () => { + if (document.visibilityState === "hidden") { + hiddenCapability.resolve(); + } + }, { + signal: AbortSignal.any([signal, ac.signal]) + }); + await Promise.race([this._onePageRenderedCapability.promise, hiddenCapability.promise]); + ac.abort(); + } + async getAllText() { + const texts = []; + const buffer = []; + for (let pageNum = 1, pagesCount = this.pdfDocument.numPages; pageNum <= pagesCount; ++pageNum) { + if (this.#interruptCopyCondition) { + return null; + } + buffer.length = 0; + const page = await this.pdfDocument.getPage(pageNum); + const { + items + } = await page.getTextContent(); + for (const item of items) { + if (item.str) { + buffer.push(item.str); + } + if (item.hasEOL) { + buffer.push("\n"); + } + } + texts.push(removeNullCharacters(buffer.join(""))); + } + return texts.join("\n"); + } + #copyCallback(textLayerMode, event) { + const selection = document.getSelection(); + const { + focusNode, + anchorNode + } = selection; + if (anchorNode && focusNode && selection.containsNode(this.#hiddenCopyElement)) { + if (this.#getAllTextInProgress || textLayerMode === TextLayerMode.ENABLE_PERMISSIONS) { + stopEvent(event); + return; + } + this.#getAllTextInProgress = true; + const { + classList + } = this.viewer; + classList.add("copyAll"); + const ac = new AbortController(); + window.addEventListener("keydown", ev => this.#interruptCopyCondition = ev.key === "Escape", { + signal: ac.signal + }); + this.getAllText().then(async text => { + if (text !== null) { + await navigator.clipboard.writeText(text); + } + }).catch(reason => { + console.warn(`Something goes wrong when extracting the text: ${reason.message}`); + }).finally(() => { + this.#getAllTextInProgress = false; + this.#interruptCopyCondition = false; + ac.abort(); + classList.remove("copyAll"); + }); + stopEvent(event); + } + } + setDocument(pdfDocument) { + if (this.pdfDocument) { + this.eventBus.dispatch("pagesdestroy", { + source: this + }); + this._cancelRendering(); + this._resetView(); + this.findController?.setDocument(null); + this._scriptingManager?.setDocument(null); + this.#annotationEditorUIManager?.destroy(); + this.#annotationEditorUIManager = null; + this.#annotationEditorMode = AnnotationEditorType.NONE; + this.#printingAllowed = true; + } + this.pdfDocument = pdfDocument; + if (!pdfDocument) { + return; + } + const pagesCount = pdfDocument.numPages; + const firstPagePromise = pdfDocument.getPage(1); + const optionalContentConfigPromise = pdfDocument.getOptionalContentConfig({ + intent: "display" + }); + const permissionsPromise = this.#enablePermissions ? pdfDocument.getPermissions() : Promise.resolve(); + const { + eventBus, + pageColors, + viewer + } = this; + this.#eventAbortController = new AbortController(); + const { + signal + } = this.#eventAbortController; + if (pagesCount > PagesCountLimit.FORCE_SCROLL_MODE_PAGE) { + console.warn("Forcing PAGE-scrolling for performance reasons, given the length of the document."); + const mode = this._scrollMode = ScrollMode.PAGE; + eventBus.dispatch("scrollmodechanged", { + source: this, + mode + }); + } + this._pagesCapability.promise.then(() => { + eventBus.dispatch("pagesloaded", { + source: this, + pagesCount + }); + }, () => {}); + const onBeforeDraw = evt => { + const pageView = this._pages[evt.pageNumber - 1]; + if (!pageView) { + return; + } + this.#buffer.push(pageView); + }; + eventBus._on("pagerender", onBeforeDraw, { + signal + }); + const onAfterDraw = evt => { + if (evt.cssTransform || evt.isDetailView) { + return; + } + this._onePageRenderedCapability.resolve({ + timestamp: evt.timestamp + }); + eventBus._off("pagerendered", onAfterDraw); + }; + eventBus._on("pagerendered", onAfterDraw, { + signal + }); + Promise.all([firstPagePromise, permissionsPromise]).then(([firstPdfPage, permissions]) => { + if (pdfDocument !== this.pdfDocument) { + return; + } + this._firstPageCapability.resolve(firstPdfPage); + this._optionalContentConfigPromise = optionalContentConfigPromise; + const { + annotationEditorMode, + annotationMode, + textLayerMode + } = this.#initializePermissions(permissions); + if (textLayerMode !== TextLayerMode.DISABLE) { + const element = this.#hiddenCopyElement = document.createElement("div"); + element.id = "hiddenCopyElement"; + viewer.before(element); + } + if (annotationEditorMode !== AnnotationEditorType.DISABLE) { + const mode = annotationEditorMode; + if (pdfDocument.isPureXfa) { + console.warn("Warning: XFA-editing is not implemented."); + } else if (isValidAnnotationEditorMode(mode)) { + this.#annotationEditorUIManager = new AnnotationEditorUIManager(this.container, viewer, this.#viewerAlert, this.#altTextManager, this.#commentManager, this.#signatureManager, eventBus, pdfDocument, pageColors, this.#annotationEditorHighlightColors, this.#enableHighlightFloatingButton, this.#enableUpdatedAddImage, this.#enableNewAltTextWhenAddingImage, this.#mlManager, this.#editorUndoBar, this.#supportsPinchToZoom); + eventBus.dispatch("annotationeditoruimanager", { + source: this, + uiManager: this.#annotationEditorUIManager + }); + if (mode !== AnnotationEditorType.NONE) { + this.#preloadEditingData(mode); + this.#annotationEditorUIManager.updateMode(mode); + } + } else { + console.error(`Invalid AnnotationEditor mode: ${mode}`); + } + } + const viewerElement = this._scrollMode === ScrollMode.PAGE ? null : viewer; + const scale = this.currentScale; + const viewport = firstPdfPage.getViewport({ + scale: scale * PixelsPerInch.PDF_TO_CSS_UNITS + }); + viewer.style.setProperty("--scale-factor", viewport.scale); + if (pageColors?.background) { + viewer.style.setProperty("--page-bg-color", pageColors.background); + } + if (pageColors?.foreground === "CanvasText" || pageColors?.background === "Canvas") { + viewer.style.setProperty("--hcm-highlight-filter", pdfDocument.filterFactory.addHighlightHCMFilter("highlight", "CanvasText", "Canvas", "HighlightText", "Highlight")); + viewer.style.setProperty("--hcm-highlight-selected-filter", pdfDocument.filterFactory.addHighlightHCMFilter("highlight_selected", "CanvasText", "Canvas", "HighlightText", "ButtonText")); + } + for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) { + const pageView = new PDFPageView({ + container: viewerElement, + eventBus, + id: pageNum, + scale, + defaultViewport: viewport.clone(), + optionalContentConfigPromise, + renderingQueue: this.renderingQueue, + textLayerMode, + annotationMode, + imageResourcesPath: this.imageResourcesPath, + maxCanvasPixels: this.maxCanvasPixels, + maxCanvasDim: this.maxCanvasDim, + capCanvasAreaFactor: this.capCanvasAreaFactor, + enableDetailCanvas: this.enableDetailCanvas, + enableOptimizedPartialRendering: this.enableOptimizedPartialRendering, + pageColors, + l10n: this.l10n, + layerProperties: this._layerProperties, + enableHWA: this.#enableHWA, + enableAutoLinking: this.#enableAutoLinking, + minDurationToUpdateCanvas: this.#minDurationToUpdateCanvas, + commentManager: this.#commentManager + }); + this._pages.push(pageView); + } + this._pages[0]?.setPdfPage(firstPdfPage); + if (this._scrollMode === ScrollMode.PAGE) { + this.#ensurePageViewVisible(); + } else if (this._spreadMode !== SpreadMode.NONE) { + this._updateSpreadMode(); + } + eventBus._on("annotationeditorlayerrendered", evt => { + if (this.#annotationEditorUIManager) { + eventBus.dispatch("annotationeditormodechanged", { + source: this, + mode: this.#annotationEditorMode + }); + } + }, { + once: true, + signal + }); + this.#onePageRenderedOrForceFetch(signal).then(async () => { + if (pdfDocument !== this.pdfDocument) { + return; + } + this.findController?.setDocument(pdfDocument); + this._scriptingManager?.setDocument(pdfDocument); + if (this.#hiddenCopyElement) { + document.addEventListener("copy", this.#copyCallback.bind(this, textLayerMode), { + signal + }); + } + if (pdfDocument.loadingParams.disableAutoFetch || pagesCount > PagesCountLimit.FORCE_LAZY_PAGE_INIT) { + this._pagesCapability.resolve(); + return; + } + let getPagesLeft = pagesCount - 1; + if (getPagesLeft <= 0) { + this._pagesCapability.resolve(); + return; + } + for (let pageNum = 2; pageNum <= pagesCount; ++pageNum) { + const promise = pdfDocument.getPage(pageNum).then(pdfPage => { + const pageView = this._pages[pageNum - 1]; + if (!pageView.pdfPage) { + pageView.setPdfPage(pdfPage); + } + if (--getPagesLeft === 0) { + this._pagesCapability.resolve(); + } + }, reason => { + console.error(`Unable to get page ${pageNum} to initialize viewer`, reason); + if (--getPagesLeft === 0) { + this._pagesCapability.resolve(); + } + }); + if (pageNum % PagesCountLimit.PAUSE_EAGER_PAGE_INIT === 0) { + await promise; + } + } + }); + eventBus.dispatch("pagesinit", { + source: this + }); + pdfDocument.getMetadata().then(({ + info + }) => { + if (pdfDocument !== this.pdfDocument) { + return; + } + if (info.Language) { + viewer.lang = info.Language; + } + }); + if (this.defaultRenderingQueue) { + this.update(); + } + }).catch(reason => { + console.error("Unable to initialize viewer", reason); + this._pagesCapability.reject(reason); + }); + } + setPageLabels(labels) { + if (!this.pdfDocument) { + return; + } + if (!labels) { + this._pageLabels = null; + } else if (!(Array.isArray(labels) && this.pdfDocument.numPages === labels.length)) { + this._pageLabels = null; + console.error(`setPageLabels: Invalid page labels.`); + } else { + this._pageLabels = labels; + } + for (let i = 0, ii = this._pages.length; i < ii; i++) { + this._pages[i].setPageLabel(this._pageLabels?.[i] ?? null); + } + } + _resetView() { + this._pages = []; + this._currentPageNumber = 1; + this._currentScale = UNKNOWN_SCALE; + this._currentScaleValue = null; + this._pageLabels = null; + this.#buffer = new PDFPageViewBuffer(DEFAULT_CACHE_SIZE); + this._location = null; + this._pagesRotation = 0; + this._optionalContentConfigPromise = null; + this._firstPageCapability = Promise.withResolvers(); + this._onePageRenderedCapability = Promise.withResolvers(); + this._pagesCapability = Promise.withResolvers(); + this._scrollMode = ScrollMode.VERTICAL; + this._previousScrollMode = ScrollMode.UNKNOWN; + this._spreadMode = SpreadMode.NONE; + this.#scrollModePageState = { + previousPageNumber: 1, + scrollDown: true, + pages: [] + }; + this.#eventAbortController?.abort(); + this.#eventAbortController = null; + this.viewer.textContent = ""; + this._updateScrollMode(); + this.viewer.removeAttribute("lang"); + this.#hiddenCopyElement?.remove(); + this.#hiddenCopyElement = null; + this.#cleanupTimeouts(); + this.#cleanupSwitchAnnotationEditorMode(); + } + #ensurePageViewVisible() { + if (this._scrollMode !== ScrollMode.PAGE) { + throw new Error("#ensurePageViewVisible: Invalid scrollMode value."); + } + const pageNumber = this._currentPageNumber, + state = this.#scrollModePageState, + viewer = this.viewer; + viewer.textContent = ""; + state.pages.length = 0; + if (this._spreadMode === SpreadMode.NONE && !this.isInPresentationMode) { + const pageView = this._pages[pageNumber - 1]; + viewer.append(pageView.div); + state.pages.push(pageView); + } else { + const pageIndexSet = new Set(), + parity = this._spreadMode - 1; + if (parity === -1) { + pageIndexSet.add(pageNumber - 1); + } else if (pageNumber % 2 !== parity) { + pageIndexSet.add(pageNumber - 1); + pageIndexSet.add(pageNumber); + } else { + pageIndexSet.add(pageNumber - 2); + pageIndexSet.add(pageNumber - 1); + } + const spread = document.createElement("div"); + spread.className = "spread"; + if (this.isInPresentationMode) { + const dummyPage = document.createElement("div"); + dummyPage.className = "dummyPage"; + spread.append(dummyPage); + } + for (const i of pageIndexSet) { + const pageView = this._pages[i]; + if (!pageView) { + continue; + } + spread.append(pageView.div); + state.pages.push(pageView); + } + viewer.append(spread); + } + state.scrollDown = pageNumber >= state.previousPageNumber; + state.previousPageNumber = pageNumber; + } + _scrollUpdate() { + if (this.pagesCount === 0) { + return; + } + if (this.#scrollTimeoutId) { + clearTimeout(this.#scrollTimeoutId); + } + this.#scrollTimeoutId = setTimeout(() => { + this.#scrollTimeoutId = null; + this.update(); + }, 100); + this.update(); + } + #scrollIntoView(pageView, pageSpot = null) { + const { + div, + id + } = pageView; + if (this._currentPageNumber !== id) { + this._setCurrentPageNumber(id); + } + if (this._scrollMode === ScrollMode.PAGE) { + this.#ensurePageViewVisible(); + this.update(); + } + if (!pageSpot && !this.isInPresentationMode) { + const left = div.offsetLeft + div.clientLeft, + right = left + div.clientWidth; + const { + scrollLeft, + clientWidth + } = this.container; + if (this._scrollMode === ScrollMode.HORIZONTAL || left < scrollLeft || right > scrollLeft + clientWidth) { + pageSpot = { + left: 0, + top: 0 + }; + } + } + scrollIntoView(div, pageSpot); + if (!this._currentScaleValue && this._location) { + this._location = null; + } + } + #isSameScale(newScale) { + return newScale === this._currentScale || Math.abs(newScale - this._currentScale) < 1e-15; + } + #setScaleUpdatePages(newScale, newValue, { + noScroll = false, + preset = false, + drawingDelay = -1, + origin = null + }) { + this._currentScaleValue = newValue.toString(); + if (this.#isSameScale(newScale)) { + if (preset) { + this.eventBus.dispatch("scalechanging", { + source: this, + scale: newScale, + presetValue: newValue + }); + } + return; + } + this.viewer.style.setProperty("--scale-factor", newScale * PixelsPerInch.PDF_TO_CSS_UNITS); + const postponeDrawing = drawingDelay >= 0 && drawingDelay < 1000; + this.refresh(true, { + scale: newScale, + drawingDelay: postponeDrawing ? drawingDelay : -1 + }); + if (postponeDrawing) { + this.#scaleTimeoutId = setTimeout(() => { + this.#scaleTimeoutId = null; + this.refresh(); + }, drawingDelay); + } + const previousScale = this._currentScale; + this._currentScale = newScale; + if (!noScroll) { + let page = this._currentPageNumber, + dest; + if (this._location && !(this.isInPresentationMode || this.isChangingPresentationMode)) { + page = this._location.pageNumber; + dest = [null, { + name: "XYZ" + }, this._location.left, this._location.top, null]; + } + this.scrollPageIntoView({ + pageNumber: page, + destArray: dest, + allowNegativeOffset: true + }); + if (Array.isArray(origin)) { + const scaleDiff = newScale / previousScale - 1; + const [top, left] = this.containerTopLeft; + this.container.scrollLeft += (origin[0] - left) * scaleDiff; + this.container.scrollTop += (origin[1] - top) * scaleDiff; + } + } + this.eventBus.dispatch("scalechanging", { + source: this, + scale: newScale, + presetValue: preset ? newValue : undefined + }); + if (this.defaultRenderingQueue) { + this.update(); + } + } + get #pageWidthScaleFactor() { + if (this._spreadMode !== SpreadMode.NONE && this._scrollMode !== ScrollMode.HORIZONTAL) { + return 2; + } + return 1; + } + #setScale(value, options) { + let scale = parseFloat(value); + if (scale > 0) { + options.preset = false; + this.#setScaleUpdatePages(scale, value, options); + } else { + const currentPage = this._pages[this._currentPageNumber - 1]; + if (!currentPage) { + return; + } + let hPadding = SCROLLBAR_PADDING, + vPadding = VERTICAL_PADDING; + if (this.isInPresentationMode) { + hPadding = vPadding = 4; + if (this._spreadMode !== SpreadMode.NONE) { + hPadding *= 2; + } + } else if (this.removePageBorders) { + hPadding = vPadding = 0; + } else if (this._scrollMode === ScrollMode.HORIZONTAL) { + [hPadding, vPadding] = [vPadding, hPadding]; + } + const pageWidthScale = (this.container.clientWidth - hPadding) / currentPage.width * currentPage.scale / this.#pageWidthScaleFactor; + const pageHeightScale = (this.container.clientHeight - vPadding) / currentPage.height * currentPage.scale; + switch (value) { + case "page-actual": + scale = 1; + break; + case "page-width": + scale = pageWidthScale; + break; + case "page-height": + scale = pageHeightScale; + break; + case "page-fit": + scale = Math.min(pageWidthScale, pageHeightScale); + break; + case "auto": + const horizontalScale = isPortraitOrientation(currentPage) ? pageWidthScale : Math.min(pageHeightScale, pageWidthScale); + scale = Math.min(MAX_AUTO_SCALE, horizontalScale); + break; + default: + console.error(`#setScale: "${value}" is an unknown zoom value.`); + return; + } + options.preset = true; + this.#setScaleUpdatePages(scale, value, options); + } + } + #resetCurrentPageView() { + const pageView = this._pages[this._currentPageNumber - 1]; + if (this.isInPresentationMode) { + this.#setScale(this._currentScaleValue, { + noScroll: true + }); + } + this.#scrollIntoView(pageView); + } + pageLabelToPageNumber(label) { + if (!this._pageLabels) { + return null; + } + const i = this._pageLabels.indexOf(label); + if (i < 0) { + return null; + } + return i + 1; + } + scrollPageIntoView({ + pageNumber, + destArray = null, + allowNegativeOffset = false, + ignoreDestinationZoom = false, + center = null + }) { + if (!this.pdfDocument) { + return; + } + const pageView = Number.isInteger(pageNumber) && this._pages[pageNumber - 1]; + if (!pageView) { + console.error(`scrollPageIntoView: "${pageNumber}" is not a valid pageNumber parameter.`); + return; + } + if (this.isInPresentationMode || !destArray) { + this._setCurrentPageNumber(pageNumber, true); + return; + } + let x = 0, + y = 0; + let width = 0, + height = 0, + widthScale, + heightScale; + const changeOrientation = pageView.rotation % 180 !== 0; + const pageWidth = (changeOrientation ? pageView.height : pageView.width) / pageView.scale / PixelsPerInch.PDF_TO_CSS_UNITS; + const pageHeight = (changeOrientation ? pageView.width : pageView.height) / pageView.scale / PixelsPerInch.PDF_TO_CSS_UNITS; + let scale = 0; + switch (destArray[1].name) { + case "XYZ": + x = destArray[2]; + y = destArray[3]; + scale = destArray[4]; + x = x !== null ? x : 0; + y = y !== null ? y : pageHeight; + break; + case "Fit": + case "FitB": + scale = "page-fit"; + break; + case "FitH": + case "FitBH": + y = destArray[2]; + scale = "page-width"; + if (y === null && this._location) { + x = this._location.left; + y = this._location.top; + } else if (typeof y !== "number" || y < 0) { + y = pageHeight; + } + break; + case "FitV": + case "FitBV": + x = destArray[2]; + width = pageWidth; + height = pageHeight; + scale = "page-height"; + break; + case "FitR": + x = destArray[2]; + y = destArray[3]; + width = destArray[4] - x; + height = destArray[5] - y; + let hPadding = SCROLLBAR_PADDING, + vPadding = VERTICAL_PADDING; + if (this.removePageBorders) { + hPadding = vPadding = 0; + } + widthScale = (this.container.clientWidth - hPadding) / width / PixelsPerInch.PDF_TO_CSS_UNITS; + heightScale = (this.container.clientHeight - vPadding) / height / PixelsPerInch.PDF_TO_CSS_UNITS; + scale = Math.min(Math.abs(widthScale), Math.abs(heightScale)); + break; + default: + console.error(`scrollPageIntoView: "${destArray[1].name}" is not a valid destination type.`); + return; + } + if (!ignoreDestinationZoom) { + if (scale && scale !== this._currentScale) { + this.currentScaleValue = scale; + } else if (this._currentScale === UNKNOWN_SCALE) { + this.currentScaleValue = DEFAULT_SCALE_VALUE; + } + } + if (scale === "page-fit" && !destArray[4]) { + this.#scrollIntoView(pageView); + return; + } + const boundingRect = [pageView.viewport.convertToViewportPoint(x, y), pageView.viewport.convertToViewportPoint(x + width, y + height)]; + let left = Math.min(boundingRect[0][0], boundingRect[1][0]); + let top = Math.min(boundingRect[0][1], boundingRect[1][1]); + if (center) { + if (center === "both" || center === "vertical") { + top -= (this.container.clientHeight - Math.abs(boundingRect[1][1] - boundingRect[0][1])) / 2; + } + if (center === "both" || center === "horizontal") { + left -= (this.container.clientWidth - Math.abs(boundingRect[1][0] - boundingRect[0][0])) / 2; + } + } else if (!allowNegativeOffset) { + left = Math.max(left, 0); + top = Math.max(top, 0); + } + this.#scrollIntoView(pageView, { + left, + top + }); + } + _updateLocation(firstPage) { + const currentScale = this._currentScale; + const currentScaleValue = this._currentScaleValue; + const normalizedScaleValue = parseFloat(currentScaleValue) === currentScale ? Math.round(currentScale * 10000) / 100 : currentScaleValue; + const pageNumber = firstPage.id; + const currentPageView = this._pages[pageNumber - 1]; + const container = this.container; + const topLeft = currentPageView.getPagePoint(container.scrollLeft - firstPage.x, container.scrollTop - firstPage.y); + const intLeft = Math.round(topLeft[0]); + const intTop = Math.round(topLeft[1]); + let pdfOpenParams = `#page=${pageNumber}`; + if (!this.isInPresentationMode) { + pdfOpenParams += `&zoom=${normalizedScaleValue},${intLeft},${intTop}`; + } + this._location = { + pageNumber, + scale: normalizedScaleValue, + top: intTop, + left: intLeft, + rotation: this._pagesRotation, + pdfOpenParams + }; + } + update() { + const visible = this._getVisiblePages(); + const visiblePages = visible.views, + numVisiblePages = visiblePages.length; + if (numVisiblePages === 0) { + return; + } + const newCacheSize = Math.max(DEFAULT_CACHE_SIZE, 2 * numVisiblePages + 1); + this.#buffer.resize(newCacheSize, visible.ids); + for (const { + view, + visibleArea + } of visiblePages) { + view.updateVisibleArea(visibleArea); + } + for (const view of this.#buffer) { + if (!visible.ids.has(view.id)) { + view.updateVisibleArea(null); + } + } + this.renderingQueue.renderHighestPriority(visible); + const isSimpleLayout = this._spreadMode === SpreadMode.NONE && (this._scrollMode === ScrollMode.PAGE || this._scrollMode === ScrollMode.VERTICAL); + const currentId = this._currentPageNumber; + let stillFullyVisible = false; + for (const page of visiblePages) { + if (page.percent < 100) { + break; + } + if (page.id === currentId && isSimpleLayout) { + stillFullyVisible = true; + break; + } + } + this._setCurrentPageNumber(stillFullyVisible ? currentId : visiblePages[0].id); + this._updateLocation(visible.first); + this.eventBus.dispatch("updateviewarea", { + source: this, + location: this._location + }); + } + #switchToEditAnnotationMode() { + const visible = this._getVisiblePages(); + const pagesToRefresh = []; + const { + ids, + views + } = visible; + for (const page of views) { + const { + view + } = page; + if (!view.hasEditableAnnotations()) { + ids.delete(view.id); + continue; + } + pagesToRefresh.push(page); + } + if (pagesToRefresh.length === 0) { + return null; + } + this.renderingQueue.renderHighestPriority({ + first: pagesToRefresh[0], + last: pagesToRefresh.at(-1), + views: pagesToRefresh, + ids + }); + return ids; + } + containsElement(element) { + return this.container.contains(element); + } + focus() { + this.container.focus(); + } + get _isContainerRtl() { + return getComputedStyle(this.container).direction === "rtl"; + } + get isInPresentationMode() { + return this.presentationModeState === PresentationModeState.FULLSCREEN; + } + get isChangingPresentationMode() { + return this.presentationModeState === PresentationModeState.CHANGING; + } + get isHorizontalScrollbarEnabled() { + return this.isInPresentationMode ? false : this.container.scrollWidth > this.container.clientWidth; + } + get isVerticalScrollbarEnabled() { + return this.isInPresentationMode ? false : this.container.scrollHeight > this.container.clientHeight; + } + _getVisiblePages() { + const views = this._scrollMode === ScrollMode.PAGE ? this.#scrollModePageState.pages : this._pages, + horizontal = this._scrollMode === ScrollMode.HORIZONTAL, + rtl = horizontal && this._isContainerRtl; + return getVisibleElements({ + scrollEl: this.container, + views, + sortByVisibility: true, + horizontal, + rtl + }); + } + cleanup() { + for (const pageView of this._pages) { + if (pageView.renderingState !== RenderingStates.FINISHED) { + pageView.reset(); + } + } + } + _cancelRendering() { + for (const pageView of this._pages) { + pageView.cancelRendering(); + } + } + async #ensurePdfPageLoaded(pageView) { + if (pageView.pdfPage) { + return pageView.pdfPage; + } + try { + const pdfPage = await this.pdfDocument.getPage(pageView.id); + if (!pageView.pdfPage) { + pageView.setPdfPage(pdfPage); + } + return pdfPage; + } catch (reason) { + console.error("Unable to get page for page view", reason); + return null; + } + } + #getScrollAhead(visible) { + if (visible.first?.id === 1) { + return true; + } else if (visible.last?.id === this.pagesCount) { + return false; + } + switch (this._scrollMode) { + case ScrollMode.PAGE: + return this.#scrollModePageState.scrollDown; + case ScrollMode.HORIZONTAL: + return this.scroll.right; + } + return this.scroll.down; + } + forceRendering(currentlyVisiblePages) { + const visiblePages = currentlyVisiblePages || this._getVisiblePages(); + const scrollAhead = this.#getScrollAhead(visiblePages); + const preRenderExtra = this._spreadMode !== SpreadMode.NONE && this._scrollMode !== ScrollMode.HORIZONTAL; + const ignoreDetailViews = this.#scaleTimeoutId !== null || this.#scrollTimeoutId !== null && visiblePages.views.some(page => page.detailView?.renderingCancelled); + const pageView = this.renderingQueue.getHighestPriority(visiblePages, this._pages, scrollAhead, preRenderExtra, ignoreDetailViews); + if (pageView) { + this.#ensurePdfPageLoaded(pageView).then(() => { + this.renderingQueue.renderView(pageView); + }); + return true; + } + return false; + } + get hasEqualPageSizes() { + const firstPageView = this._pages[0]; + for (let i = 1, ii = this._pages.length; i < ii; ++i) { + const pageView = this._pages[i]; + if (pageView.width !== firstPageView.width || pageView.height !== firstPageView.height) { + return false; + } + } + return true; + } + getPagesOverview() { + let initialOrientation; + return this._pages.map(pageView => { + const viewport = pageView.pdfPage.getViewport({ + scale: 1 + }); + const orientation = isPortraitOrientation(viewport); + if (initialOrientation === undefined) { + initialOrientation = orientation; + } else if (this.enablePrintAutoRotate && orientation !== initialOrientation) { + return { + width: viewport.height, + height: viewport.width, + rotation: (viewport.rotation - 90) % 360 + }; + } + return { + width: viewport.width, + height: viewport.height, + rotation: viewport.rotation + }; + }); + } + get optionalContentConfigPromise() { + if (!this.pdfDocument) { + return Promise.resolve(null); + } + if (!this._optionalContentConfigPromise) { + console.error("optionalContentConfigPromise: Not initialized yet."); + return this.pdfDocument.getOptionalContentConfig({ + intent: "display" + }); + } + return this._optionalContentConfigPromise; + } + set optionalContentConfigPromise(promise) { + if (!(promise instanceof Promise)) { + throw new Error(`Invalid optionalContentConfigPromise: ${promise}`); + } + if (!this.pdfDocument) { + return; + } + if (!this._optionalContentConfigPromise) { + return; + } + this._optionalContentConfigPromise = promise; + this.refresh(false, { + optionalContentConfigPromise: promise + }); + this.eventBus.dispatch("optionalcontentconfigchanged", { + source: this, + promise + }); + } + get scrollMode() { + return this._scrollMode; + } + set scrollMode(mode) { + if (this._scrollMode === mode) { + return; + } + if (!isValidScrollMode(mode)) { + throw new Error(`Invalid scroll mode: ${mode}`); + } + if (this.pagesCount > PagesCountLimit.FORCE_SCROLL_MODE_PAGE) { + return; + } + this._previousScrollMode = this._scrollMode; + this._scrollMode = mode; + this.eventBus.dispatch("scrollmodechanged", { + source: this, + mode + }); + this._updateScrollMode(this._currentPageNumber); + } + _updateScrollMode(pageNumber = null) { + const scrollMode = this._scrollMode, + viewer = this.viewer; + viewer.classList.toggle("scrollHorizontal", scrollMode === ScrollMode.HORIZONTAL); + viewer.classList.toggle("scrollWrapped", scrollMode === ScrollMode.WRAPPED); + if (!this.pdfDocument || !pageNumber) { + return; + } + if (scrollMode === ScrollMode.PAGE) { + this.#ensurePageViewVisible(); + } else if (this._previousScrollMode === ScrollMode.PAGE) { + this._updateSpreadMode(); + } + if (this._currentScaleValue && isNaN(this._currentScaleValue)) { + this.#setScale(this._currentScaleValue, { + noScroll: true + }); + } + this._setCurrentPageNumber(pageNumber, true); + this.update(); + } + get spreadMode() { + return this._spreadMode; + } + set spreadMode(mode) { + if (this._spreadMode === mode) { + return; + } + if (!isValidSpreadMode(mode)) { + throw new Error(`Invalid spread mode: ${mode}`); + } + this._spreadMode = mode; + this.eventBus.dispatch("spreadmodechanged", { + source: this, + mode + }); + this._updateSpreadMode(this._currentPageNumber); + } + _updateSpreadMode(pageNumber = null) { + if (!this.pdfDocument) { + return; + } + const viewer = this.viewer, + pages = this._pages; + if (this._scrollMode === ScrollMode.PAGE) { + this.#ensurePageViewVisible(); + } else { + viewer.textContent = ""; + if (this._spreadMode === SpreadMode.NONE) { + for (const pageView of this._pages) { + viewer.append(pageView.div); + } + } else { + const parity = this._spreadMode - 1; + let spread = null; + for (let i = 0, ii = pages.length; i < ii; ++i) { + if (spread === null) { + spread = document.createElement("div"); + spread.className = "spread"; + viewer.append(spread); + } else if (i % 2 === parity) { + spread = spread.cloneNode(false); + viewer.append(spread); + } + spread.append(pages[i].div); + } + } + } + if (!pageNumber) { + return; + } + if (this._currentScaleValue && isNaN(this._currentScaleValue)) { + this.#setScale(this._currentScaleValue, { + noScroll: true + }); + } + this._setCurrentPageNumber(pageNumber, true); + this.update(); + } + _getPageAdvance(currentPageNumber, previous = false) { + switch (this._scrollMode) { + case ScrollMode.WRAPPED: + { + const { + views + } = this._getVisiblePages(), + pageLayout = new Map(); + for (const { + id, + y, + percent, + widthPercent + } of views) { + if (percent === 0 || widthPercent < 100) { + continue; + } + let yArray = pageLayout.get(y); + if (!yArray) { + pageLayout.set(y, yArray ||= []); + } + yArray.push(id); + } + for (const yArray of pageLayout.values()) { + const currentIndex = yArray.indexOf(currentPageNumber); + if (currentIndex === -1) { + continue; + } + const numPages = yArray.length; + if (numPages === 1) { + break; + } + if (previous) { + for (let i = currentIndex - 1, ii = 0; i >= ii; i--) { + const currentId = yArray[i], + expectedId = yArray[i + 1] - 1; + if (currentId < expectedId) { + return currentPageNumber - expectedId; + } + } + } else { + for (let i = currentIndex + 1, ii = numPages; i < ii; i++) { + const currentId = yArray[i], + expectedId = yArray[i - 1] + 1; + if (currentId > expectedId) { + return expectedId - currentPageNumber; + } + } + } + if (previous) { + const firstId = yArray[0]; + if (firstId < currentPageNumber) { + return currentPageNumber - firstId + 1; + } + } else { + const lastId = yArray[numPages - 1]; + if (lastId > currentPageNumber) { + return lastId - currentPageNumber + 1; + } + } + break; + } + break; + } + case ScrollMode.HORIZONTAL: + { + break; + } + case ScrollMode.PAGE: + case ScrollMode.VERTICAL: + { + if (this._spreadMode === SpreadMode.NONE) { + break; + } + const parity = this._spreadMode - 1; + if (previous && currentPageNumber % 2 !== parity) { + break; + } else if (!previous && currentPageNumber % 2 === parity) { + break; + } + const { + views + } = this._getVisiblePages(), + expectedId = previous ? currentPageNumber - 1 : currentPageNumber + 1; + for (const { + id, + percent, + widthPercent + } of views) { + if (id !== expectedId) { + continue; + } + if (percent > 0 && widthPercent === 100) { + return 2; + } + break; + } + break; + } + } + return 1; + } + nextPage() { + const currentPageNumber = this._currentPageNumber, + pagesCount = this.pagesCount; + if (currentPageNumber >= pagesCount) { + return false; + } + const advance = this._getPageAdvance(currentPageNumber, false) || 1; + this.currentPageNumber = Math.min(currentPageNumber + advance, pagesCount); + return true; + } + previousPage() { + const currentPageNumber = this._currentPageNumber; + if (currentPageNumber <= 1) { + return false; + } + const advance = this._getPageAdvance(currentPageNumber, true) || 1; + this.currentPageNumber = Math.max(currentPageNumber - advance, 1); + return true; + } + updateScale({ + drawingDelay, + scaleFactor = null, + steps = null, + origin + }) { + if (steps === null && scaleFactor === null) { + throw new Error("Invalid updateScale options: either `steps` or `scaleFactor` must be provided."); + } + if (!this.pdfDocument) { + return; + } + let newScale = this._currentScale; + if (scaleFactor > 0 && scaleFactor !== 1) { + newScale = Math.round(newScale * scaleFactor * 100) / 100; + } else if (steps) { + const delta = steps > 0 ? DEFAULT_SCALE_DELTA : 1 / DEFAULT_SCALE_DELTA; + const round = steps > 0 ? Math.ceil : Math.floor; + steps = Math.abs(steps); + do { + newScale = round((newScale * delta).toFixed(2) * 10) / 10; + } while (--steps > 0); + } + newScale = MathClamp(newScale, MIN_SCALE, MAX_SCALE); + this.#setScale(newScale, { + noScroll: false, + drawingDelay, + origin + }); + } + increaseScale(options = {}) { + this.updateScale({ + ...options, + steps: options.steps ?? 1 + }); + } + decreaseScale(options = {}) { + this.updateScale({ + ...options, + steps: -(options.steps ?? 1) + }); + } + #updateContainerHeightCss(height = this.container.clientHeight) { + if (height !== this.#previousContainerHeight) { + this.#previousContainerHeight = height; + docStyle.setProperty("--viewer-container-height", `${height}px`); + } + } + #resizeObserverCallback(entries) { + for (const entry of entries) { + if (entry.target === this.container) { + this.#updateContainerHeightCss(Math.floor(entry.borderBoxSize[0].blockSize)); + this.#containerTopLeft = null; + break; + } + } + } + get containerTopLeft() { + return this.#containerTopLeft ||= [this.container.offsetTop, this.container.offsetLeft]; + } + #cleanupTimeouts() { + if (this.#scaleTimeoutId !== null) { + clearTimeout(this.#scaleTimeoutId); + this.#scaleTimeoutId = null; + } + if (this.#scrollTimeoutId !== null) { + clearTimeout(this.#scrollTimeoutId); + this.#scrollTimeoutId = null; + } + } + #cleanupSwitchAnnotationEditorMode() { + this.#switchAnnotationEditorModeAC?.abort(); + this.#switchAnnotationEditorModeAC = null; + if (this.#switchAnnotationEditorModeTimeoutId !== null) { + clearTimeout(this.#switchAnnotationEditorModeTimeoutId); + this.#switchAnnotationEditorModeTimeoutId = null; + } + } + #preloadEditingData(mode) { + switch (mode) { + case AnnotationEditorType.STAMP: + this.#mlManager?.loadModel("altText"); + break; + case AnnotationEditorType.SIGNATURE: + this.#signatureManager?.loadSignatures(); + break; + } + } + get annotationEditorMode() { + return this.#annotationEditorUIManager ? this.#annotationEditorMode : AnnotationEditorType.DISABLE; + } + set annotationEditorMode({ + mode, + editId = null, + isFromKeyboard = false, + mustEnterInEditMode = false, + editComment = false + }) { + if (!this.#annotationEditorUIManager) { + throw new Error(`The AnnotationEditor is not enabled.`); + } + if (this.#annotationEditorMode === mode) { + return; + } + if (!isValidAnnotationEditorMode(mode)) { + throw new Error(`Invalid AnnotationEditor mode: ${mode}`); + } + if (!this.pdfDocument) { + return; + } + this.#preloadEditingData(mode); + const { + eventBus, + pdfDocument + } = this; + const updater = async () => { + this.#cleanupSwitchAnnotationEditorMode(); + this.#annotationEditorMode = mode; + await this.#annotationEditorUIManager.updateMode(mode, editId, isFromKeyboard, mustEnterInEditMode, editComment); + if (mode !== this.#annotationEditorMode || pdfDocument !== this.pdfDocument) { + return; + } + eventBus.dispatch("annotationeditormodechanged", { + source: this, + mode + }); + }; + if (mode === AnnotationEditorType.NONE || this.#annotationEditorMode === AnnotationEditorType.NONE) { + const isEditing = mode !== AnnotationEditorType.NONE; + if (!isEditing) { + this.pdfDocument.annotationStorage.resetModifiedIds(); + } + this.cleanup(); + for (const pageView of this._pages) { + pageView.toggleEditingMode(isEditing); + } + const idsToRefresh = this.#switchToEditAnnotationMode(); + if (isEditing && idsToRefresh) { + this.#cleanupSwitchAnnotationEditorMode(); + this.#switchAnnotationEditorModeAC = new AbortController(); + const signal = AbortSignal.any([this.#eventAbortController.signal, this.#switchAnnotationEditorModeAC.signal]); + eventBus._on("pagerendered", ({ + pageNumber + }) => { + idsToRefresh.delete(pageNumber); + if (idsToRefresh.size === 0) { + this.#switchAnnotationEditorModeTimeoutId = setTimeout(updater, 0); + } + }, { + signal + }); + return; + } + } + updater(); + } + refresh(noUpdate = false, updateArgs = Object.create(null)) { + if (!this.pdfDocument) { + return; + } + for (const pageView of this._pages) { + pageView.update(updateArgs); + } + this.#cleanupTimeouts(); + if (!noUpdate) { + this.update(); + } + } +} + +;// ./web/secondary_toolbar.js + + +class SecondaryToolbar { + #opts; + constructor(options, eventBus) { + this.#opts = options; + const buttons = [{ + element: options.presentationModeButton, + eventName: "presentationmode", + close: true + }, { + element: options.printButton, + eventName: "print", + close: true + }, { + element: options.downloadButton, + eventName: "download", + close: true + }, { + element: options.viewBookmarkButton, + eventName: null, + close: true + }, { + element: options.firstPageButton, + eventName: "firstpage", + close: true + }, { + element: options.lastPageButton, + eventName: "lastpage", + close: true + }, { + element: options.pageRotateCwButton, + eventName: "rotatecw", + close: false + }, { + element: options.pageRotateCcwButton, + eventName: "rotateccw", + close: false + }, { + element: options.cursorSelectToolButton, + eventName: "switchcursortool", + eventDetails: { + tool: CursorTool.SELECT + }, + close: true + }, { + element: options.cursorHandToolButton, + eventName: "switchcursortool", + eventDetails: { + tool: CursorTool.HAND + }, + close: true + }, { + element: options.scrollPageButton, + eventName: "switchscrollmode", + eventDetails: { + mode: ScrollMode.PAGE + }, + close: true + }, { + element: options.scrollVerticalButton, + eventName: "switchscrollmode", + eventDetails: { + mode: ScrollMode.VERTICAL + }, + close: true + }, { + element: options.scrollHorizontalButton, + eventName: "switchscrollmode", + eventDetails: { + mode: ScrollMode.HORIZONTAL + }, + close: true + }, { + element: options.scrollWrappedButton, + eventName: "switchscrollmode", + eventDetails: { + mode: ScrollMode.WRAPPED + }, + close: true + }, { + element: options.spreadNoneButton, + eventName: "switchspreadmode", + eventDetails: { + mode: SpreadMode.NONE + }, + close: true + }, { + element: options.spreadOddButton, + eventName: "switchspreadmode", + eventDetails: { + mode: SpreadMode.ODD + }, + close: true + }, { + element: options.spreadEvenButton, + eventName: "switchspreadmode", + eventDetails: { + mode: SpreadMode.EVEN + }, + close: true + }, { + element: options.imageAltTextSettingsButton, + eventName: "imagealttextsettings", + close: true + }, { + element: options.documentPropertiesButton, + eventName: "documentproperties", + close: true + }]; + buttons.push({ + element: options.openFileButton, + eventName: "openfile", + close: true + }); + this.eventBus = eventBus; + this.opened = false; + this.#bindListeners(buttons); + this.reset(); + } + get isOpen() { + return this.opened; + } + setPageNumber(pageNumber) { + this.pageNumber = pageNumber; + this.#updateUIState(); + } + setPagesCount(pagesCount) { + this.pagesCount = pagesCount; + this.#updateUIState(); + } + reset() { + this.pageNumber = 0; + this.pagesCount = 0; + this.#updateUIState(); + this.eventBus.dispatch("switchcursortool", { + source: this, + reset: true + }); + this.#scrollModeChanged({ + mode: ScrollMode.VERTICAL + }); + this.#spreadModeChanged({ + mode: SpreadMode.NONE + }); + } + #updateUIState() { + const { + firstPageButton, + lastPageButton, + pageRotateCwButton, + pageRotateCcwButton + } = this.#opts; + firstPageButton.disabled = this.pageNumber <= 1; + lastPageButton.disabled = this.pageNumber >= this.pagesCount; + pageRotateCwButton.disabled = this.pagesCount === 0; + pageRotateCcwButton.disabled = this.pagesCount === 0; + } + #bindListeners(buttons) { + const { + eventBus + } = this; + const { + toggleButton + } = this.#opts; + toggleButton.addEventListener("click", this.toggle.bind(this)); + for (const { + element, + eventName, + close, + eventDetails + } of buttons) { + element.addEventListener("click", evt => { + if (eventName !== null) { + eventBus.dispatch(eventName, { + source: this, + ...eventDetails + }); + } + if (close) { + this.close(); + } + eventBus.dispatch("reporttelemetry", { + source: this, + details: { + type: "buttons", + data: { + id: element.id + } + } + }); + }); + } + eventBus._on("cursortoolchanged", this.#cursorToolChanged.bind(this)); + eventBus._on("scrollmodechanged", this.#scrollModeChanged.bind(this)); + eventBus._on("spreadmodechanged", this.#spreadModeChanged.bind(this)); + } + #cursorToolChanged({ + tool, + disabled + }) { + const { + cursorSelectToolButton, + cursorHandToolButton + } = this.#opts; + toggleCheckedBtn(cursorSelectToolButton, tool === CursorTool.SELECT); + toggleCheckedBtn(cursorHandToolButton, tool === CursorTool.HAND); + cursorSelectToolButton.disabled = disabled; + cursorHandToolButton.disabled = disabled; + } + #scrollModeChanged({ + mode + }) { + const { + scrollPageButton, + scrollVerticalButton, + scrollHorizontalButton, + scrollWrappedButton, + spreadNoneButton, + spreadOddButton, + spreadEvenButton + } = this.#opts; + toggleCheckedBtn(scrollPageButton, mode === ScrollMode.PAGE); + toggleCheckedBtn(scrollVerticalButton, mode === ScrollMode.VERTICAL); + toggleCheckedBtn(scrollHorizontalButton, mode === ScrollMode.HORIZONTAL); + toggleCheckedBtn(scrollWrappedButton, mode === ScrollMode.WRAPPED); + const forceScrollModePage = this.pagesCount > PagesCountLimit.FORCE_SCROLL_MODE_PAGE; + scrollPageButton.disabled = forceScrollModePage; + scrollVerticalButton.disabled = forceScrollModePage; + scrollHorizontalButton.disabled = forceScrollModePage; + scrollWrappedButton.disabled = forceScrollModePage; + const isHorizontal = mode === ScrollMode.HORIZONTAL; + spreadNoneButton.disabled = isHorizontal; + spreadOddButton.disabled = isHorizontal; + spreadEvenButton.disabled = isHorizontal; + } + #spreadModeChanged({ + mode + }) { + const { + spreadNoneButton, + spreadOddButton, + spreadEvenButton + } = this.#opts; + toggleCheckedBtn(spreadNoneButton, mode === SpreadMode.NONE); + toggleCheckedBtn(spreadOddButton, mode === SpreadMode.ODD); + toggleCheckedBtn(spreadEvenButton, mode === SpreadMode.EVEN); + } + open() { + if (this.opened) { + return; + } + this.opened = true; + const { + toggleButton, + toolbar + } = this.#opts; + toggleExpandedBtn(toggleButton, true, toolbar); + } + close() { + if (!this.opened) { + return; + } + this.opened = false; + const { + toggleButton, + toolbar + } = this.#opts; + toggleExpandedBtn(toggleButton, false, toolbar); + } + toggle() { + if (this.opened) { + this.close(); + } else { + this.open(); + } + } +} + +;// ./web/signature_manager.js + +const DEFAULT_HEIGHT_IN_PAGE = 40; +class SignatureManager { + #addButton; + #tabsToAltText = null; + #clearButton; + #clearDescription; + #currentEditor; + #description; + #dialog; + #drawCurves = null; + #drawPlaceholder; + #drawPath = null; + #drawPathString = ""; + #drawPoints = null; + #drawSVG; + #drawThickness; + #errorBar; + #errorDescription; + #errorTitle; + #extractedSignatureData = null; + #imagePath = null; + #imagePicker; + #imagePickerLink; + #imagePlaceholder; + #imageSVG; + #saveCheckbox; + #saveContainer; + #tabButtons; + #addSignatureToolbarButton; + #loadSignaturesPromise = null; + #typeInput; + #currentTab = null; + #currentTabAC = null; + #hasDescriptionChanged = false; + #eventBus; + #isStorageFull = false; + #l10n; + #overlayManager; + #editDescriptionDialog; + #signatureStorage; + #uiManager = null; + static #l10nDescription = null; + constructor({ + dialog, + panels, + typeButton, + typeInput, + drawButton, + drawPlaceholder, + drawSVG, + drawThickness, + imageButton, + imageSVG, + imagePlaceholder, + imagePicker, + imagePickerLink, + description, + clearButton, + cancelButton, + addButton, + errorCloseButton, + errorBar, + errorTitle, + errorDescription, + saveCheckbox, + saveContainer + }, editSignatureElements, addSignatureToolbarButton, overlayManager, l10n, signatureStorage, eventBus) { + this.#addButton = addButton; + this.#clearButton = clearButton; + this.#clearDescription = description.lastElementChild; + this.#description = description.firstElementChild; + this.#dialog = dialog; + this.#drawSVG = drawSVG; + this.#drawPlaceholder = drawPlaceholder; + this.#drawThickness = drawThickness; + this.#errorBar = errorBar; + this.#errorTitle = errorTitle; + this.#errorDescription = errorDescription; + this.#imageSVG = imageSVG; + this.#imagePlaceholder = imagePlaceholder; + this.#imagePicker = imagePicker; + this.#imagePickerLink = imagePickerLink; + this.#overlayManager = overlayManager; + this.#saveCheckbox = saveCheckbox; + this.#saveContainer = saveContainer; + this.#addSignatureToolbarButton = addSignatureToolbarButton; + this.#typeInput = typeInput; + this.#l10n = l10n; + this.#signatureStorage = signatureStorage; + this.#eventBus = eventBus; + this.#editDescriptionDialog = new EditDescriptionDialog(editSignatureElements, overlayManager); + SignatureManager.#l10nDescription ||= Object.freeze({ + signature: "pdfjs-editor-add-signature-description-default-when-drawing", + errorUploadTitle: "pdfjs-editor-add-signature-image-upload-error-title", + errorUploadDescription: "pdfjs-editor-add-signature-image-upload-error-description", + errorNoDataTitle: "pdfjs-editor-add-signature-image-no-data-error-title", + errorNoDataDescription: "pdfjs-editor-add-signature-image-no-data-error-description" + }); + dialog.addEventListener("close", this.#close.bind(this)); + dialog.addEventListener("contextmenu", e => { + const { + target + } = e; + if (target !== this.#typeInput && target !== this.#description) { + e.preventDefault(); + } + }); + dialog.addEventListener("drop", e => { + stopEvent(e); + }); + cancelButton.addEventListener("click", this.#cancel.bind(this)); + addButton.addEventListener("click", this.#add.bind(this)); + clearButton.addEventListener("click", () => { + this.#reportTelemetry({ + type: "signature", + action: "pdfjs.signature.clear", + data: { + type: this.#currentTab + } + }); + this.#initTab(null); + }, { + passive: true + }); + this.#description.addEventListener("input", () => { + this.#clearDescription.disabled = this.#description.value === ""; + }, { + passive: true + }); + this.#clearDescription.addEventListener("click", () => { + this.#description.value = ""; + this.#clearDescription.disabled = true; + }, { + passive: true + }); + errorCloseButton.addEventListener("click", () => { + errorBar.hidden = true; + }, { + passive: true + }); + this.#initTabButtons(typeButton, drawButton, imageButton, panels); + imagePicker.accept = SupportedImageMimeTypes.join(","); + eventBus._on("storedsignatureschanged", this.#signaturesChanged.bind(this)); + overlayManager.register(dialog); + } + #initTabButtons(typeButton, drawButton, imageButton, panels) { + const buttons = this.#tabButtons = new Map([["type", typeButton], ["draw", drawButton], ["image", imageButton]]); + const tabCallback = e => { + for (const [name, button] of buttons) { + if (button === e.target) { + button.setAttribute("aria-selected", true); + button.setAttribute("tabindex", 0); + panels.setAttribute("data-selected", name); + this.#initTab(name); + } else { + button.setAttribute("aria-selected", false); + button.setAttribute("tabindex", -1); + } + } + }; + const buttonsArray = Array.from(buttons.values()); + for (let i = 0, ii = buttonsArray.length; i < ii; i++) { + const button = buttonsArray[i]; + button.addEventListener("click", tabCallback, { + passive: true + }); + button.addEventListener("keydown", ({ + key + }) => { + if (key !== "ArrowLeft" && key !== "ArrowRight") { + return; + } + buttonsArray[i + (key === "ArrowLeft" ? -1 : 1)]?.focus(); + }, { + passive: true + }); + } + } + #resetCommon() { + this.#hasDescriptionChanged = false; + this.#description.value = ""; + if (this.#currentTab) { + this.#tabsToAltText.get(this.#currentTab).value = ""; + } + } + #resetTab(name) { + switch (name) { + case "type": + this.#typeInput.value = ""; + break; + case "draw": + this.#drawCurves = null; + this.#drawPoints = null; + this.#drawPathString = ""; + this.#drawPath?.remove(); + this.#drawPath = null; + this.#drawPlaceholder.hidden = false; + this.#drawThickness.value = 1; + break; + case "image": + this.#imagePlaceholder.hidden = false; + this.#imagePath?.remove(); + this.#imagePath = null; + break; + } + } + #initTab(name) { + if (name && this.#currentTab === name) { + return; + } + if (this.#currentTab) { + this.#tabsToAltText.get(this.#currentTab).value = this.#description.value; + } + if (name) { + this.#currentTab = name; + } + this.#errorBar.hidden = true; + const reset = !name; + if (reset) { + this.#resetCommon(); + } else { + this.#description.value = this.#tabsToAltText.get(this.#currentTab).value; + } + this.#clearDescription.disabled = this.#description.value === ""; + this.#currentTabAC?.abort(); + this.#currentTabAC = new AbortController(); + switch (this.#currentTab) { + case "type": + this.#initTypeTab(reset); + break; + case "draw": + this.#initDrawTab(reset); + break; + case "image": + this.#initImageTab(reset); + break; + } + } + #disableButtons(value) { + if (!value || !this.#isStorageFull) { + this.#saveCheckbox.disabled = !value; + } + this.#clearButton.disabled = this.#addButton.disabled = this.#description.disabled = !value; + } + #initTypeTab(reset) { + if (reset) { + this.#resetTab("type"); + } + this.#disableButtons(this.#typeInput.value); + const { + signal + } = this.#currentTabAC; + const options = { + passive: true, + signal + }; + this.#typeInput.addEventListener("input", () => { + const { + value + } = this.#typeInput; + if (!this.#hasDescriptionChanged) { + this.#tabsToAltText.get("type").default = this.#description.value = value; + this.#clearDescription.disabled = value === ""; + } + this.#disableButtons(value); + }, options); + this.#description.addEventListener("input", () => { + this.#hasDescriptionChanged = this.#typeInput.value !== this.#description.value; + }, options); + } + #initDrawTab(reset) { + if (reset) { + this.#resetTab("draw"); + } + this.#disableButtons(this.#drawPath); + const { + signal + } = this.#currentTabAC; + const options = { + signal + }; + let currentPointerId = NaN; + const drawCallback = e => { + const { + pointerId + } = e; + if (!isNaN(currentPointerId) && currentPointerId !== pointerId) { + return; + } + currentPointerId = pointerId; + e.preventDefault(); + this.#drawSVG.setPointerCapture(pointerId); + const { + width: drawWidth, + height: drawHeight + } = this.#drawSVG.getBoundingClientRect(); + let { + offsetX, + offsetY + } = e; + offsetX = Math.round(offsetX); + offsetY = Math.round(offsetY); + if (e.target === this.#drawPlaceholder) { + this.#drawPlaceholder.hidden = true; + } + if (!this.#drawCurves) { + this.#drawCurves = { + width: drawWidth, + height: drawHeight, + thickness: parseInt(this.#drawThickness.value), + curves: [] + }; + this.#disableButtons(true); + const svgFactory = new DOMSVGFactory(); + const path = this.#drawPath = svgFactory.createElement("path"); + path.setAttribute("stroke-width", this.#drawThickness.value); + this.#drawSVG.append(path); + this.#drawSVG.addEventListener("pointerdown", drawCallback, options); + this.#drawPlaceholder.removeEventListener("pointerdown", drawCallback); + if (this.#description.value === "") { + this.#l10n.get(SignatureManager.#l10nDescription.signature).then(description => { + this.#tabsToAltText.get("draw").default = description; + this.#description.value ||= description; + this.#clearDescription.disabled = this.#description.value === ""; + }); + } + } + this.#drawPoints = [offsetX, offsetY]; + this.#drawCurves.curves.push({ + points: this.#drawPoints + }); + this.#drawPathString += `M ${offsetX} ${offsetY}`; + this.#drawPath.setAttribute("d", this.#drawPathString); + const finishDrawAC = new AbortController(); + const listenerDrawOptions = { + signal: AbortSignal.any([signal, finishDrawAC.signal]) + }; + this.#drawSVG.addEventListener("contextmenu", noContextMenu, listenerDrawOptions); + this.#drawSVG.addEventListener("pointermove", evt => { + evt.preventDefault(); + let { + offsetX: x, + offsetY: y + } = evt; + x = Math.round(x); + y = Math.round(y); + const drawPoints = this.#drawPoints; + if (x < 0 || y < 0 || x > drawWidth || y > drawHeight || x === drawPoints.at(-2) && y === drawPoints.at(-1)) { + return; + } + if (drawPoints.length >= 4) { + const [x1, y1, x2, y2] = drawPoints.slice(-4); + this.#drawPathString += `C${(x1 + 5 * x2) / 6} ${(y1 + 5 * y2) / 6} ${(5 * x2 + x) / 6} ${(5 * y2 + y) / 6} ${(x2 + x) / 2} ${(y2 + y) / 2}`; + } else { + this.#drawPathString += `L${x} ${y}`; + } + drawPoints.push(x, y); + this.#drawPath.setAttribute("d", this.#drawPathString); + }, listenerDrawOptions); + this.#drawSVG.addEventListener("pointerup", evt => { + const { + pointerId: pId + } = evt; + if (!isNaN(currentPointerId) && currentPointerId !== pId) { + return; + } + currentPointerId = NaN; + evt.preventDefault(); + this.#drawSVG.releasePointerCapture(pId); + finishDrawAC.abort(); + if (this.#drawPoints.length === 2) { + this.#drawPathString += `L${this.#drawPoints[0]} ${this.#drawPoints[1]}`; + this.#drawPath.setAttribute("d", this.#drawPathString); + } + }, listenerDrawOptions); + }; + if (this.#drawCurves) { + this.#drawSVG.addEventListener("pointerdown", drawCallback, options); + } else { + this.#drawPlaceholder.addEventListener("pointerdown", drawCallback, options); + } + this.#drawThickness.addEventListener("input", () => { + const { + value: thickness + } = this.#drawThickness; + this.#drawThickness.setAttribute("data-l10n-args", JSON.stringify({ + thickness + })); + if (!this.#drawCurves) { + return; + } + this.#drawPath.setAttribute("stroke-width", thickness); + this.#drawCurves.thickness = thickness; + }, options); + } + #showError(type) { + this.#errorTitle.setAttribute("data-l10n-id", SignatureManager.#l10nDescription[`error${type}Title`]); + this.#errorDescription.setAttribute("data-l10n-id", SignatureManager.#l10nDescription[`error${type}Description`]); + this.#errorBar.hidden = false; + } + #initImageTab(reset) { + if (reset) { + this.#resetTab("image"); + } + this.#disableButtons(this.#imagePath); + const { + signal + } = this.#currentTabAC; + const options = { + signal + }; + const passiveOptions = { + passive: true, + signal + }; + this.#imagePickerLink.addEventListener("keydown", e => { + const { + key + } = e; + if (key === "Enter" || key === " ") { + stopEvent(e); + this.#imagePicker.click(); + } + }, options); + this.#imagePicker.addEventListener("click", () => { + this.#dialog.classList.toggle("waiting", true); + }, passiveOptions); + this.#imagePicker.addEventListener("change", async () => { + const file = this.#imagePicker.files?.[0]; + if (!file || !SupportedImageMimeTypes.includes(file.type)) { + this.#showError("Upload"); + this.#dialog.classList.toggle("waiting", false); + return; + } + await this.#extractSignature(file); + }, passiveOptions); + this.#imagePicker.addEventListener("cancel", () => { + this.#dialog.classList.toggle("waiting", false); + }, passiveOptions); + this.#imagePlaceholder.addEventListener("dragover", e => { + const { + dataTransfer + } = e; + for (const { + type + } of dataTransfer.items) { + if (!SupportedImageMimeTypes.includes(type)) { + continue; + } + dataTransfer.dropEffect = dataTransfer.effectAllowed === "copy" ? "copy" : "move"; + stopEvent(e); + return; + } + dataTransfer.dropEffect = "none"; + }, options); + this.#imagePlaceholder.addEventListener("drop", e => { + const { + dataTransfer: { + files + } + } = e; + if (!files?.length) { + return; + } + for (const file of files) { + if (SupportedImageMimeTypes.includes(file.type)) { + this.#extractSignature(file); + break; + } + } + stopEvent(e); + this.#dialog.classList.toggle("waiting", true); + }, options); + } + async #extractSignature(file) { + let data; + try { + data = await this.#uiManager.imageManager.getFromFile(file); + } catch (e) { + console.error("SignatureManager.#extractSignature.", e); + } + if (!data) { + this.#showError("Upload"); + this.#dialog.classList.toggle("waiting", false); + return; + } + const lineData = this.#extractedSignatureData = this.#currentEditor.getFromImage(data.bitmap); + if (!lineData) { + this.#showError("NoData"); + this.#dialog.classList.toggle("waiting", false); + return; + } + const { + outline + } = lineData; + this.#imagePlaceholder.hidden = true; + this.#disableButtons(true); + const svgFactory = new DOMSVGFactory(); + const path = this.#imagePath = svgFactory.createElement("path"); + this.#imageSVG.setAttribute("viewBox", outline.viewBox); + this.#imageSVG.setAttribute("preserveAspectRatio", "xMidYMid meet"); + this.#imageSVG.append(path); + path.setAttribute("d", outline.toSVGPath()); + this.#tabsToAltText.get("image").default = file.name; + if (this.#description.value === "") { + this.#description.value = file.name || ""; + this.#clearDescription.disabled = this.#description.value === ""; + } + this.#dialog.classList.toggle("waiting", false); + } + #getOutlineForType() { + return this.#currentEditor.getFromText(this.#typeInput.value, window.getComputedStyle(this.#typeInput)); + } + #getOutlineForDraw() { + const { + width, + height + } = this.#drawSVG.getBoundingClientRect(); + return this.#currentEditor.getDrawnSignature(this.#drawCurves, width, height); + } + #reportTelemetry(data) { + this.#eventBus.dispatch("reporttelemetry", { + source: this, + details: { + type: "editing", + data + } + }); + } + #addToolbarButton(signatureData, uuid, description) { + const { + curves, + areContours, + thickness, + width, + height + } = signatureData; + const maxDim = Math.max(width, height); + const outlineData = SignatureExtractor.processDrawnLines({ + lines: { + curves, + thickness, + width, + height + }, + pageWidth: maxDim, + pageHeight: maxDim, + rotation: 0, + innerMargin: 0, + mustSmooth: false, + areContours + }); + if (!outlineData) { + return; + } + const { + outline + } = outlineData; + const svgFactory = new DOMSVGFactory(); + const div = document.createElement("div"); + const button = document.createElement("button"); + button.addEventListener("click", () => { + this.#eventBus.dispatch("switchannotationeditorparams", { + source: this, + type: AnnotationEditorParamsType.CREATE, + value: { + signatureData: { + lines: { + curves, + thickness, + width, + height + }, + mustSmooth: false, + areContours, + description, + uuid, + heightInPage: DEFAULT_HEIGHT_IN_PAGE + } + } + }); + }); + div.append(button); + div.classList.add("toolbarAddSignatureButtonContainer"); + const svg = svgFactory.create(1, 1, true); + button.append(svg); + const span = document.createElement("span"); + span.ariaHidden = true; + button.append(span); + button.classList.add("toolbarAddSignatureButton"); + button.type = "button"; + span.textContent = description; + button.setAttribute("data-l10n-id", "pdfjs-editor-add-saved-signature-button"); + button.setAttribute("data-l10n-args", JSON.stringify({ + description + })); + button.tabIndex = 0; + const path = svgFactory.createElement("path"); + svg.append(path); + svg.setAttribute("viewBox", outline.viewBox); + svg.setAttribute("preserveAspectRatio", "xMidYMid meet"); + if (areContours) { + path.classList.add("contours"); + } + path.setAttribute("d", outline.toSVGPath()); + const deleteButton = document.createElement("button"); + div.append(deleteButton); + deleteButton.classList.add("toolbarButton", "deleteButton"); + deleteButton.setAttribute("data-l10n-id", "pdfjs-editor-delete-signature-button1"); + deleteButton.type = "button"; + deleteButton.tabIndex = 0; + deleteButton.addEventListener("click", async () => { + if (await this.#signatureStorage.delete(uuid)) { + div.remove(); + this.#reportTelemetry({ + type: "signature", + action: "pdfjs.signature.delete_saved", + data: { + savedCount: await this.#signatureStorage.size() + } + }); + } + }); + const deleteSpan = document.createElement("span"); + deleteButton.append(deleteSpan); + deleteSpan.setAttribute("data-l10n-id", "pdfjs-editor-delete-signature-button-label1"); + this.#addSignatureToolbarButton.before(div); + } + async #signaturesChanged() { + const parent = this.#addSignatureToolbarButton.parentElement; + while (parent.firstElementChild !== this.#addSignatureToolbarButton) { + parent.firstElementChild.remove(); + } + this.#loadSignaturesPromise = null; + await this.loadSignatures(true); + } + getSignature(params) { + return this.open(params); + } + async loadSignatures(reload = false) { + if (!this.#addSignatureToolbarButton || !reload && this.#addSignatureToolbarButton.previousElementSibling || !this.#signatureStorage) { + return; + } + if (!this.#loadSignaturesPromise) { + this.#loadSignaturesPromise = this.#signatureStorage.getAll().then(async signatures => [signatures, await Promise.all(Array.from(signatures.values(), ({ + signatureData + }) => SignatureExtractor.decompressSignature(signatureData)))]); + if (!reload) { + return; + } + } + const [signatures, signaturesData] = await this.#loadSignaturesPromise; + this.#loadSignaturesPromise = null; + let i = 0; + for (const [uuid, { + description + }] of signatures) { + const data = signaturesData[i++]; + if (!data) { + continue; + } + data.curves = data.outlines.map(points => ({ + points + })); + delete data.outlines; + this.#addToolbarButton(data, uuid, description); + } + } + async renderEditButton(editor) { + const button = document.createElement("button"); + button.classList.add("altText", "editDescription"); + button.tabIndex = 0; + if (editor.description) { + button.title = editor.description; + } + const span = document.createElement("span"); + button.append(span); + span.setAttribute("data-l10n-id", "pdfjs-editor-add-signature-edit-button-label"); + button.addEventListener("click", () => { + this.#editDescriptionDialog.open(editor); + }, { + passive: true + }); + return button; + } + async open({ + uiManager, + editor + }) { + this.#tabsToAltText ||= new Map(this.#tabButtons.keys().map(name => [name, { + value: "", + default: "" + }])); + this.#uiManager = uiManager; + this.#currentEditor = editor; + this.#uiManager.removeEditListeners(); + const isStorageFull = this.#isStorageFull = await this.#signatureStorage.isFull(); + this.#saveContainer.classList.toggle("fullStorage", isStorageFull); + this.#saveCheckbox.checked = !isStorageFull; + await this.#overlayManager.open(this.#dialog); + const tabType = this.#tabButtons.get("type"); + tabType.focus(); + tabType.click(); + } + #cancel() { + this.#finish(); + } + #finish() { + this.#overlayManager.closeIfActive(this.#dialog); + } + #close() { + if (this.#currentEditor._drawId === null) { + this.#currentEditor.remove(); + } + this.#uiManager?.addEditListeners(); + this.#currentTabAC?.abort(); + this.#currentTabAC = null; + this.#uiManager = null; + this.#currentEditor = null; + this.#resetCommon(); + for (const [name] of this.#tabButtons) { + this.#resetTab(name); + } + this.#disableButtons(false); + this.#currentTab = null; + this.#tabsToAltText = null; + } + async #add() { + let data; + const type = this.#currentTab; + switch (type) { + case "type": + data = this.#getOutlineForType(); + break; + case "draw": + data = this.#getOutlineForDraw(); + break; + case "image": + data = this.#extractedSignatureData; + break; + } + let uuid = null; + const description = this.#description.value; + if (this.#saveCheckbox.checked) { + const { + newCurves, + areContours, + thickness, + width, + height + } = data; + const signatureData = await SignatureExtractor.compressSignature({ + outlines: newCurves, + areContours, + thickness, + width, + height + }); + uuid = await this.#signatureStorage.create({ + description, + signatureData + }); + if (uuid) { + this.#addToolbarButton({ + curves: newCurves.map(points => ({ + points + })), + areContours, + thickness, + width, + height + }, uuid, description); + } else { + console.warn("SignatureManager.add: cannot save the signature."); + } + } + const altText = this.#tabsToAltText.get(type); + this.#reportTelemetry({ + type: "signature", + action: "pdfjs.signature.created", + data: { + type, + saved: !!uuid, + savedCount: await this.#signatureStorage.size(), + descriptionChanged: description !== altText.default + } + }); + this.#currentEditor.addSignature(data, DEFAULT_HEIGHT_IN_PAGE, this.#description.value, uuid); + this.#finish(); + } + destroy() { + this.#uiManager = null; + this.#finish(); + } +} +class EditDescriptionDialog { + #currentEditor; + #previousDescription; + #description; + #dialog; + #overlayManager; + #signatureSVG; + #uiManager; + constructor({ + dialog, + description, + cancelButton, + updateButton, + editSignatureView + }, overlayManager) { + const descriptionInput = this.#description = description.firstElementChild; + this.#signatureSVG = editSignatureView; + this.#dialog = dialog; + this.#overlayManager = overlayManager; + dialog.addEventListener("close", this.#close.bind(this)); + dialog.addEventListener("contextmenu", e => { + if (e.target !== this.#description) { + e.preventDefault(); + } + }); + cancelButton.addEventListener("click", this.#cancel.bind(this)); + updateButton.addEventListener("click", this.#update.bind(this)); + const clearDescription = description.lastElementChild; + clearDescription.addEventListener("click", () => { + descriptionInput.value = ""; + clearDescription.disabled = true; + updateButton.disabled = this.#previousDescription === ""; + }); + descriptionInput.addEventListener("input", () => { + const { + value + } = descriptionInput; + clearDescription.disabled = value === ""; + updateButton.disabled = value === this.#previousDescription; + editSignatureView.setAttribute("aria-label", value); + }, { + passive: true + }); + overlayManager.register(dialog); + } + async open(editor) { + this.#uiManager = editor._uiManager; + this.#currentEditor = editor; + this.#previousDescription = this.#description.value = editor.description; + this.#description.dispatchEvent(new Event("input")); + this.#uiManager.removeEditListeners(); + const { + areContours, + outline + } = editor.getSignaturePreview(); + const svgFactory = new DOMSVGFactory(); + const path = svgFactory.createElement("path"); + this.#signatureSVG.append(path); + this.#signatureSVG.setAttribute("viewBox", outline.viewBox); + path.setAttribute("d", outline.toSVGPath()); + if (areContours) { + path.classList.add("contours"); + } + await this.#overlayManager.open(this.#dialog); + } + async #update() { + this.#currentEditor._reportTelemetry({ + action: "pdfjs.signature.edit_description", + data: { + hasBeenChanged: true + } + }); + this.#currentEditor.description = this.#description.value; + this.#finish(); + } + #cancel() { + this.#currentEditor._reportTelemetry({ + action: "pdfjs.signature.edit_description", + data: { + hasBeenChanged: false + } + }); + this.#finish(); + } + #finish() { + this.#overlayManager.closeIfActive(this.#dialog); + } + #close() { + this.#uiManager?.addEditListeners(); + this.#uiManager = null; + this.#currentEditor = null; + this.#signatureSVG.firstElementChild.remove(); + } +} + +;// ./web/toolbar.js + + +class Toolbar { + #colorPicker = null; + #opts; + constructor(options, eventBus, toolbarDensity = 0) { + this.#opts = options; + this.eventBus = eventBus; + const buttons = [{ + element: options.previous, + eventName: "previouspage" + }, { + element: options.next, + eventName: "nextpage" + }, { + element: options.zoomIn, + eventName: "zoomin" + }, { + element: options.zoomOut, + eventName: "zoomout" + }, { + element: options.print, + eventName: "print" + }, { + element: options.download, + eventName: "download" + }, { + element: options.editorCommentButton, + eventName: "switchannotationeditormode", + eventDetails: { + get mode() { + const { + classList + } = options.editorCommentButton; + return classList.contains("toggled") ? AnnotationEditorType.NONE : AnnotationEditorType.POPUP; + } + } + }, { + element: options.editorFreeTextButton, + eventName: "switchannotationeditormode", + eventDetails: { + get mode() { + const { + classList + } = options.editorFreeTextButton; + return classList.contains("toggled") ? AnnotationEditorType.NONE : AnnotationEditorType.FREETEXT; + } + } + }, { + element: options.editorHighlightButton, + eventName: "switchannotationeditormode", + eventDetails: { + get mode() { + const { + classList + } = options.editorHighlightButton; + return classList.contains("toggled") ? AnnotationEditorType.NONE : AnnotationEditorType.HIGHLIGHT; + } + } + }, { + element: options.editorInkButton, + eventName: "switchannotationeditormode", + eventDetails: { + get mode() { + const { + classList + } = options.editorInkButton; + return classList.contains("toggled") ? AnnotationEditorType.NONE : AnnotationEditorType.INK; + } + } + }, { + element: options.editorStampButton, + eventName: "switchannotationeditormode", + eventDetails: { + get mode() { + const { + classList + } = options.editorStampButton; + return classList.contains("toggled") ? AnnotationEditorType.NONE : AnnotationEditorType.STAMP; + } + }, + telemetry: { + type: "editing", + data: { + action: "pdfjs.image.icon_click" + } + } + }, { + element: options.editorSignatureButton, + eventName: "switchannotationeditormode", + eventDetails: { + get mode() { + const { + classList + } = options.editorSignatureButton; + return classList.contains("toggled") ? AnnotationEditorType.NONE : AnnotationEditorType.SIGNATURE; + } + } + }]; + this.#bindListeners(buttons); + this.#updateToolbarDensity({ + value: toolbarDensity + }); + this.reset(); + } + #updateToolbarDensity({ + value + }) { + let name = "normal"; + switch (value) { + case 1: + name = "compact"; + break; + case 2: + name = "touch"; + break; + } + document.documentElement.setAttribute("data-toolbar-density", name); + } + setPageNumber(pageNumber, pageLabel) { + this.pageNumber = pageNumber; + this.pageLabel = pageLabel; + this.#updateUIState(false); + } + setPagesCount(pagesCount, hasPageLabels) { + this.pagesCount = pagesCount; + this.hasPageLabels = hasPageLabels; + this.#updateUIState(true); + } + setPageScale(pageScaleValue, pageScale) { + this.pageScaleValue = (pageScaleValue || pageScale).toString(); + this.pageScale = pageScale; + this.#updateUIState(false); + } + reset() { + this.#colorPicker = null; + this.pageNumber = 0; + this.pageLabel = null; + this.hasPageLabels = false; + this.pagesCount = 0; + this.pageScaleValue = DEFAULT_SCALE_VALUE; + this.pageScale = DEFAULT_SCALE; + this.#updateUIState(true); + this.updateLoadingIndicatorState(); + this.#editorModeChanged({ + mode: AnnotationEditorType.DISABLE + }); + } + #bindListeners(buttons) { + const { + eventBus + } = this; + const { + editorHighlightColorPicker, + editorHighlightButton, + pageNumber, + scaleSelect + } = this.#opts; + const self = this; + for (const { + element, + eventName, + eventDetails, + telemetry + } of buttons) { + element.addEventListener("click", evt => { + if (eventName !== null) { + eventBus.dispatch(eventName, { + source: this, + ...eventDetails, + isFromKeyboard: evt.detail === 0 + }); + } + if (telemetry) { + eventBus.dispatch("reporttelemetry", { + source: this, + details: telemetry + }); + } + }); + } + pageNumber.addEventListener("click", function () { + this.select(); + }); + pageNumber.addEventListener("change", function () { + eventBus.dispatch("pagenumberchanged", { + source: self, + value: this.value + }); + }); + scaleSelect.addEventListener("change", function () { + if (this.value === "custom") { + return; + } + eventBus.dispatch("scalechanged", { + source: self, + value: this.value + }); + }); + scaleSelect.addEventListener("click", function ({ + target + }) { + if (this.value === self.pageScaleValue && target.tagName.toUpperCase() === "OPTION") { + this.blur(); + } + }); + scaleSelect.oncontextmenu = noContextMenu; + eventBus._on("annotationeditormodechanged", this.#editorModeChanged.bind(this)); + eventBus._on("showannotationeditorui", ({ + mode + }) => { + switch (mode) { + case AnnotationEditorType.HIGHLIGHT: + editorHighlightButton.click(); + break; + } + }); + eventBus._on("toolbardensity", this.#updateToolbarDensity.bind(this)); + if (editorHighlightColorPicker) { + eventBus._on("annotationeditoruimanager", ({ + uiManager + }) => { + const cp = this.#colorPicker = new ColorPicker({ + uiManager + }); + uiManager.setMainHighlightColorPicker(cp); + editorHighlightColorPicker.append(cp.renderMainDropdown()); + }); + eventBus._on("mainhighlightcolorpickerupdatecolor", ({ + value + }) => { + this.#colorPicker?.updateColor(value); + }); + } + } + #editorModeChanged({ + mode + }) { + const { + editorCommentButton, + editorCommentParamsToolbar, + editorFreeTextButton, + editorFreeTextParamsToolbar, + editorHighlightButton, + editorHighlightParamsToolbar, + editorInkButton, + editorInkParamsToolbar, + editorStampButton, + editorStampParamsToolbar, + editorSignatureButton, + editorSignatureParamsToolbar + } = this.#opts; + toggleExpandedBtn(editorCommentButton, mode === AnnotationEditorType.POPUP, editorCommentParamsToolbar); + toggleExpandedBtn(editorFreeTextButton, mode === AnnotationEditorType.FREETEXT, editorFreeTextParamsToolbar); + toggleExpandedBtn(editorHighlightButton, mode === AnnotationEditorType.HIGHLIGHT, editorHighlightParamsToolbar); + toggleExpandedBtn(editorInkButton, mode === AnnotationEditorType.INK, editorInkParamsToolbar); + toggleExpandedBtn(editorStampButton, mode === AnnotationEditorType.STAMP, editorStampParamsToolbar); + toggleExpandedBtn(editorSignatureButton, mode === AnnotationEditorType.SIGNATURE, editorSignatureParamsToolbar); + editorCommentButton.disabled = editorFreeTextButton.disabled = editorHighlightButton.disabled = editorInkButton.disabled = editorStampButton.disabled = editorSignatureButton.disabled = mode === AnnotationEditorType.DISABLE; + } + #updateUIState(resetNumPages = false) { + const { + pageNumber, + pagesCount, + pageScaleValue, + pageScale + } = this; + const opts = this.#opts; + if (resetNumPages) { + if (this.hasPageLabels) { + opts.pageNumber.type = "text"; + opts.numPages.setAttribute("data-l10n-id", "pdfjs-page-of-pages"); + } else { + opts.pageNumber.type = "number"; + opts.numPages.setAttribute("data-l10n-id", "pdfjs-of-pages"); + opts.numPages.setAttribute("data-l10n-args", JSON.stringify({ + pagesCount + })); + } + opts.pageNumber.max = pagesCount; + } + if (this.hasPageLabels) { + opts.pageNumber.value = this.pageLabel; + opts.numPages.setAttribute("data-l10n-args", JSON.stringify({ + pageNumber, + pagesCount + })); + } else { + opts.pageNumber.value = pageNumber; + } + opts.previous.disabled = pageNumber <= 1; + opts.next.disabled = pageNumber >= pagesCount; + opts.zoomOut.disabled = pageScale <= MIN_SCALE; + opts.zoomIn.disabled = pageScale >= MAX_SCALE; + let predefinedValueFound = false; + for (const option of opts.scaleSelect.options) { + if (option.value !== pageScaleValue) { + option.selected = false; + continue; + } + option.selected = true; + predefinedValueFound = true; + } + if (!predefinedValueFound) { + opts.customScaleOption.selected = true; + opts.customScaleOption.setAttribute("data-l10n-args", JSON.stringify({ + scale: Math.round(pageScale * 10000) / 100 + })); + } + } + updateLoadingIndicatorState(loading = false) { + const { + pageNumber + } = this.#opts; + pageNumber.classList.toggle("loading", loading); + } +} + +;// ./web/view_history.js +const DEFAULT_VIEW_HISTORY_CACHE_SIZE = 20; +class ViewHistory { + constructor(fingerprint, cacheSize = DEFAULT_VIEW_HISTORY_CACHE_SIZE) { + this.fingerprint = fingerprint; + this.cacheSize = cacheSize; + this._initializedPromise = this._readFromStorage().then(databaseStr => { + const database = JSON.parse(databaseStr || "{}"); + let index = -1; + if (!Array.isArray(database.files)) { + database.files = []; + } else { + while (database.files.length >= this.cacheSize) { + database.files.shift(); + } + for (let i = 0, ii = database.files.length; i < ii; i++) { + const branch = database.files[i]; + if (branch.fingerprint === this.fingerprint) { + index = i; + break; + } + } + } + if (index === -1) { + index = database.files.push({ + fingerprint: this.fingerprint + }) - 1; + } + this.file = database.files[index]; + this.database = database; + }); + } + async _writeToStorage() { + const databaseStr = JSON.stringify(this.database); + localStorage.setItem("pdfjs.history", databaseStr); + } + async _readFromStorage() { + return localStorage.getItem("pdfjs.history"); + } + async set(name, val) { + await this._initializedPromise; + this.file[name] = val; + return this._writeToStorage(); + } + async setMultiple(properties) { + await this._initializedPromise; + for (const name in properties) { + this.file[name] = properties[name]; + } + return this._writeToStorage(); + } + async get(name, defaultValue) { + await this._initializedPromise; + const val = this.file[name]; + return val !== undefined ? val : defaultValue; + } + async getMultiple(properties) { + await this._initializedPromise; + const values = Object.create(null); + for (const name in properties) { + const val = this.file[name]; + values[name] = val !== undefined ? val : properties[name]; + } + return values; + } +} + +;// ./web/app.js + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +const FORCE_PAGES_LOADED_TIMEOUT = 10000; +const ViewOnLoad = { + UNKNOWN: -1, + PREVIOUS: 0, + INITIAL: 1 +}; +const PDFViewerApplication = { + initialBookmark: document.location.hash.substring(1), + _initializedCapability: { + ...Promise.withResolvers(), + settled: false + }, + appConfig: null, + pdfDocument: null, + pdfLoadingTask: null, + printService: null, + pdfViewer: null, + pdfThumbnailViewer: null, + pdfRenderingQueue: null, + pdfPresentationMode: null, + pdfDocumentProperties: null, + pdfLinkService: null, + pdfTextExtractor: null, + pdfHistory: null, + pdfSidebar: null, + pdfOutlineViewer: null, + pdfAttachmentViewer: null, + pdfLayerViewer: null, + pdfCursorTools: null, + pdfScriptingManager: null, + store: null, + downloadManager: null, + overlayManager: null, + preferences: new Preferences(), + toolbar: null, + secondaryToolbar: null, + eventBus: null, + l10n: null, + annotationEditorParams: null, + imageAltTextSettings: null, + isInitialViewSet: false, + isViewerEmbedded: window.parent !== window, + url: "", + baseUrl: "", + mlManager: null, + _downloadUrl: "", + _eventBusAbortController: null, + _windowAbortController: null, + _globalAbortController: new AbortController(), + documentInfo: null, + metadata: null, + _contentDispositionFilename: null, + _contentLength: null, + _saveInProgress: false, + _wheelUnusedTicks: 0, + _wheelUnusedFactor: 1, + _touchManager: null, + _touchUnusedTicks: 0, + _touchUnusedFactor: 1, + _PDFBug: null, + _hasAnnotationEditors: false, + _title: document.title, + _printAnnotationStoragePromise: null, + _isCtrlKeyDown: false, + _caretBrowsing: null, + _isScrolling: false, + editorUndoBar: null, + _printPermissionPromise: null, + async initialize(appConfig) { + this.appConfig = appConfig; + try { + await this.preferences.initializedPromise; + } catch (ex) { + console.error("initialize:", ex); + } + if (AppOptions.get("pdfBugEnabled")) { + await this._parseHashParams(); + } + let mode; + switch (AppOptions.get("viewerCssTheme")) { + case 1: + mode = "light"; + break; + case 2: + mode = "dark"; + break; + } + if (mode) { + docStyle.setProperty("color-scheme", mode); + } + this.l10n = await this.externalServices.createL10n(); + document.getElementsByTagName("html")[0].dir = this.l10n.getDirection(); + this.l10n.translate(appConfig.appContainer || document.documentElement); + if (this.isViewerEmbedded && AppOptions.get("externalLinkTarget") === LinkTarget.NONE) { + AppOptions.set("externalLinkTarget", LinkTarget.TOP); + } + await this._initializeViewerComponents(); + this.pdfTextExtractor = new PdfTextExtractor(this.externalServices); + this.bindEvents(); + this.bindWindowEvents(); + this._initializedCapability.settled = true; + this._initializedCapability.resolve(); + }, + async _parseHashParams() { + const hash = document.location.hash.substring(1); + if (!hash) { + return; + } + const { + mainContainer, + viewerContainer + } = this.appConfig, + params = parseQueryString(hash); + const loadPDFBug = async () => { + if (this._PDFBug) { + return; + } + const { + PDFBug + } = await import( + /*webpackIgnore: true*/ + /*@vite-ignore*/ + AppOptions.get("debuggerSrc")); + this._PDFBug = PDFBug; + }; + if (params.get("disableworker") === "true") { + try { + GlobalWorkerOptions.workerSrc ||= AppOptions.get("workerSrc"); + await import( + /*webpackIgnore: true*/ + /*@vite-ignore*/ + PDFWorker.workerSrc); + AppOptions.set("workerPort", null); + } catch (ex) { + console.error("_parseHashParams:", ex); + } + } + if (params.has("textlayer")) { + switch (params.get("textlayer")) { + case "off": + AppOptions.set("textLayerMode", TextLayerMode.DISABLE); + break; + case "visible": + case "shadow": + case "hover": + viewerContainer.classList.add(`textLayer-${params.get("textlayer")}`); + try { + await loadPDFBug(); + this._PDFBug.loadCSS(); + } catch (ex) { + console.error("_parseHashParams:", ex); + } + break; + } + } + if (params.has("pdfbug")) { + const enabled = params.get("pdfbug").split(","); + try { + await loadPDFBug(); + this._PDFBug.init(mainContainer, enabled); + } catch (ex) { + console.error("_parseHashParams:", ex); + } + const debugOpts = { + pdfBug: true, + fontExtraProperties: true + }; + if (globalThis.StepperManager?.enabled) { + debugOpts.minDurationToUpdateCanvas = 0; + } + AppOptions.setAll(debugOpts); + } + if (params.has("locale")) { + AppOptions.set("localeProperties", { + lang: params.get("locale") + }); + } + const opts = { + disableAutoFetch: x => x === "true", + disableFontFace: x => x === "true", + disableHistory: x => x === "true", + disableRange: x => x === "true", + disableStream: x => x === "true", + verbosity: x => x | 0 + }; + for (const name in opts) { + const check = opts[name], + key = name.toLowerCase(); + if (params.has(key)) { + AppOptions.set(name, check(params.get(key))); + } + } + }, + async _initializeViewerComponents() { + const { + appConfig, + externalServices, + l10n, + mlManager + } = this; + const abortSignal = this._globalAbortController.signal; + const eventBus = new EventBus(); + this.eventBus = AppOptions.eventBus = eventBus; + mlManager?.setEventBus(eventBus, abortSignal); + const overlayManager = this.overlayManager = new OverlayManager(); + const renderingQueue = this.pdfRenderingQueue = new PDFRenderingQueue(); + renderingQueue.onIdle = this._cleanup.bind(this); + const linkService = this.pdfLinkService = new PDFLinkService({ + eventBus, + externalLinkTarget: AppOptions.get("externalLinkTarget"), + externalLinkRel: AppOptions.get("externalLinkRel"), + ignoreDestinationZoom: AppOptions.get("ignoreDestinationZoom") + }); + const downloadManager = this.downloadManager = new DownloadManager(); + const findController = this.findController = new PDFFindController({ + linkService, + eventBus, + updateMatchesCountOnProgress: true + }); + const pdfScriptingManager = this.pdfScriptingManager = new PDFScriptingManager({ + eventBus, + externalServices, + docProperties: this._scriptingDocProperties.bind(this) + }); + const container = appConfig.mainContainer, + viewer = appConfig.viewerContainer; + const annotationEditorMode = AppOptions.get("annotationEditorMode"); + const hasForcedColors = AppOptions.get("forcePageColors") || window.matchMedia("(forced-colors: active)").matches; + const pageColors = hasForcedColors ? { + background: AppOptions.get("pageColorsBackground"), + foreground: AppOptions.get("pageColorsForeground") + } : null; + let altTextManager; + if (AppOptions.get("enableUpdatedAddImage")) { + altTextManager = appConfig.newAltTextDialog ? new NewAltTextManager(appConfig.newAltTextDialog, overlayManager, eventBus) : null; + } else { + altTextManager = appConfig.altTextDialog ? new AltTextManager(appConfig.altTextDialog, container, overlayManager, eventBus) : null; + } + if (appConfig.editorUndoBar) { + this.editorUndoBar = new EditorUndoBar(appConfig.editorUndoBar, eventBus); + } + const signatureManager = AppOptions.get("enableSignatureEditor") && appConfig.addSignatureDialog ? new SignatureManager(appConfig.addSignatureDialog, appConfig.editSignatureDialog, appConfig.annotationEditorParams?.editorSignatureAddSignature || null, overlayManager, l10n, externalServices.createSignatureStorage(eventBus, abortSignal), eventBus) : null; + const ltr = appConfig.viewerContainer ? getComputedStyle(appConfig.viewerContainer).direction === "ltr" : true; + const commentManager = AppOptions.get("enableComment") && appConfig.editCommentDialog ? new CommentManager(appConfig.editCommentDialog, { + learnMoreUrl: AppOptions.get("commentLearnMoreUrl"), + sidebar: appConfig.annotationEditorParams?.editorCommentsSidebar || null, + sidebarResizer: appConfig.annotationEditorParams?.editorCommentsSidebarResizer || null, + commentsList: appConfig.annotationEditorParams?.editorCommentsSidebarList || null, + commentCount: appConfig.annotationEditorParams?.editorCommentsSidebarCount || null, + sidebarTitle: appConfig.annotationEditorParams?.editorCommentsSidebarTitle || null, + closeButton: appConfig.annotationEditorParams?.editorCommentsSidebarCloseButton || null, + commentToolbarButton: appConfig.toolbar?.editorCommentButton || null + }, eventBus, linkService, overlayManager, ltr, hasForcedColors) : null; + const enableHWA = AppOptions.get("enableHWA"), + maxCanvasPixels = AppOptions.get("maxCanvasPixels"), + maxCanvasDim = AppOptions.get("maxCanvasDim"), + capCanvasAreaFactor = AppOptions.get("capCanvasAreaFactor"); + const pdfViewer = this.pdfViewer = new PDFViewer({ + container, + viewer, + viewerAlert: appConfig.viewerAlert, + eventBus, + renderingQueue, + linkService, + downloadManager, + altTextManager, + commentManager, + signatureManager, + editorUndoBar: this.editorUndoBar, + findController, + scriptingManager: AppOptions.get("enableScripting") && pdfScriptingManager, + l10n, + textLayerMode: AppOptions.get("textLayerMode"), + annotationMode: AppOptions.get("annotationMode"), + annotationEditorMode, + annotationEditorHighlightColors: AppOptions.get("highlightEditorColors"), + enableHighlightFloatingButton: AppOptions.get("enableHighlightFloatingButton"), + enableUpdatedAddImage: AppOptions.get("enableUpdatedAddImage"), + enableNewAltTextWhenAddingImage: AppOptions.get("enableNewAltTextWhenAddingImage"), + imageResourcesPath: AppOptions.get("imageResourcesPath"), + enablePrintAutoRotate: AppOptions.get("enablePrintAutoRotate"), + maxCanvasPixels, + maxCanvasDim, + capCanvasAreaFactor, + enableDetailCanvas: AppOptions.get("enableDetailCanvas"), + enablePermissions: AppOptions.get("enablePermissions"), + enableOptimizedPartialRendering: AppOptions.get("enableOptimizedPartialRendering"), + pageColors, + mlManager, + abortSignal, + enableHWA, + supportsPinchToZoom: this.supportsPinchToZoom, + enableAutoLinking: AppOptions.get("enableAutoLinking"), + minDurationToUpdateCanvas: AppOptions.get("minDurationToUpdateCanvas") + }); + renderingQueue.setViewer(pdfViewer); + linkService.setViewer(pdfViewer); + pdfScriptingManager.setViewer(pdfViewer); + if (appConfig.sidebar?.thumbnailView) { + this.pdfThumbnailViewer = new PDFThumbnailViewer({ + container: appConfig.sidebar.thumbnailView, + eventBus, + renderingQueue, + linkService, + maxCanvasPixels, + maxCanvasDim, + pageColors, + abortSignal, + enableHWA + }); + renderingQueue.setThumbnailViewer(this.pdfThumbnailViewer); + } + if (!this.isViewerEmbedded && !AppOptions.get("disableHistory")) { + this.pdfHistory = new PDFHistory({ + linkService, + eventBus + }); + linkService.setHistory(this.pdfHistory); + } + if (!this.supportsIntegratedFind && appConfig.findBar) { + this.findBar = new PDFFindBar(appConfig.findBar, appConfig.principalContainer, eventBus); + } + if (appConfig.annotationEditorParams) { + if (annotationEditorMode !== AnnotationEditorType.DISABLE) { + const editorSignatureButton = appConfig.toolbar?.editorSignatureButton; + if (editorSignatureButton && AppOptions.get("enableSignatureEditor")) { + editorSignatureButton.parentElement.hidden = false; + } + const editorCommentButton = appConfig.toolbar?.editorCommentButton; + if (editorCommentButton && AppOptions.get("enableComment")) { + editorCommentButton.parentElement.hidden = false; + } + this.annotationEditorParams = new AnnotationEditorParams(appConfig.annotationEditorParams, eventBus); + } else { + for (const id of ["editorModeButtons", "editorModeSeparator"]) { + document.getElementById(id)?.classList.add("hidden"); + } + } + } + if (mlManager && appConfig.secondaryToolbar?.imageAltTextSettingsButton) { + this.imageAltTextSettings = new ImageAltTextSettings(appConfig.altTextSettingsDialog, overlayManager, eventBus, mlManager); + } + if (appConfig.documentProperties) { + this.pdfDocumentProperties = new PDFDocumentProperties(appConfig.documentProperties, overlayManager, eventBus, l10n, () => this._docFilename, () => this._docTitle); + } + if (appConfig.secondaryToolbar?.cursorHandToolButton) { + this.pdfCursorTools = new PDFCursorTools({ + container, + eventBus, + cursorToolOnLoad: AppOptions.get("cursorToolOnLoad") + }); + } + if (appConfig.toolbar) { + this.toolbar = new Toolbar(appConfig.toolbar, eventBus, AppOptions.get("toolbarDensity")); + } + if (appConfig.secondaryToolbar) { + if (AppOptions.get("enableAltText")) { + appConfig.secondaryToolbar.imageAltTextSettingsButton?.classList.remove("hidden"); + appConfig.secondaryToolbar.imageAltTextSettingsSeparator?.classList.remove("hidden"); + } + this.secondaryToolbar = new SecondaryToolbar(appConfig.secondaryToolbar, eventBus); + } + if (this.supportsFullscreen && appConfig.secondaryToolbar?.presentationModeButton) { + this.pdfPresentationMode = new PDFPresentationMode({ + container, + pdfViewer, + eventBus + }); + } + if (appConfig.passwordOverlay) { + this.passwordPrompt = new PasswordPrompt(appConfig.passwordOverlay, overlayManager, this.isViewerEmbedded); + } + if (appConfig.sidebar?.outlineView) { + this.pdfOutlineViewer = new PDFOutlineViewer({ + container: appConfig.sidebar.outlineView, + eventBus, + l10n, + linkService, + downloadManager + }); + } + if (appConfig.sidebar?.attachmentsView) { + this.pdfAttachmentViewer = new PDFAttachmentViewer({ + container: appConfig.sidebar.attachmentsView, + eventBus, + l10n, + downloadManager + }); + } + if (appConfig.sidebar?.layersView) { + this.pdfLayerViewer = new PDFLayerViewer({ + container: appConfig.sidebar.layersView, + eventBus, + l10n + }); + } + if (appConfig.sidebar) { + this.pdfSidebar = new PDFSidebar({ + elements: appConfig.sidebar, + eventBus, + l10n + }); + this.pdfSidebar.onToggled = this.forceRendering.bind(this); + this.pdfSidebar.onUpdateThumbnails = () => { + for (const pageView of pdfViewer.getCachedPageViews()) { + if (pageView.renderingState === RenderingStates.FINISHED) { + this.pdfThumbnailViewer.getThumbnail(pageView.id - 1)?.setImage(pageView); + } + } + this.pdfThumbnailViewer.scrollThumbnailIntoView(pdfViewer.currentPageNumber); + }; + } + }, + async run(config) { + await this.initialize(config); + const { + appConfig, + eventBus + } = this; + let file; + const queryString = document.location.search.substring(1); + const params = parseQueryString(queryString); + file = params.get("file") ?? AppOptions.get("defaultUrl"); + try { + file = new URL(decodeURIComponent(file)).href; + } catch { + file = encodeURIComponent(file).replaceAll("%2F", "/"); + } + validateFileURL(file); + const fileInput = this._openFileInput = document.createElement("input"); + fileInput.id = "fileInput"; + fileInput.hidden = true; + fileInput.type = "file"; + fileInput.value = null; + document.body.append(fileInput); + fileInput.addEventListener("change", function (evt) { + const { + files + } = evt.target; + if (!files || files.length === 0) { + return; + } + eventBus.dispatch("fileinputchange", { + source: this, + fileInput: evt.target + }); + }); + appConfig.mainContainer.addEventListener("dragover", function (evt) { + for (const item of evt.dataTransfer.items) { + if (item.type === "application/pdf") { + evt.dataTransfer.dropEffect = evt.dataTransfer.effectAllowed === "copy" ? "copy" : "move"; + stopEvent(evt); + return; + } + } + }); + appConfig.mainContainer.addEventListener("drop", function (evt) { + if (evt.dataTransfer.files?.[0].type !== "application/pdf") { + return; + } + stopEvent(evt); + eventBus.dispatch("fileinputchange", { + source: this, + fileInput: evt.dataTransfer + }); + }); + if (!AppOptions.get("supportsDocumentFonts")) { + AppOptions.set("disableFontFace", true); + this.l10n.get("pdfjs-web-fonts-disabled").then(msg => { + console.warn(msg); + }); + } + const togglePrintingButtons = visible => { + appConfig.toolbar?.print?.classList.toggle("hidden", !visible); + appConfig.secondaryToolbar?.printButton.classList.toggle("hidden", !visible); + }; + if (!this.supportsPrinting) { + togglePrintingButtons(false); + } else { + eventBus.on("printingallowed", ({ + isAllowed + }) => togglePrintingButtons(isAllowed)); + } + if (!this.supportsFullscreen) { + appConfig.secondaryToolbar?.presentationModeButton.classList.add("hidden"); + } + if (this.supportsIntegratedFind) { + appConfig.findBar?.toggleButton?.classList.add("hidden"); + } + if (file) { + this.open({ + url: file + }); + } else { + this._hideViewBookmark(); + } + }, + get externalServices() { + return shadow(this, "externalServices", new ExternalServices()); + }, + get initialized() { + return this._initializedCapability.settled; + }, + get initializedPromise() { + return this._initializedCapability.promise; + }, + updateZoom(steps, scaleFactor, origin) { + if (this.pdfViewer.isInPresentationMode) { + return; + } + this.pdfViewer.updateScale({ + drawingDelay: AppOptions.get("defaultZoomDelay"), + steps, + scaleFactor, + origin + }); + }, + zoomIn() { + this.updateZoom(1); + }, + zoomOut() { + this.updateZoom(-1); + }, + zoomReset() { + if (this.pdfViewer.isInPresentationMode) { + return; + } + this.pdfViewer.currentScaleValue = DEFAULT_SCALE_VALUE; + }, + touchPinchCallback(origin, prevDistance, distance) { + if (this.supportsPinchToZoom) { + const newScaleFactor = this._accumulateFactor(this.pdfViewer.currentScale, distance / prevDistance, "_touchUnusedFactor"); + this.updateZoom(null, newScaleFactor, origin); + } else { + const PIXELS_PER_LINE_SCALE = 30; + const ticks = this._accumulateTicks((distance - prevDistance) / PIXELS_PER_LINE_SCALE, "_touchUnusedTicks"); + this.updateZoom(ticks, null, origin); + } + }, + touchPinchEndCallback() { + this._touchUnusedTicks = 0; + this._touchUnusedFactor = 1; + }, + get pagesCount() { + return this.pdfDocument ? this.pdfDocument.numPages : 0; + }, + get page() { + return this.pdfViewer.currentPageNumber; + }, + set page(val) { + this.pdfViewer.currentPageNumber = val; + }, + get supportsPrinting() { + return shadow(this, "supportsPrinting", AppOptions.get("supportsPrinting") && PDFPrintServiceFactory.supportsPrinting); + }, + get supportsFullscreen() { + return shadow(this, "supportsFullscreen", document.fullscreenEnabled); + }, + get supportsPinchToZoom() { + return shadow(this, "supportsPinchToZoom", AppOptions.get("supportsPinchToZoom")); + }, + get supportsIntegratedFind() { + return shadow(this, "supportsIntegratedFind", AppOptions.get("supportsIntegratedFind")); + }, + get loadingBar() { + const barElement = document.getElementById("loadingBar"); + const bar = barElement ? new ProgressBar(barElement) : null; + return shadow(this, "loadingBar", bar); + }, + get supportsMouseWheelZoomCtrlKey() { + return shadow(this, "supportsMouseWheelZoomCtrlKey", AppOptions.get("supportsMouseWheelZoomCtrlKey")); + }, + get supportsMouseWheelZoomMetaKey() { + return shadow(this, "supportsMouseWheelZoomMetaKey", AppOptions.get("supportsMouseWheelZoomMetaKey")); + }, + get supportsCaretBrowsingMode() { + return AppOptions.get("supportsCaretBrowsingMode"); + }, + moveCaret(isUp, select) { + this._caretBrowsing ||= new CaretBrowsingMode(this._globalAbortController.signal, this.appConfig.mainContainer, this.appConfig.viewerContainer, this.appConfig.toolbar?.container); + this._caretBrowsing.moveCaret(isUp, select); + }, + setTitleUsingUrl(url = "", downloadUrl = null) { + this.url = url; + this.baseUrl = updateUrlHash(url, "", true); + if (downloadUrl) { + this._downloadUrl = downloadUrl === url ? this.baseUrl : updateUrlHash(downloadUrl, "", true); + } + if (isDataScheme(url)) { + this._hideViewBookmark(); + } + let title = pdfjs_getPdfFilenameFromUrl(url, ""); + if (!title) { + try { + title = decodeURIComponent(getFilenameFromUrl(url)); + } catch {} + } + this.setTitle(title || url); + }, + setTitle(title = this._title) { + this._title = title; + if (this.isViewerEmbedded) { + return; + } + const editorIndicator = this._hasAnnotationEditors && !this.pdfRenderingQueue.printing; + document.title = `${editorIndicator ? "* " : ""}${title}`; + }, + get _docFilename() { + return this._contentDispositionFilename || pdfjs_getPdfFilenameFromUrl(this.url); + }, + get _docTitle() { + const { + documentInfo, + metadata + } = this; + const title = metadata?.get("dc:title"); + if (title) { + if (title !== "Untitled" && !/[\uFFF0-\uFFFF]/g.test(title)) { + return title; + } + } + return documentInfo.Title; + }, + _hideViewBookmark() { + const { + secondaryToolbar + } = this.appConfig; + secondaryToolbar?.viewBookmarkButton.classList.add("hidden"); + if (secondaryToolbar?.presentationModeButton.classList.contains("hidden")) { + document.getElementById("viewBookmarkSeparator")?.classList.add("hidden"); + } + }, + async close() { + this._unblockDocumentLoadEvent(); + this._hideViewBookmark(); + if (!this.pdfLoadingTask) { + return; + } + if (this.pdfDocument?.annotationStorage.size > 0 && this._annotationStorageModified) { + try { + await this.save(); + } catch {} + } + const promises = []; + promises.push(this.pdfLoadingTask.destroy()); + this.pdfLoadingTask = null; + if (this.pdfDocument) { + this.pdfDocument = null; + this.pdfThumbnailViewer?.setDocument(null); + this.pdfViewer.setDocument(null); + this.pdfLinkService.setDocument(null); + this.pdfDocumentProperties?.setDocument(null); + this.pdfTextExtractor?.setViewer(null); + } + this.pdfLinkService.externalLinkEnabled = true; + this.store = null; + this.isInitialViewSet = false; + this.url = ""; + this.baseUrl = ""; + this._downloadUrl = ""; + this.documentInfo = null; + this.metadata = null; + this._contentDispositionFilename = null; + this._contentLength = null; + this._saveInProgress = false; + this._hasAnnotationEditors = false; + promises.push(this.pdfScriptingManager.destroyPromise, this.passwordPrompt.close()); + this.setTitle(); + this.pdfSidebar?.reset(); + this.pdfOutlineViewer?.reset(); + this.pdfAttachmentViewer?.reset(); + this.pdfLayerViewer?.reset(); + this.pdfHistory?.reset(); + this.findBar?.reset(); + this.toolbar?.reset(); + this.secondaryToolbar?.reset(); + this._PDFBug?.cleanup(); + await Promise.all(promises); + }, + async open(args) { + if (this.pdfLoadingTask) { + await this.close(); + } + const workerParams = AppOptions.getAll(OptionKind.WORKER); + Object.assign(GlobalWorkerOptions, workerParams); + if (args.url) { + this.setTitleUsingUrl(args.originalUrl || args.url, args.url); + } + const apiParams = AppOptions.getAll(OptionKind.API); + const loadingTask = getDocument({ + ...apiParams, + ...args + }); + this.pdfLoadingTask = loadingTask; + loadingTask.onPassword = (updateCallback, reason) => { + if (this.isViewerEmbedded) { + this._unblockDocumentLoadEvent(); + } + this.pdfLinkService.externalLinkEnabled = false; + this.passwordPrompt.setUpdateCallback(updateCallback, reason); + this.passwordPrompt.open(); + }; + loadingTask.onProgress = ({ + loaded, + total + }) => { + this.progress(loaded / total); + }; + return loadingTask.promise.then(pdfDocument => { + this.load(pdfDocument); + }, reason => { + if (loadingTask !== this.pdfLoadingTask) { + return undefined; + } + let key = "pdfjs-loading-error"; + if (reason instanceof InvalidPDFException) { + key = "pdfjs-invalid-file-error"; + } else if (reason instanceof ResponseException) { + key = reason.missing ? "pdfjs-missing-file-error" : "pdfjs-unexpected-response-error"; + } + return this._documentError(key, { + message: reason.message + }).then(() => { + throw reason; + }); + }); + }, + async download() { + let data; + try { + data = await (this.pdfDocument ? this.pdfDocument.getData() : this.pdfLoadingTask.getData()); + } catch {} + this.downloadManager.download(data, this._downloadUrl, this._docFilename); + }, + async save() { + if (this._saveInProgress) { + return; + } + this._saveInProgress = true; + await this.pdfScriptingManager.dispatchWillSave(); + try { + const data = await this.pdfDocument.saveDocument(); + this.downloadManager.download(data, this._downloadUrl, this._docFilename); + } catch (reason) { + console.error(`Error when saving the document:`, reason); + await this.download(); + } finally { + await this.pdfScriptingManager.dispatchDidSave(); + this._saveInProgress = false; + } + const editorStats = this.pdfDocument?.annotationStorage.editorStats; + if (editorStats) { + this.externalServices.reportTelemetry({ + type: "editing", + data: { + type: "save", + stats: editorStats + } + }); + } + }, + async downloadOrSave() { + const { + classList + } = this.appConfig.appContainer; + classList.add("wait"); + await (this.pdfDocument?.annotationStorage.size > 0 ? this.save() : this.download()); + classList.remove("wait"); + }, + async _documentError(key, moreInfo = null) { + this._unblockDocumentLoadEvent(); + const message = await this._otherError(key || "pdfjs-loading-error", moreInfo); + this.eventBus.dispatch("documenterror", { + source: this, + message, + reason: moreInfo?.message ?? null + }); + }, + async _otherError(key, moreInfo = null) { + const message = await this.l10n.get(key); + const moreInfoText = [`PDF.js v${version || "?"} (build: ${build || "?"})`]; + if (moreInfo) { + moreInfoText.push(`Message: ${moreInfo.message}`); + if (moreInfo.stack) { + moreInfoText.push(`Stack: ${moreInfo.stack}`); + } else { + if (moreInfo.filename) { + moreInfoText.push(`File: ${moreInfo.filename}`); + } + if (moreInfo.lineNumber) { + moreInfoText.push(`Line: ${moreInfo.lineNumber}`); + } + } + } + console.error(`${message}\n\n${moreInfoText.join("\n")}`); + return message; + }, + progress(level) { + const percent = Math.round(level * 100); + if (!this.loadingBar || percent <= this.loadingBar.percent) { + return; + } + this.loadingBar.percent = percent; + if (this.pdfDocument?.loadingParams.disableAutoFetch ?? AppOptions.get("disableAutoFetch")) { + this.loadingBar.setDisableAutoFetch(); + } + }, + load(pdfDocument) { + this.pdfDocument = pdfDocument; + this._printPermissionPromise = new Promise(resolve => { + this.eventBus.on("printingallowed", ({ + isAllowed + }) => { + resolve(isAllowed); + }, { + once: true + }); + }); + pdfDocument.getDownloadInfo().then(({ + length + }) => { + this._contentLength = length; + this.loadingBar?.hide(); + firstPagePromise.then(() => { + this.eventBus.dispatch("documentloaded", { + source: this + }); + }); + }); + const pageLayoutPromise = pdfDocument.getPageLayout().catch(() => {}); + const pageModePromise = pdfDocument.getPageMode().catch(() => {}); + const openActionPromise = pdfDocument.getOpenAction().catch(() => {}); + this.toolbar?.setPagesCount(pdfDocument.numPages, false); + this.secondaryToolbar?.setPagesCount(pdfDocument.numPages); + this.pdfLinkService.setDocument(pdfDocument); + this.pdfDocumentProperties?.setDocument(pdfDocument); + const pdfViewer = this.pdfViewer; + pdfViewer.setDocument(pdfDocument); + this.pdfTextExtractor.setViewer(pdfViewer); + const { + firstPagePromise, + onePageRendered, + pagesPromise + } = pdfViewer; + this.pdfThumbnailViewer?.setDocument(pdfDocument); + const storedPromise = (this.store = new ViewHistory(pdfDocument.fingerprints[0])).getMultiple({ + page: null, + zoom: DEFAULT_SCALE_VALUE, + scrollLeft: "0", + scrollTop: "0", + rotation: null, + sidebarView: SidebarView.UNKNOWN, + scrollMode: ScrollMode.UNKNOWN, + spreadMode: SpreadMode.UNKNOWN + }).catch(() => {}); + firstPagePromise.then(pdfPage => { + this.loadingBar?.setWidth(this.appConfig.viewerContainer); + this._initializeAnnotationStorageCallbacks(pdfDocument); + Promise.all([animationStarted, storedPromise, pageLayoutPromise, pageModePromise, openActionPromise]).then(async ([timeStamp, stored, pageLayout, pageMode, openAction]) => { + const viewOnLoad = AppOptions.get("viewOnLoad"); + this._initializePdfHistory({ + fingerprint: pdfDocument.fingerprints[0], + viewOnLoad, + initialDest: openAction?.dest + }); + const initialBookmark = this.initialBookmark; + const zoom = AppOptions.get("defaultZoomValue"); + let hash = zoom ? `zoom=${zoom}` : null; + let rotation = null; + let sidebarView = AppOptions.get("sidebarViewOnLoad"); + let scrollMode = AppOptions.get("scrollModeOnLoad"); + let spreadMode = AppOptions.get("spreadModeOnLoad"); + if (stored?.page && viewOnLoad !== ViewOnLoad.INITIAL) { + hash = `page=${stored.page}&zoom=${zoom || stored.zoom},` + `${stored.scrollLeft},${stored.scrollTop}`; + rotation = parseInt(stored.rotation, 10); + if (sidebarView === SidebarView.UNKNOWN) { + sidebarView = stored.sidebarView | 0; + } + if (scrollMode === ScrollMode.UNKNOWN) { + scrollMode = stored.scrollMode | 0; + } + if (spreadMode === SpreadMode.UNKNOWN) { + spreadMode = stored.spreadMode | 0; + } + } + if (pageMode && sidebarView === SidebarView.UNKNOWN) { + sidebarView = apiPageModeToSidebarView(pageMode); + } + if (pageLayout && scrollMode === ScrollMode.UNKNOWN && spreadMode === SpreadMode.UNKNOWN) { + const modes = apiPageLayoutToViewerModes(pageLayout); + spreadMode = modes.spreadMode; + } + this.setInitialView(hash, { + rotation, + sidebarView, + scrollMode, + spreadMode + }); + this.eventBus.dispatch("documentinit", { + source: this + }); + await Promise.race([pagesPromise, new Promise(resolve => { + setTimeout(resolve, FORCE_PAGES_LOADED_TIMEOUT); + })]); + if (!initialBookmark && !hash) { + return; + } + if (pdfViewer.hasEqualPageSizes) { + return; + } + this.initialBookmark = initialBookmark; + pdfViewer.currentScaleValue = pdfViewer.currentScaleValue; + this.setInitialView(hash); + }).catch(() => { + this.setInitialView(); + }).then(function () { + pdfViewer.update(); + }); + }); + pagesPromise.then(() => { + this._unblockDocumentLoadEvent(); + this._initializeAutoPrint(pdfDocument, openActionPromise); + }, reason => { + this._documentError("pdfjs-loading-error", { + message: reason.message + }); + }); + onePageRendered.then(data => { + this.externalServices.reportTelemetry({ + type: "pageInfo", + timestamp: data.timestamp + }); + if (this.pdfOutlineViewer) { + pdfDocument.getOutline().then(outline => { + if (pdfDocument !== this.pdfDocument) { + return; + } + this.pdfOutlineViewer.render({ + outline, + pdfDocument + }); + }); + } + if (this.pdfAttachmentViewer) { + pdfDocument.getAttachments().then(attachments => { + if (pdfDocument !== this.pdfDocument) { + return; + } + this.pdfAttachmentViewer.render({ + attachments + }); + }); + } + if (this.pdfLayerViewer) { + pdfViewer.optionalContentConfigPromise.then(optionalContentConfig => { + if (pdfDocument !== this.pdfDocument) { + return; + } + this.pdfLayerViewer.render({ + optionalContentConfig, + pdfDocument + }); + }); + } + }); + this._initializePageLabels(pdfDocument); + this._initializeMetadata(pdfDocument); + }, + async _scriptingDocProperties(pdfDocument) { + if (!this.documentInfo) { + await new Promise(resolve => { + this.eventBus._on("metadataloaded", resolve, { + once: true + }); + }); + if (pdfDocument !== this.pdfDocument) { + return null; + } + } + if (!this._contentLength) { + await new Promise(resolve => { + this.eventBus._on("documentloaded", resolve, { + once: true + }); + }); + if (pdfDocument !== this.pdfDocument) { + return null; + } + } + return { + ...this.documentInfo, + baseURL: this.baseUrl, + filesize: this._contentLength, + filename: this._docFilename, + metadata: this.metadata?.getRaw(), + authors: this.metadata?.get("dc:creator"), + numPages: this.pagesCount, + URL: this.url + }; + }, + async _initializeAutoPrint(pdfDocument, openActionPromise) { + const [openAction, jsActions] = await Promise.all([openActionPromise, this.pdfViewer.enableScripting ? null : pdfDocument.getJSActions()]); + if (pdfDocument !== this.pdfDocument) { + return; + } + let triggerAutoPrint = openAction?.action === "Print"; + if (jsActions) { + console.warn("Warning: JavaScript support is not enabled"); + for (const name in jsActions) { + if (triggerAutoPrint) { + break; + } + switch (name) { + case "WillClose": + case "WillSave": + case "DidSave": + case "WillPrint": + case "DidPrint": + continue; + } + triggerAutoPrint = jsActions[name].some(js => AutoPrintRegExp.test(js)); + } + } + if (triggerAutoPrint) { + this.triggerPrinting(); + } + }, + async _initializeMetadata(pdfDocument) { + const { + info, + metadata, + contentDispositionFilename, + contentLength + } = await pdfDocument.getMetadata(); + if (pdfDocument !== this.pdfDocument) { + return; + } + this.documentInfo = info; + this.metadata = metadata; + this._contentDispositionFilename ??= contentDispositionFilename; + this._contentLength ??= contentLength; + console.log(`PDF ${pdfDocument.fingerprints[0]} [${info.PDFFormatVersion} ` + `${(metadata?.get("pdf:producer") || info.Producer || "-").trim()} / ` + `${(metadata?.get("xmp:creatortool") || info.Creator || "-").trim()}` + `] (PDF.js: ${version || "?"} [${build || "?"}])`); + const pdfTitle = this._docTitle; + if (pdfTitle) { + this.setTitle(`${pdfTitle} - ${this._contentDispositionFilename || this._title}`); + } else if (this._contentDispositionFilename) { + this.setTitle(this._contentDispositionFilename); + } + if (info.IsXFAPresent && !info.IsAcroFormPresent && !pdfDocument.isPureXfa) { + if (pdfDocument.loadingParams.enableXfa) { + console.warn("Warning: XFA Foreground documents are not supported"); + } else { + console.warn("Warning: XFA support is not enabled"); + } + } else if ((info.IsAcroFormPresent || info.IsXFAPresent) && !this.pdfViewer.renderForms) { + console.warn("Warning: Interactive form support is not enabled"); + } + if (info.IsSignaturesPresent) { + console.warn("Warning: Digital signatures validation is not supported"); + } + this.eventBus.dispatch("metadataloaded", { + source: this + }); + }, + async _initializePageLabels(pdfDocument) { + const labels = await pdfDocument.getPageLabels(); + if (pdfDocument !== this.pdfDocument) { + return; + } + if (!labels || AppOptions.get("disablePageLabels")) { + return; + } + const numLabels = labels.length; + let standardLabels = 0, + emptyLabels = 0; + for (let i = 0; i < numLabels; i++) { + const label = labels[i]; + if (label === (i + 1).toString()) { + standardLabels++; + } else if (label === "") { + emptyLabels++; + } else { + break; + } + } + if (standardLabels >= numLabels || emptyLabels >= numLabels) { + return; + } + const { + pdfViewer, + pdfThumbnailViewer, + toolbar + } = this; + pdfViewer.setPageLabels(labels); + pdfThumbnailViewer?.setPageLabels(labels); + toolbar?.setPagesCount(numLabels, true); + toolbar?.setPageNumber(pdfViewer.currentPageNumber, pdfViewer.currentPageLabel); + }, + _initializePdfHistory({ + fingerprint, + viewOnLoad, + initialDest = null + }) { + if (!this.pdfHistory) { + return; + } + this.pdfHistory.initialize({ + fingerprint, + resetHistory: viewOnLoad === ViewOnLoad.INITIAL, + updateUrl: AppOptions.get("historyUpdateUrl") + }); + if (this.pdfHistory.initialBookmark) { + this.initialBookmark = this.pdfHistory.initialBookmark; + this.initialRotation = this.pdfHistory.initialRotation; + } + if (initialDest && !this.initialBookmark && viewOnLoad === ViewOnLoad.UNKNOWN) { + this.initialBookmark = JSON.stringify(initialDest); + this.pdfHistory.push({ + explicitDest: initialDest, + pageNumber: null + }); + } + }, + _initializeAnnotationStorageCallbacks(pdfDocument) { + if (pdfDocument !== this.pdfDocument) { + return; + } + const { + annotationStorage + } = pdfDocument; + annotationStorage.onSetModified = () => { + window.addEventListener("beforeunload", beforeUnload); + this._annotationStorageModified = true; + }; + annotationStorage.onResetModified = () => { + window.removeEventListener("beforeunload", beforeUnload); + delete this._annotationStorageModified; + }; + annotationStorage.onAnnotationEditor = typeStr => { + this._hasAnnotationEditors = !!typeStr; + this.setTitle(); + }; + }, + setInitialView(storedHash, { + rotation, + sidebarView, + scrollMode, + spreadMode + } = {}) { + const setRotation = angle => { + if (isValidRotation(angle)) { + this.pdfViewer.pagesRotation = angle; + } + }; + const setViewerModes = (scroll, spread) => { + if (isValidScrollMode(scroll)) { + this.pdfViewer.scrollMode = scroll; + } + if (isValidSpreadMode(spread)) { + this.pdfViewer.spreadMode = spread; + } + }; + this.isInitialViewSet = true; + this.pdfSidebar?.setInitialView(sidebarView); + setViewerModes(scrollMode, spreadMode); + if (this.initialBookmark) { + setRotation(this.initialRotation); + delete this.initialRotation; + this.pdfLinkService.setHash(this.initialBookmark); + this.initialBookmark = null; + } else if (storedHash) { + setRotation(rotation); + this.pdfLinkService.setHash(storedHash); + } + this.toolbar?.setPageNumber(this.pdfViewer.currentPageNumber, this.pdfViewer.currentPageLabel); + this.secondaryToolbar?.setPageNumber(this.pdfViewer.currentPageNumber); + if (!this.pdfViewer.currentScaleValue) { + this.pdfViewer.currentScaleValue = DEFAULT_SCALE_VALUE; + } + }, + _cleanup() { + if (!this.pdfDocument) { + return; + } + this.pdfViewer.cleanup(); + this.pdfThumbnailViewer?.cleanup(); + this.pdfDocument.cleanup(AppOptions.get("fontExtraProperties")); + }, + forceRendering() { + this.pdfRenderingQueue.printing = !!this.printService; + this.pdfRenderingQueue.isThumbnailViewEnabled = this.pdfSidebar?.visibleView === SidebarView.THUMBS; + this.pdfRenderingQueue.renderHighestPriority(); + }, + beforePrint() { + this._printAnnotationStoragePromise = this.pdfScriptingManager.dispatchWillPrint().catch(() => {}).then(() => this.pdfDocument?.annotationStorage.print); + if (this.printService) { + return; + } + if (!this.supportsPrinting || !this.pdfViewer.printingAllowed) { + this._otherError("pdfjs-printing-not-supported"); + return; + } + if (!this.pdfViewer.pageViewsReady) { + this.l10n.get("pdfjs-printing-not-ready").then(msg => { + window.alert(msg); + }); + return; + } + this.printService = PDFPrintServiceFactory.createPrintService({ + pdfDocument: this.pdfDocument, + pagesOverview: this.pdfViewer.getPagesOverview(), + printContainer: this.appConfig.printContainer, + printResolution: AppOptions.get("printResolution"), + printAnnotationStoragePromise: this._printAnnotationStoragePromise + }); + this.forceRendering(); + this.setTitle(); + this.printService.layout(); + if (this._hasAnnotationEditors) { + this.externalServices.reportTelemetry({ + type: "editing", + data: { + type: "print", + stats: this.pdfDocument?.annotationStorage.editorStats + } + }); + } + }, + afterPrint() { + if (this._printAnnotationStoragePromise) { + this._printAnnotationStoragePromise.then(() => { + this.pdfScriptingManager.dispatchDidPrint(); + }); + this._printAnnotationStoragePromise = null; + } + if (this.printService) { + this.printService.destroy(); + this.printService = null; + this.pdfDocument?.annotationStorage.resetModified(); + } + this.forceRendering(); + this.setTitle(); + }, + rotatePages(delta) { + this.pdfViewer.pagesRotation += delta; + }, + requestPresentationMode() { + this.pdfPresentationMode?.request(); + }, + async triggerPrinting() { + if (this.supportsPrinting && (await this._printPermissionPromise)) { + window.print(); + } + }, + bindEvents() { + if (this._eventBusAbortController) { + return; + } + const ac = this._eventBusAbortController = new AbortController(); + const opts = { + signal: ac.signal + }; + const { + eventBus, + externalServices, + pdfDocumentProperties, + pdfViewer, + preferences + } = this; + eventBus._on("resize", onResize.bind(this), opts); + eventBus._on("hashchange", onHashchange.bind(this), opts); + eventBus._on("beforeprint", this.beforePrint.bind(this), opts); + eventBus._on("afterprint", this.afterPrint.bind(this), opts); + eventBus._on("pagerender", onPageRender.bind(this), opts); + eventBus._on("pagerendered", onPageRendered.bind(this), opts); + eventBus._on("updateviewarea", onUpdateViewarea.bind(this), opts); + eventBus._on("pagechanging", onPageChanging.bind(this), opts); + eventBus._on("scalechanging", onScaleChanging.bind(this), opts); + eventBus._on("rotationchanging", onRotationChanging.bind(this), opts); + eventBus._on("sidebarviewchanged", onSidebarViewChanged.bind(this), opts); + eventBus._on("pagemode", onPageMode.bind(this), opts); + eventBus._on("namedaction", onNamedAction.bind(this), opts); + eventBus._on("presentationmodechanged", evt => pdfViewer.presentationModeState = evt.state, opts); + eventBus._on("presentationmode", this.requestPresentationMode.bind(this), opts); + eventBus._on("switchannotationeditormode", evt => pdfViewer.annotationEditorMode = evt, opts); + eventBus._on("print", this.triggerPrinting.bind(this), opts); + eventBus._on("download", this.downloadOrSave.bind(this), opts); + eventBus._on("firstpage", () => this.page = 1, opts); + eventBus._on("lastpage", () => this.page = this.pagesCount, opts); + eventBus._on("nextpage", () => pdfViewer.nextPage(), opts); + eventBus._on("previouspage", () => pdfViewer.previousPage(), opts); + eventBus._on("zoomin", this.zoomIn.bind(this), opts); + eventBus._on("zoomout", this.zoomOut.bind(this), opts); + eventBus._on("zoomreset", this.zoomReset.bind(this), opts); + eventBus._on("pagenumberchanged", onPageNumberChanged.bind(this), opts); + eventBus._on("scalechanged", evt => pdfViewer.currentScaleValue = evt.value, opts); + eventBus._on("rotatecw", this.rotatePages.bind(this, 90), opts); + eventBus._on("rotateccw", this.rotatePages.bind(this, -90), opts); + eventBus._on("optionalcontentconfig", evt => pdfViewer.optionalContentConfigPromise = evt.promise, opts); + eventBus._on("switchscrollmode", evt => pdfViewer.scrollMode = evt.mode, opts); + eventBus._on("scrollmodechanged", onViewerModesChanged.bind(this, "scrollMode"), opts); + eventBus._on("switchspreadmode", evt => pdfViewer.spreadMode = evt.mode, opts); + eventBus._on("spreadmodechanged", onViewerModesChanged.bind(this, "spreadMode"), opts); + eventBus._on("imagealttextsettings", onImageAltTextSettings.bind(this), opts); + eventBus._on("documentproperties", () => pdfDocumentProperties?.open(), opts); + eventBus._on("findfromurlhash", onFindFromUrlHash.bind(this), opts); + eventBus._on("updatefindmatchescount", onUpdateFindMatchesCount.bind(this), opts); + eventBus._on("updatefindcontrolstate", onUpdateFindControlState.bind(this), opts); + eventBus._on("fileinputchange", onFileInputChange.bind(this), opts); + eventBus._on("openfile", onOpenFile.bind(this), opts); + }, + bindWindowEvents() { + if (this._windowAbortController) { + return; + } + this._windowAbortController = new AbortController(); + const { + eventBus, + appConfig: { + mainContainer + }, + pdfViewer, + _windowAbortController: { + signal + } + } = this; + this._touchManager = new TouchManager({ + container: window, + isPinchingDisabled: () => pdfViewer.isInPresentationMode, + isPinchingStopped: () => this.overlayManager?.active, + onPinching: this.touchPinchCallback.bind(this), + onPinchEnd: this.touchPinchEndCallback.bind(this), + signal + }); + function addWindowResolutionChange(evt = null) { + if (evt) { + pdfViewer.refresh(); + } + const mediaQueryList = window.matchMedia(`(resolution: ${OutputScale.pixelRatio}dppx)`); + mediaQueryList.addEventListener("change", addWindowResolutionChange, { + once: true, + signal + }); + } + addWindowResolutionChange(); + window.addEventListener("wheel", onWheel.bind(this), { + passive: false, + signal + }); + window.addEventListener("click", onClick.bind(this), { + signal + }); + window.addEventListener("keydown", onKeyDown.bind(this), { + signal + }); + window.addEventListener("keyup", onKeyUp.bind(this), { + signal + }); + window.addEventListener("resize", () => eventBus.dispatch("resize", { + source: window + }), { + signal + }); + window.addEventListener("hashchange", () => { + eventBus.dispatch("hashchange", { + source: window, + hash: document.location.hash.substring(1) + }); + }, { + signal + }); + window.addEventListener("beforeprint", () => eventBus.dispatch("beforeprint", { + source: window + }), { + signal + }); + window.addEventListener("afterprint", () => eventBus.dispatch("afterprint", { + source: window + }), { + signal + }); + window.addEventListener("updatefromsandbox", evt => { + eventBus.dispatch("updatefromsandbox", { + source: window, + detail: evt.detail + }); + }, { + signal + }); + if (!("onscrollend" in document.documentElement)) { + return; + } + ({ + scrollTop: this._lastScrollTop, + scrollLeft: this._lastScrollLeft + } = mainContainer); + let scrollendTimeoutID, scrollAbortController; + const scrollend = () => { + ({ + scrollTop: this._lastScrollTop, + scrollLeft: this._lastScrollLeft + } = mainContainer); + clearTimeout(scrollendTimeoutID); + if (this._isScrolling) { + scrollAbortController.abort(); + scrollAbortController = null; + this._isScrolling = false; + } + }; + const scroll = () => { + if (this._isCtrlKeyDown) { + return; + } + if (this._lastScrollTop === mainContainer.scrollTop && this._lastScrollLeft === mainContainer.scrollLeft) { + return; + } + if (!this._isScrolling) { + scrollAbortController = new AbortController(); + const abortSignal = AbortSignal.any([scrollAbortController.signal, signal]); + mainContainer.addEventListener("scrollend", scrollend, { + signal: abortSignal + }); + mainContainer.addEventListener("blur", scrollend, { + signal: abortSignal + }); + this._isScrolling = true; + } + clearTimeout(scrollendTimeoutID); + scrollendTimeoutID = setTimeout(scrollend, 100); + }; + mainContainer.addEventListener("scroll", scroll, { + passive: true, + signal + }); + }, + unbindEvents() { + this._eventBusAbortController?.abort(); + this._eventBusAbortController = null; + }, + unbindWindowEvents() { + this._windowAbortController?.abort(); + this._windowAbortController = null; + this._touchManager = null; + }, + async testingClose() { + this.unbindEvents(); + this.unbindWindowEvents(); + this._globalAbortController?.abort(); + this._globalAbortController = null; + this.findBar?.close(); + await Promise.all([this.l10n?.destroy(), this.close()]); + }, + _accumulateTicks(ticks, prop) { + if (this[prop] > 0 && ticks < 0 || this[prop] < 0 && ticks > 0) { + this[prop] = 0; + } + this[prop] += ticks; + const wholeTicks = Math.trunc(this[prop]); + this[prop] -= wholeTicks; + return wholeTicks; + }, + _accumulateFactor(previousScale, factor, prop) { + if (factor === 1) { + return 1; + } + if (this[prop] > 1 && factor < 1 || this[prop] < 1 && factor > 1) { + this[prop] = 1; + } + const newFactor = Math.floor(previousScale * factor * this[prop] * 100) / (100 * previousScale); + this[prop] = factor / newFactor; + return newFactor; + }, + _unblockDocumentLoadEvent() { + document.blockUnblockOnload?.(false); + this._unblockDocumentLoadEvent = () => {}; + }, + get scriptingReady() { + return this.pdfScriptingManager.ready; + } +}; +initCom(PDFViewerApplication); +{ + PDFPrintServiceFactory.initGlobals(PDFViewerApplication); +} +{ + const HOSTED_VIEWER_ORIGINS = new Set(["null", "http://mozilla.github.io", "https://mozilla.github.io"]); + var validateFileURL = function (file) { + if (!file) { + return; + } + const viewerOrigin = URL.parse(window.location)?.origin || "null"; + if (HOSTED_VIEWER_ORIGINS.has(viewerOrigin)) { + return; + } + const fileOrigin = URL.parse(file, window.location)?.origin; + if (fileOrigin === viewerOrigin) { + return; + } + const ex = new Error("file origin does not match viewer's"); + PDFViewerApplication._documentError("pdfjs-loading-error", { + message: ex.message + }); + throw ex; + }; + var onFileInputChange = function (evt) { + if (this.pdfViewer?.isInPresentationMode) { + return; + } + const file = evt.fileInput.files[0]; + this.open({ + url: URL.createObjectURL(file), + originalUrl: encodeURIComponent(file.name) + }); + }; + var onOpenFile = function (evt) { + this._openFileInput?.click(); + }; +} +function onPageRender({ + pageNumber +}) { + if (pageNumber === this.page) { + this.toolbar?.updateLoadingIndicatorState(true); + } +} +function onPageRendered({ + pageNumber, + isDetailView, + error +}) { + if (pageNumber === this.page) { + this.toolbar?.updateLoadingIndicatorState(false); + } + if (!isDetailView && this.pdfSidebar?.visibleView === SidebarView.THUMBS) { + const pageView = this.pdfViewer.getPageView(pageNumber - 1); + const thumbnailView = this.pdfThumbnailViewer?.getThumbnail(pageNumber - 1); + if (pageView) { + thumbnailView?.setImage(pageView); + } + } + if (error) { + this._otherError("pdfjs-rendering-error", error); + } +} +function onPageMode({ + mode +}) { + let view; + switch (mode) { + case "thumbs": + view = SidebarView.THUMBS; + break; + case "bookmarks": + case "outline": + view = SidebarView.OUTLINE; + break; + case "attachments": + view = SidebarView.ATTACHMENTS; + break; + case "layers": + view = SidebarView.LAYERS; + break; + case "none": + view = SidebarView.NONE; + break; + default: + console.error('Invalid "pagemode" hash parameter: ' + mode); + return; + } + this.pdfSidebar?.switchView(view, true); +} +function onNamedAction(evt) { + switch (evt.action) { + case "GoToPage": + this.appConfig.toolbar?.pageNumber.select(); + break; + case "Find": + if (!this.supportsIntegratedFind) { + this.findBar?.toggle(); + } + break; + case "Print": + this.triggerPrinting(); + break; + case "SaveAs": + this.downloadOrSave(); + break; + } +} +function onSidebarViewChanged({ + view +}) { + this.pdfRenderingQueue.isThumbnailViewEnabled = view === SidebarView.THUMBS; + if (this.isInitialViewSet) { + this.store?.set("sidebarView", view).catch(() => {}); + } +} +function onUpdateViewarea({ + location +}) { + if (this.isInitialViewSet) { + this.store?.setMultiple({ + page: location.pageNumber, + zoom: location.scale, + scrollLeft: location.left, + scrollTop: location.top, + rotation: location.rotation + }).catch(() => {}); + } + if (this.appConfig.secondaryToolbar) { + this.appConfig.secondaryToolbar.viewBookmarkButton.href = this.pdfLinkService.getAnchorUrl(location.pdfOpenParams); + } +} +function onViewerModesChanged(name, evt) { + if (this.isInitialViewSet && !this.pdfViewer.isInPresentationMode) { + this.store?.set(name, evt.mode).catch(() => {}); + } +} +function onResize() { + const { + pdfDocument, + pdfViewer, + pdfRenderingQueue + } = this; + if (pdfRenderingQueue.printing && window.matchMedia("print").matches) { + return; + } + if (!pdfDocument) { + return; + } + const currentScaleValue = pdfViewer.currentScaleValue; + if (currentScaleValue === "auto" || currentScaleValue === "page-fit" || currentScaleValue === "page-width") { + pdfViewer.currentScaleValue = currentScaleValue; + } + pdfViewer.update(); +} +function onHashchange(evt) { + const hash = evt.hash; + if (!hash) { + return; + } + if (!this.isInitialViewSet) { + this.initialBookmark = hash; + } else if (!this.pdfHistory?.popStateInProgress) { + this.pdfLinkService.setHash(hash); + } +} +function onPageNumberChanged(evt) { + const { + pdfViewer + } = this; + if (evt.value !== "") { + this.pdfLinkService.goToPage(evt.value); + } + if (evt.value !== pdfViewer.currentPageNumber.toString() && evt.value !== pdfViewer.currentPageLabel) { + this.toolbar?.setPageNumber(pdfViewer.currentPageNumber, pdfViewer.currentPageLabel); + } +} +function onImageAltTextSettings() { + this.imageAltTextSettings?.open({ + enableGuessAltText: AppOptions.get("enableGuessAltText"), + enableNewAltTextWhenAddingImage: AppOptions.get("enableNewAltTextWhenAddingImage") + }); +} +function onFindFromUrlHash(evt) { + this.eventBus.dispatch("find", { + source: evt.source, + type: "", + query: evt.query, + caseSensitive: false, + entireWord: false, + highlightAll: true, + findPrevious: false, + matchDiacritics: true + }); +} +function onUpdateFindMatchesCount({ + matchesCount +}) { + if (this.supportsIntegratedFind) { + this.externalServices.updateFindMatchesCount(matchesCount); + } else { + this.findBar?.updateResultsCount(matchesCount); + } +} +function onUpdateFindControlState({ + state, + previous, + entireWord, + matchesCount, + rawQuery +}) { + if (this.supportsIntegratedFind) { + this.externalServices.updateFindControlState({ + result: state, + findPrevious: previous, + entireWord, + matchesCount, + rawQuery + }); + } else { + this.findBar?.updateUIState(state, previous, matchesCount); + } +} +function onScaleChanging(evt) { + this.toolbar?.setPageScale(evt.presetValue, evt.scale); + this.pdfViewer.update(); +} +function onRotationChanging(evt) { + if (this.pdfThumbnailViewer) { + this.pdfThumbnailViewer.pagesRotation = evt.pagesRotation; + } + this.forceRendering(); + this.pdfViewer.currentPageNumber = evt.pageNumber; +} +function onPageChanging({ + pageNumber, + pageLabel +}) { + this.toolbar?.setPageNumber(pageNumber, pageLabel); + this.secondaryToolbar?.setPageNumber(pageNumber); + if (this.pdfSidebar?.visibleView === SidebarView.THUMBS) { + this.pdfThumbnailViewer?.scrollThumbnailIntoView(pageNumber); + } + const currentPage = this.pdfViewer.getPageView(pageNumber - 1); + this.toolbar?.updateLoadingIndicatorState(currentPage?.renderingState === RenderingStates.RUNNING); +} +function onWheel(evt) { + const { + pdfViewer, + supportsMouseWheelZoomCtrlKey, + supportsMouseWheelZoomMetaKey, + supportsPinchToZoom + } = this; + if (pdfViewer.isInPresentationMode) { + return; + } + const deltaMode = evt.deltaMode; + let scaleFactor = Math.exp(-evt.deltaY / 100); + const isBuiltInMac = false; + const isPinchToZoom = evt.ctrlKey && !this._isCtrlKeyDown && deltaMode === WheelEvent.DOM_DELTA_PIXEL && evt.deltaX === 0 && (Math.abs(scaleFactor - 1) < 0.05 || isBuiltInMac) && evt.deltaZ === 0; + const origin = [evt.clientX, evt.clientY]; + if (isPinchToZoom || evt.ctrlKey && supportsMouseWheelZoomCtrlKey || evt.metaKey && supportsMouseWheelZoomMetaKey) { + evt.preventDefault(); + if (this._isScrolling || document.visibilityState === "hidden" || this.overlayManager.active) { + return; + } + if (isPinchToZoom && supportsPinchToZoom) { + scaleFactor = this._accumulateFactor(pdfViewer.currentScale, scaleFactor, "_wheelUnusedFactor"); + this.updateZoom(null, scaleFactor, origin); + } else { + const delta = normalizeWheelEventDirection(evt); + let ticks = 0; + if (deltaMode === WheelEvent.DOM_DELTA_LINE || deltaMode === WheelEvent.DOM_DELTA_PAGE) { + ticks = Math.abs(delta) >= 1 ? Math.sign(delta) : this._accumulateTicks(delta, "_wheelUnusedTicks"); + } else { + const PIXELS_PER_LINE_SCALE = 30; + ticks = this._accumulateTicks(delta / PIXELS_PER_LINE_SCALE, "_wheelUnusedTicks"); + } + this.updateZoom(ticks, null, origin); + } + } +} +function closeSecondaryToolbar({ + target +}) { + if (!this.secondaryToolbar?.isOpen) { + return; + } + const { + toolbar, + secondaryToolbar + } = this.appConfig; + if (this.pdfViewer.containsElement(target) || toolbar?.container.contains(target) && !secondaryToolbar?.toolbar.contains(target) && !secondaryToolbar?.toggleButton.contains(target)) { + this.secondaryToolbar.close(); + } +} +function closeEditorUndoBar(evt) { + if (!this.editorUndoBar?.isOpen) { + return; + } + if (this.appConfig.secondaryToolbar?.toolbar.contains(evt.target)) { + this.editorUndoBar.hide(); + } +} +function onClick(evt) { + closeSecondaryToolbar.call(this, evt); + closeEditorUndoBar.call(this, evt); +} +function onKeyUp(evt) { + if (evt.key === "Control") { + this._isCtrlKeyDown = false; + } +} +function onKeyDown(evt) { + this._isCtrlKeyDown = evt.key === "Control"; + if (this.editorUndoBar?.isOpen && evt.keyCode !== 9 && evt.keyCode !== 16 && !((evt.keyCode === 13 || evt.keyCode === 32) && getActiveOrFocusedElement() === this.appConfig.editorUndoBar.undoButton)) { + this.editorUndoBar.hide(); + } + if (this.overlayManager.active) { + return; + } + const { + eventBus, + pdfViewer + } = this; + const isViewerInPresentationMode = pdfViewer.isInPresentationMode; + let handled = false, + ensureViewerFocused = false; + const cmd = (evt.ctrlKey ? 1 : 0) | (evt.altKey ? 2 : 0) | (evt.shiftKey ? 4 : 0) | (evt.metaKey ? 8 : 0); + if (cmd === 1 || cmd === 8 || cmd === 5 || cmd === 12) { + switch (evt.keyCode) { + case 70: + if (!this.supportsIntegratedFind && !evt.shiftKey) { + this.findBar?.open(); + handled = true; + } + break; + case 71: + if (!this.supportsIntegratedFind) { + const { + state + } = this.findController; + if (state) { + const newState = { + source: window, + type: "again", + findPrevious: cmd === 5 || cmd === 12 + }; + eventBus.dispatch("find", { + ...state, + ...newState + }); + } + handled = true; + } + break; + case 61: + case 107: + case 187: + case 171: + this.zoomIn(); + handled = true; + break; + case 173: + case 109: + case 189: + this.zoomOut(); + handled = true; + break; + case 48: + case 96: + if (!isViewerInPresentationMode) { + setTimeout(() => { + this.zoomReset(); + }); + handled = false; + } + break; + case 38: + if (isViewerInPresentationMode || this.page > 1) { + this.page = 1; + handled = true; + ensureViewerFocused = true; + } + break; + case 40: + if (isViewerInPresentationMode || this.page < this.pagesCount) { + this.page = this.pagesCount; + handled = true; + ensureViewerFocused = true; + } + break; + } + } + if (cmd === 1 || cmd === 8) { + switch (evt.keyCode) { + case 83: + eventBus.dispatch("download", { + source: window + }); + handled = true; + break; + case 79: + { + eventBus.dispatch("openfile", { + source: window + }); + handled = true; + } + break; + } + } + if (cmd === 3 || cmd === 10) { + switch (evt.keyCode) { + case 80: + this.requestPresentationMode(); + handled = true; + this.externalServices.reportTelemetry({ + type: "buttons", + data: { + id: "presentationModeKeyboard" + } + }); + break; + case 71: + if (this.appConfig.toolbar) { + this.appConfig.toolbar.pageNumber.select(); + handled = true; + } + break; + } + } + if (handled) { + if (ensureViewerFocused && !isViewerInPresentationMode) { + pdfViewer.focus(); + } + evt.preventDefault(); + return; + } + const curElement = getActiveOrFocusedElement(); + const curElementTagName = curElement?.tagName.toUpperCase(); + if (curElementTagName === "INPUT" || curElementTagName === "TEXTAREA" || curElementTagName === "SELECT" || curElementTagName === "BUTTON" && evt.keyCode === 32 || curElement?.isContentEditable) { + if (evt.keyCode !== 27) { + return; + } + } + if (cmd === 0) { + let turnPage = 0, + turnOnlyIfPageFit = false; + switch (evt.keyCode) { + case 38: + if (this.supportsCaretBrowsingMode) { + this.moveCaret(true, false); + handled = true; + break; + } + case 33: + if (pdfViewer.isVerticalScrollbarEnabled) { + turnOnlyIfPageFit = true; + } + turnPage = -1; + break; + case 8: + if (!isViewerInPresentationMode) { + turnOnlyIfPageFit = true; + } + turnPage = -1; + break; + case 37: + if (this.supportsCaretBrowsingMode) { + return; + } + if (pdfViewer.isHorizontalScrollbarEnabled) { + turnOnlyIfPageFit = true; + } + case 75: + case 80: + turnPage = -1; + break; + case 27: + if (this.secondaryToolbar?.isOpen) { + this.secondaryToolbar.close(); + handled = true; + } + if (!this.supportsIntegratedFind && this.findBar?.opened) { + this.findBar.close(); + handled = true; + } + break; + case 40: + if (this.supportsCaretBrowsingMode) { + this.moveCaret(false, false); + handled = true; + break; + } + case 34: + if (pdfViewer.isVerticalScrollbarEnabled) { + turnOnlyIfPageFit = true; + } + turnPage = 1; + break; + case 32: + if (!isViewerInPresentationMode) { + turnOnlyIfPageFit = true; + } + turnPage = 1; + break; + case 39: + if (this.supportsCaretBrowsingMode) { + return; + } + if (pdfViewer.isHorizontalScrollbarEnabled) { + turnOnlyIfPageFit = true; + } + case 74: + case 78: + turnPage = 1; + break; + case 36: + if (isViewerInPresentationMode || this.page > 1) { + this.page = 1; + handled = true; + ensureViewerFocused = true; + } + break; + case 35: + if (isViewerInPresentationMode || this.page < this.pagesCount) { + this.page = this.pagesCount; + handled = true; + ensureViewerFocused = true; + } + break; + case 83: + this.pdfCursorTools?.switchTool(CursorTool.SELECT); + break; + case 72: + this.pdfCursorTools?.switchTool(CursorTool.HAND); + break; + case 82: + this.rotatePages(90); + break; + case 115: + this.pdfSidebar?.toggle(); + break; + } + if (turnPage !== 0 && (!turnOnlyIfPageFit || pdfViewer.currentScaleValue === "page-fit")) { + if (turnPage > 0) { + pdfViewer.nextPage(); + } else { + pdfViewer.previousPage(); + } + handled = true; + } + } + if (cmd === 4) { + switch (evt.keyCode) { + case 32: + if (!isViewerInPresentationMode && pdfViewer.currentScaleValue !== "page-fit") { + break; + } + pdfViewer.previousPage(); + handled = true; + break; + case 38: + this.moveCaret(true, true); + handled = true; + break; + case 40: + this.moveCaret(false, true); + handled = true; + break; + case 82: + this.rotatePages(-90); + break; + } + } + if (!handled && !isViewerInPresentationMode) { + if (evt.keyCode >= 33 && evt.keyCode <= 40 || evt.keyCode === 32 && curElementTagName !== "BUTTON") { + ensureViewerFocused = true; + } + } + if (ensureViewerFocused && !pdfViewer.containsElement(curElement)) { + pdfViewer.focus(); + } + if (handled) { + evt.preventDefault(); + } +} +function beforeUnload(evt) { + evt.preventDefault(); + evt.returnValue = ""; + return false; +} + +;// ./web/viewer.js + + + + +const AppConstants = { + LinkTarget: LinkTarget, + RenderingStates: RenderingStates, + ScrollMode: ScrollMode, + SpreadMode: SpreadMode +}; +window.PDFViewerApplication = PDFViewerApplication; +window.PDFViewerApplicationConstants = AppConstants; +window.PDFViewerApplicationOptions = AppOptions; +function getViewerConfiguration() { + return { + appContainer: document.body, + principalContainer: document.getElementById("mainContainer"), + mainContainer: document.getElementById("viewerContainer"), + viewerContainer: document.getElementById("viewer"), + viewerAlert: document.getElementById("viewer-alert"), + toolbar: { + container: document.getElementById("toolbarContainer"), + numPages: document.getElementById("numPages"), + pageNumber: document.getElementById("pageNumber"), + scaleSelect: document.getElementById("scaleSelect"), + customScaleOption: document.getElementById("customScaleOption"), + previous: document.getElementById("previous"), + next: document.getElementById("next"), + zoomIn: document.getElementById("zoomInButton"), + zoomOut: document.getElementById("zoomOutButton"), + print: document.getElementById("printButton"), + editorCommentButton: document.getElementById("editorCommentButton"), + editorCommentParamsToolbar: document.getElementById("editorCommentParamsToolbar"), + editorFreeTextButton: document.getElementById("editorFreeTextButton"), + editorFreeTextParamsToolbar: document.getElementById("editorFreeTextParamsToolbar"), + editorHighlightButton: document.getElementById("editorHighlightButton"), + editorHighlightParamsToolbar: document.getElementById("editorHighlightParamsToolbar"), + editorHighlightColorPicker: document.getElementById("editorHighlightColorPicker"), + editorInkButton: document.getElementById("editorInkButton"), + editorInkParamsToolbar: document.getElementById("editorInkParamsToolbar"), + editorStampButton: document.getElementById("editorStampButton"), + editorStampParamsToolbar: document.getElementById("editorStampParamsToolbar"), + editorSignatureButton: document.getElementById("editorSignatureButton"), + editorSignatureParamsToolbar: document.getElementById("editorSignatureParamsToolbar"), + download: document.getElementById("downloadButton") + }, + secondaryToolbar: { + toolbar: document.getElementById("secondaryToolbar"), + toggleButton: document.getElementById("secondaryToolbarToggleButton"), + presentationModeButton: document.getElementById("presentationMode"), + openFileButton: document.getElementById("secondaryOpenFile"), + printButton: document.getElementById("secondaryPrint"), + downloadButton: document.getElementById("secondaryDownload"), + viewBookmarkButton: document.getElementById("viewBookmark"), + firstPageButton: document.getElementById("firstPage"), + lastPageButton: document.getElementById("lastPage"), + pageRotateCwButton: document.getElementById("pageRotateCw"), + pageRotateCcwButton: document.getElementById("pageRotateCcw"), + cursorSelectToolButton: document.getElementById("cursorSelectTool"), + cursorHandToolButton: document.getElementById("cursorHandTool"), + scrollPageButton: document.getElementById("scrollPage"), + scrollVerticalButton: document.getElementById("scrollVertical"), + scrollHorizontalButton: document.getElementById("scrollHorizontal"), + scrollWrappedButton: document.getElementById("scrollWrapped"), + spreadNoneButton: document.getElementById("spreadNone"), + spreadOddButton: document.getElementById("spreadOdd"), + spreadEvenButton: document.getElementById("spreadEven"), + imageAltTextSettingsButton: document.getElementById("imageAltTextSettings"), + imageAltTextSettingsSeparator: document.getElementById("imageAltTextSettingsSeparator"), + documentPropertiesButton: document.getElementById("documentProperties") + }, + sidebar: { + outerContainer: document.getElementById("outerContainer"), + sidebarContainer: document.getElementById("sidebarContainer"), + toggleButton: document.getElementById("sidebarToggleButton"), + resizer: document.getElementById("sidebarResizer"), + thumbnailButton: document.getElementById("viewThumbnail"), + outlineButton: document.getElementById("viewOutline"), + attachmentsButton: document.getElementById("viewAttachments"), + layersButton: document.getElementById("viewLayers"), + thumbnailView: document.getElementById("thumbnailView"), + outlineView: document.getElementById("outlineView"), + attachmentsView: document.getElementById("attachmentsView"), + layersView: document.getElementById("layersView"), + currentOutlineItemButton: document.getElementById("currentOutlineItem") + }, + findBar: { + bar: document.getElementById("findbar"), + toggleButton: document.getElementById("viewFindButton"), + findField: document.getElementById("findInput"), + highlightAllCheckbox: document.getElementById("findHighlightAll"), + caseSensitiveCheckbox: document.getElementById("findMatchCase"), + matchDiacriticsCheckbox: document.getElementById("findMatchDiacritics"), + entireWordCheckbox: document.getElementById("findEntireWord"), + findMsg: document.getElementById("findMsg"), + findResultsCount: document.getElementById("findResultsCount"), + findPreviousButton: document.getElementById("findPreviousButton"), + findNextButton: document.getElementById("findNextButton") + }, + passwordOverlay: { + dialog: document.getElementById("passwordDialog"), + label: document.getElementById("passwordText"), + input: document.getElementById("password"), + submitButton: document.getElementById("passwordSubmit"), + cancelButton: document.getElementById("passwordCancel") + }, + documentProperties: { + dialog: document.getElementById("documentPropertiesDialog"), + closeButton: document.getElementById("documentPropertiesClose"), + fields: { + fileName: document.getElementById("fileNameField"), + fileSize: document.getElementById("fileSizeField"), + title: document.getElementById("titleField"), + author: document.getElementById("authorField"), + subject: document.getElementById("subjectField"), + keywords: document.getElementById("keywordsField"), + creationDate: document.getElementById("creationDateField"), + modificationDate: document.getElementById("modificationDateField"), + creator: document.getElementById("creatorField"), + producer: document.getElementById("producerField"), + version: document.getElementById("versionField"), + pageCount: document.getElementById("pageCountField"), + pageSize: document.getElementById("pageSizeField"), + linearized: document.getElementById("linearizedField") + } + }, + altTextDialog: { + dialog: document.getElementById("altTextDialog"), + optionDescription: document.getElementById("descriptionButton"), + optionDecorative: document.getElementById("decorativeButton"), + textarea: document.getElementById("descriptionTextarea"), + cancelButton: document.getElementById("altTextCancel"), + saveButton: document.getElementById("altTextSave") + }, + newAltTextDialog: { + dialog: document.getElementById("newAltTextDialog"), + title: document.getElementById("newAltTextTitle"), + descriptionContainer: document.getElementById("newAltTextDescriptionContainer"), + textarea: document.getElementById("newAltTextDescriptionTextarea"), + disclaimer: document.getElementById("newAltTextDisclaimer"), + learnMore: document.getElementById("newAltTextLearnMore"), + imagePreview: document.getElementById("newAltTextImagePreview"), + createAutomatically: document.getElementById("newAltTextCreateAutomatically"), + createAutomaticallyButton: document.getElementById("newAltTextCreateAutomaticallyButton"), + downloadModel: document.getElementById("newAltTextDownloadModel"), + downloadModelDescription: document.getElementById("newAltTextDownloadModelDescription"), + error: document.getElementById("newAltTextError"), + errorCloseButton: document.getElementById("newAltTextCloseButton"), + cancelButton: document.getElementById("newAltTextCancel"), + notNowButton: document.getElementById("newAltTextNotNow"), + saveButton: document.getElementById("newAltTextSave") + }, + altTextSettingsDialog: { + dialog: document.getElementById("altTextSettingsDialog"), + createModelButton: document.getElementById("createModelButton"), + aiModelSettings: document.getElementById("aiModelSettings"), + learnMore: document.getElementById("altTextSettingsLearnMore"), + deleteModelButton: document.getElementById("deleteModelButton"), + downloadModelButton: document.getElementById("downloadModelButton"), + showAltTextDialogButton: document.getElementById("showAltTextDialogButton"), + altTextSettingsCloseButton: document.getElementById("altTextSettingsCloseButton"), + closeButton: document.getElementById("altTextSettingsCloseButton") + }, + addSignatureDialog: { + dialog: document.getElementById("addSignatureDialog"), + panels: document.getElementById("addSignatureActionContainer"), + typeButton: document.getElementById("addSignatureTypeButton"), + typeInput: document.getElementById("addSignatureTypeInput"), + drawButton: document.getElementById("addSignatureDrawButton"), + drawSVG: document.getElementById("addSignatureDraw"), + drawPlaceholder: document.getElementById("addSignatureDrawPlaceholder"), + drawThickness: document.getElementById("addSignatureDrawThickness"), + imageButton: document.getElementById("addSignatureImageButton"), + imageSVG: document.getElementById("addSignatureImage"), + imagePlaceholder: document.getElementById("addSignatureImagePlaceholder"), + imagePicker: document.getElementById("addSignatureFilePicker"), + imagePickerLink: document.getElementById("addSignatureImageBrowse"), + description: document.getElementById("addSignatureDescription"), + clearButton: document.getElementById("clearSignatureButton"), + saveContainer: document.getElementById("addSignatureSaveContainer"), + saveCheckbox: document.getElementById("addSignatureSaveCheckbox"), + errorBar: document.getElementById("addSignatureError"), + errorTitle: document.getElementById("addSignatureErrorTitle"), + errorDescription: document.getElementById("addSignatureErrorDescription"), + errorCloseButton: document.getElementById("addSignatureErrorCloseButton"), + cancelButton: document.getElementById("addSignatureCancelButton"), + addButton: document.getElementById("addSignatureAddButton") + }, + editSignatureDialog: { + dialog: document.getElementById("editSignatureDescriptionDialog"), + description: document.getElementById("editSignatureDescription"), + editSignatureView: document.getElementById("editSignatureView"), + cancelButton: document.getElementById("editSignatureCancelButton"), + updateButton: document.getElementById("editSignatureUpdateButton") + }, + annotationEditorParams: { + editorCommentsSidebar: document.getElementById("editorCommentsSidebar"), + editorCommentsSidebarCount: document.getElementById("editorCommentsSidebarCount"), + editorCommentsSidebarTitle: document.getElementById("editorCommentsSidebarTitle"), + editorCommentsSidebarCloseButton: document.getElementById("editorCommentsSidebarCloseButton"), + editorCommentsSidebarList: document.getElementById("editorCommentsSidebarList"), + editorCommentsSidebarResizer: document.getElementById("editorCommentsSidebarResizer"), + editorFreeTextFontSize: document.getElementById("editorFreeTextFontSize"), + editorFreeTextColor: document.getElementById("editorFreeTextColor"), + editorInkColor: document.getElementById("editorInkColor"), + editorInkThickness: document.getElementById("editorInkThickness"), + editorInkOpacity: document.getElementById("editorInkOpacity"), + editorStampAddImage: document.getElementById("editorStampAddImage"), + editorSignatureAddSignature: document.getElementById("editorSignatureAddSignature"), + editorFreeHighlightThickness: document.getElementById("editorFreeHighlightThickness"), + editorHighlightShowAll: document.getElementById("editorHighlightShowAll") + }, + printContainer: document.getElementById("printContainer"), + editorUndoBar: { + container: document.getElementById("editorUndoBar"), + message: document.getElementById("editorUndoBarMessage"), + undoButton: document.getElementById("editorUndoBarUndoButton"), + closeButton: document.getElementById("editorUndoBarCloseButton") + }, + editCommentDialog: { + dialog: document.getElementById("commentManagerDialog"), + toolbar: document.getElementById("commentManagerToolbar"), + title: document.getElementById("commentManagerTitle"), + textInput: document.getElementById("commentManagerTextInput"), + cancelButton: document.getElementById("commentManagerCancelButton"), + saveButton: document.getElementById("commentManagerSaveButton") + } + }; +} +function webViewerLoad() { + const config = getViewerConfiguration(); + const event = new CustomEvent("webviewerloaded", { + bubbles: true, + cancelable: true, + detail: { + source: window + } + }); + try { + parent.document.dispatchEvent(event); + } catch (ex) { + console.error("webviewerloaded:", ex); + document.dispatchEvent(event); + } + PDFViewerApplication.run(config); +} +document.blockUnblockOnload?.(true); +if (document.readyState === "interactive" || document.readyState === "complete") { + webViewerLoad(); +} else { + document.addEventListener("DOMContentLoaded", webViewerLoad, true); +} + +export { PDFViewerApplication, AppConstants as PDFViewerApplicationConstants, AppOptions as PDFViewerApplicationOptions }; + +//# sourceMappingURL=viewer.mjs.map \ No newline at end of file diff --git a/fs-framework/fs-preview/src/main/resources/static/lib/pdfjs/web/viewer.mjs.map b/fs-framework/fs-preview/src/main/resources/static/lib/pdfjs/web/viewer.mjs.map new file mode 100644 index 0000000000000000000000000000000000000000..1271817983dc5e72e48bbc4354b7c660cbc9a35e --- /dev/null +++ b/fs-framework/fs-preview/src/main/resources/static/lib/pdfjs/web/viewer.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"viewer.mjs","mappings":"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","sources":["webpack://pdf.js/webpack/bootstrap","webpack://pdf.js/webpack/runtime/define property getters","webpack://pdf.js/webpack/runtime/hasOwnProperty shorthand","webpack://pdf.js/./web/pdfjs.js","webpack://pdf.js/./web/ui_utils.js","webpack://pdf.js/./web/app_options.js","webpack://pdf.js/./web/pdf_link_service.js","webpack://pdf.js/./web/event_utils.js","webpack://pdf.js/./web/external_services.js","webpack://pdf.js/./web/preferences.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/types.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/resolver.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/scope.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/builtins.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/memoizer.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/bundle.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/resource.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/index.js","webpack://pdf.js/./node_modules/@fluent/dom/esm/overlay.js","webpack://pdf.js/./node_modules/cached-iterable/src/cached_iterable.mjs","webpack://pdf.js/./node_modules/cached-iterable/src/cached_sync_iterable.mjs","webpack://pdf.js/./node_modules/cached-iterable/src/cached_async_iterable.mjs","webpack://pdf.js/./node_modules/cached-iterable/src/index.mjs","webpack://pdf.js/./node_modules/@fluent/dom/esm/localization.js","webpack://pdf.js/./node_modules/@fluent/dom/esm/dom_localization.js","webpack://pdf.js/./node_modules/@fluent/dom/esm/index.js","webpack://pdf.js/./web/l10n.js","webpack://pdf.js/./web/genericl10n.js","webpack://pdf.js/./web/generic_scripting.js","webpack://pdf.js/./web/generic_signature_storage.js","webpack://pdf.js/./web/genericcom.js","webpack://pdf.js/./web/new_alt_text_manager.js","webpack://pdf.js/./web/alt_text_manager.js","webpack://pdf.js/./web/annotation_editor_params.js","webpack://pdf.js/./web/caret_browsing.js","webpack://pdf.js/./web/comment_manager.js","webpack://pdf.js/./web/download_manager.js","webpack://pdf.js/./web/editor_undo_bar.js","webpack://pdf.js/./web/overlay_manager.js","webpack://pdf.js/./web/password_prompt.js","webpack://pdf.js/./web/base_tree_viewer.js","webpack://pdf.js/./web/pdf_attachment_viewer.js","webpack://pdf.js/./web/grab_to_pan.js","webpack://pdf.js/./web/pdf_cursor_tools.js","webpack://pdf.js/./web/pdf_document_properties.js","webpack://pdf.js/./web/pdf_find_utils.js","webpack://pdf.js/./web/pdf_find_controller.js","webpack://pdf.js/./web/pdf_find_bar.js","webpack://pdf.js/./web/pdf_history.js","webpack://pdf.js/./web/pdf_layer_viewer.js","webpack://pdf.js/./web/pdf_outline_viewer.js","webpack://pdf.js/./web/pdf_presentation_mode.js","webpack://pdf.js/./web/xfa_layer_builder.js","webpack://pdf.js/./web/print_utils.js","webpack://pdf.js/./web/pdf_print_service.js","webpack://pdf.js/./web/pdf_rendering_queue.js","webpack://pdf.js/./web/pdf_scripting_manager.js","webpack://pdf.js/./web/pdf_sidebar.js","webpack://pdf.js/./web/pdf_text_extractor.js","webpack://pdf.js/./web/pdf_thumbnail_view.js","webpack://pdf.js/./web/pdf_thumbnail_viewer.js","webpack://pdf.js/./web/annotation_editor_layer_builder.js","webpack://pdf.js/./web/annotation_layer_builder.js","webpack://pdf.js/./web/autolinker.js","webpack://pdf.js/./web/base_pdf_page_view.js","webpack://pdf.js/./web/draw_layer_builder.js","webpack://pdf.js/./web/pdf_page_detail_view.js","webpack://pdf.js/./web/struct_tree_layer_builder.js","webpack://pdf.js/./web/text_accessibility.js","webpack://pdf.js/./web/text_highlighter.js","webpack://pdf.js/./web/text_layer_builder.js","webpack://pdf.js/./web/pdf_page_view.js","webpack://pdf.js/./web/pdf_viewer.js","webpack://pdf.js/./web/secondary_toolbar.js","webpack://pdf.js/./web/signature_manager.js","webpack://pdf.js/./web/toolbar.js","webpack://pdf.js/./web/view_history.js","webpack://pdf.js/./web/app.js","webpack://pdf.js/./web/viewer.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","/* Copyright 2016 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst {\n AbortException,\n AnnotationEditorLayer,\n AnnotationEditorParamsType,\n AnnotationEditorType,\n AnnotationEditorUIManager,\n AnnotationLayer,\n AnnotationMode,\n AnnotationType,\n applyOpacity,\n build,\n ColorPicker,\n createValidAbsoluteUrl,\n CSSConstants,\n DOMSVGFactory,\n DrawLayer,\n FeatureTest,\n fetchData,\n findContrastColor,\n getDocument,\n getFilenameFromUrl,\n getPdfFilenameFromUrl,\n getRGB,\n getUuid,\n getXfaPageViewport,\n GlobalWorkerOptions,\n ImageKind,\n InvalidPDFException,\n isDataScheme,\n isPdfFile,\n isValidExplicitDest,\n MathClamp,\n noContextMenu,\n normalizeUnicode,\n OPS,\n OutputScale,\n PasswordResponses,\n PDFDataRangeTransport,\n PDFDateString,\n PDFWorker,\n PermissionFlag,\n PixelsPerInch,\n RenderingCancelledException,\n renderRichText,\n ResponseException,\n setLayerDimensions,\n shadow,\n SignatureExtractor,\n stopEvent,\n SupportedImageMimeTypes,\n TextLayer,\n TouchManager,\n updateUrlHash,\n Util,\n VerbosityLevel,\n version,\n XfaLayer,\n} = globalThis.pdfjsLib;\n\nexport {\n AbortException,\n AnnotationEditorLayer,\n AnnotationEditorParamsType,\n AnnotationEditorType,\n AnnotationEditorUIManager,\n AnnotationLayer,\n AnnotationMode,\n AnnotationType,\n applyOpacity,\n build,\n ColorPicker,\n createValidAbsoluteUrl,\n CSSConstants,\n DOMSVGFactory,\n DrawLayer,\n FeatureTest,\n fetchData,\n findContrastColor,\n getDocument,\n getFilenameFromUrl,\n getPdfFilenameFromUrl,\n getRGB,\n getUuid,\n getXfaPageViewport,\n GlobalWorkerOptions,\n ImageKind,\n InvalidPDFException,\n isDataScheme,\n isPdfFile,\n isValidExplicitDest,\n MathClamp,\n noContextMenu,\n normalizeUnicode,\n OPS,\n OutputScale,\n PasswordResponses,\n PDFDataRangeTransport,\n PDFDateString,\n PDFWorker,\n PermissionFlag,\n PixelsPerInch,\n RenderingCancelledException,\n renderRichText,\n ResponseException,\n setLayerDimensions,\n shadow,\n SignatureExtractor,\n stopEvent,\n SupportedImageMimeTypes,\n TextLayer,\n TouchManager,\n updateUrlHash,\n Util,\n VerbosityLevel,\n version,\n XfaLayer,\n};\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { MathClamp } from \"pdfjs-lib\";\n\nconst DEFAULT_SCALE_VALUE = \"auto\";\nconst DEFAULT_SCALE = 1.0;\nconst DEFAULT_SCALE_DELTA = 1.1;\nconst MIN_SCALE = 0.1;\nconst MAX_SCALE = 10.0;\nconst UNKNOWN_SCALE = 0;\nconst MAX_AUTO_SCALE = 1.25;\nconst SCROLLBAR_PADDING = 40;\nconst VERTICAL_PADDING = 5;\n\nconst RenderingStates = {\n INITIAL: 0,\n RUNNING: 1,\n PAUSED: 2,\n FINISHED: 3,\n};\n\nconst PresentationModeState = {\n UNKNOWN: 0,\n NORMAL: 1,\n CHANGING: 2,\n FULLSCREEN: 3,\n};\n\nconst SidebarView = {\n UNKNOWN: -1,\n NONE: 0,\n THUMBS: 1, // Default value.\n OUTLINE: 2,\n ATTACHMENTS: 3,\n LAYERS: 4,\n};\n\nconst TextLayerMode = {\n DISABLE: 0,\n ENABLE: 1,\n ENABLE_PERMISSIONS: 2,\n};\n\nconst ScrollMode = {\n UNKNOWN: -1,\n VERTICAL: 0, // Default value.\n HORIZONTAL: 1,\n WRAPPED: 2,\n PAGE: 3,\n};\n\nconst SpreadMode = {\n UNKNOWN: -1,\n NONE: 0, // Default value.\n ODD: 1,\n EVEN: 2,\n};\n\nconst CursorTool = {\n SELECT: 0, // The default value.\n HAND: 1,\n ZOOM: 2,\n};\n\n// Used by `PDFViewerApplication`, and by the API unit-tests.\nconst AutoPrintRegExp = /\\bprint\\s*\\(/;\n\n/**\n * Scrolls specified element into view of its parent.\n * @param {HTMLElement} element - The element to be visible.\n * @param {Object} [spot] - An object with optional top and left properties,\n * specifying the offset from the top left edge.\n * @param {number} [spot.left]\n * @param {number} [spot.top]\n * @param {boolean} [scrollMatches] - When scrolling search results into view,\n * ignore elements that either: Contains marked content identifiers,\n * or have the CSS-rule `overflow: hidden;` set. The default value is `false`.\n */\nfunction scrollIntoView(element, spot, scrollMatches = false) {\n // Assuming offsetParent is available (it's not available when viewer is in\n // hidden iframe or object). We have to scroll: if the offsetParent is not set\n // producing the error. See also animationStarted.\n let parent = element.offsetParent;\n if (!parent) {\n console.error(\"offsetParent is not set -- cannot scroll\");\n return;\n }\n let offsetY = element.offsetTop + element.clientTop;\n let offsetX = element.offsetLeft + element.clientLeft;\n while (\n (parent.clientHeight === parent.scrollHeight &&\n parent.clientWidth === parent.scrollWidth) ||\n (scrollMatches &&\n (parent.classList.contains(\"markedContent\") ||\n getComputedStyle(parent).overflow === \"hidden\"))\n ) {\n offsetY += parent.offsetTop;\n offsetX += parent.offsetLeft;\n\n parent = parent.offsetParent;\n if (!parent) {\n return; // no need to scroll\n }\n }\n if (spot) {\n if (spot.top !== undefined) {\n offsetY += spot.top;\n }\n if (spot.left !== undefined) {\n if (scrollMatches) {\n const elementWidth = element.getBoundingClientRect().width;\n const padding = MathClamp(\n (parent.clientWidth - elementWidth) / 2,\n 20,\n 400\n );\n offsetX += spot.left - padding;\n } else {\n offsetX += spot.left;\n }\n parent.scrollLeft = offsetX;\n }\n }\n parent.scrollTop = offsetY;\n}\n\n/**\n * Helper function to start monitoring the scroll event and converting them into\n * PDF.js friendly one: with scroll debounce and scroll direction.\n */\nfunction watchScroll(viewAreaElement, callback, abortSignal = undefined) {\n const debounceScroll = function (evt) {\n if (rAF) {\n return;\n }\n // schedule an invocation of scroll for next animation frame.\n rAF = window.requestAnimationFrame(function viewAreaElementScrolled() {\n rAF = null;\n\n const currentX = viewAreaElement.scrollLeft;\n const lastX = state.lastX;\n if (currentX !== lastX) {\n state.right = currentX > lastX;\n }\n state.lastX = currentX;\n const currentY = viewAreaElement.scrollTop;\n const lastY = state.lastY;\n if (currentY !== lastY) {\n state.down = currentY > lastY;\n }\n state.lastY = currentY;\n callback(state);\n });\n };\n\n const state = {\n right: true,\n down: true,\n lastX: viewAreaElement.scrollLeft,\n lastY: viewAreaElement.scrollTop,\n _eventHandler: debounceScroll,\n };\n\n let rAF = null;\n viewAreaElement.addEventListener(\"scroll\", debounceScroll, {\n useCapture: true,\n signal: abortSignal,\n });\n abortSignal?.addEventListener(\n \"abort\",\n () => window.cancelAnimationFrame(rAF),\n { once: true }\n );\n return state;\n}\n\n/**\n * Helper function to parse query string (e.g. ?param1=value¶m2=...).\n * @param {string} query\n * @returns {Map}\n */\nfunction parseQueryString(query) {\n const params = new Map();\n for (const [key, value] of new URLSearchParams(query)) {\n params.set(key.toLowerCase(), value);\n }\n return params;\n}\n\nconst InvisibleCharsRegExp = /[\\x00-\\x1F]/g;\n\n/**\n * @param {string} str\n * @param {boolean} [replaceInvisible]\n */\nfunction removeNullCharacters(str, replaceInvisible = false) {\n if (!InvisibleCharsRegExp.test(str)) {\n return str;\n }\n if (replaceInvisible) {\n return str.replaceAll(InvisibleCharsRegExp, m => (m === \"\\x00\" ? \"\" : \" \"));\n }\n return str.replaceAll(\"\\x00\", \"\");\n}\n\n/**\n * Use binary search to find the index of the first item in a given array which\n * passes a given condition. The items are expected to be sorted in the sense\n * that if the condition is true for one item in the array, then it is also true\n * for all following items.\n *\n * @returns {number} Index of the first array element to pass the test,\n * or |items.length| if no such element exists.\n */\nfunction binarySearchFirstItem(items, condition, start = 0) {\n let minIndex = start;\n let maxIndex = items.length - 1;\n\n if (maxIndex < 0 || !condition(items[maxIndex])) {\n return items.length;\n }\n if (condition(items[minIndex])) {\n return minIndex;\n }\n\n while (minIndex < maxIndex) {\n const currentIndex = (minIndex + maxIndex) >> 1;\n const currentItem = items[currentIndex];\n if (condition(currentItem)) {\n maxIndex = currentIndex;\n } else {\n minIndex = currentIndex + 1;\n }\n }\n return minIndex; /* === maxIndex */\n}\n\n/**\n * Approximates float number as a fraction using Farey sequence (max order\n * of 8).\n * @param {number} x - Positive float number.\n * @returns {Array} Estimated fraction: the first array item is a numerator,\n * the second one is a denominator.\n * They are both natural numbers.\n */\nfunction approximateFraction(x) {\n // Fast paths for int numbers or their inversions.\n if (Math.floor(x) === x) {\n return [x, 1];\n }\n const xinv = 1 / x;\n const limit = 8;\n if (xinv > limit) {\n return [1, limit];\n } else if (Math.floor(xinv) === xinv) {\n return [1, xinv];\n }\n\n const x_ = x > 1 ? xinv : x;\n // a/b and c/d are neighbours in Farey sequence.\n let a = 0,\n b = 1,\n c = 1,\n d = 1;\n // Limiting search to order 8.\n while (true) {\n // Generating next term in sequence (order of q).\n const p = a + c,\n q = b + d;\n if (q > limit) {\n break;\n }\n if (x_ <= p / q) {\n c = p;\n d = q;\n } else {\n a = p;\n b = q;\n }\n }\n let result;\n // Select closest of the neighbours to x.\n if (x_ - a / b < c / d - x_) {\n result = x_ === x ? [a, b] : [b, a];\n } else {\n result = x_ === x ? [c, d] : [d, c];\n }\n return result;\n}\n\n/**\n * @param {number} x - A positive number to round to a multiple of `div`.\n * @param {number} div - A natural number.\n */\nfunction floorToDivide(x, div) {\n return x - (x % div);\n}\n\n/**\n * @typedef {Object} GetPageSizeInchesParameters\n * @property {number[]} view\n * @property {number} userUnit\n * @property {number} rotate\n */\n\n/**\n * @typedef {Object} PageSize\n * @property {number} width - In inches.\n * @property {number} height - In inches.\n */\n\n/**\n * Gets the size of the specified page, converted from PDF units to inches.\n * @param {GetPageSizeInchesParameters} params\n * @returns {PageSize}\n */\nfunction getPageSizeInches({ view, userUnit, rotate }) {\n const [x1, y1, x2, y2] = view;\n // We need to take the page rotation into account as well.\n const changeOrientation = rotate % 180 !== 0;\n\n const width = ((x2 - x1) / 72) * userUnit;\n const height = ((y2 - y1) / 72) * userUnit;\n\n return {\n width: changeOrientation ? height : width,\n height: changeOrientation ? width : height,\n };\n}\n\n/**\n * Helper function for getVisibleElements.\n *\n * @param {number} index - initial guess at the first visible element\n * @param {Array} views - array of pages, into which `index` is an index\n * @param {number} top - the top of the scroll pane\n * @returns {number} less than or equal to `index` that is definitely at or\n * before the first visible element in `views`, but not by too much. (Usually,\n * this will be the first element in the first partially visible row in\n * `views`, although sometimes it goes back one row further.)\n */\nfunction backtrackBeforeAllVisibleElements(index, views, top) {\n // binarySearchFirstItem's assumption is that the input is ordered, with only\n // one index where the conditions flips from false to true: [false ...,\n // true...]. With vertical scrolling and spreads, it is possible to have\n // [false ..., true, false, true ...]. With wrapped scrolling we can have a\n // similar sequence, with many more mixed true and false in the middle.\n //\n // So there is no guarantee that the binary search yields the index of the\n // first visible element. It could have been any of the other visible elements\n // that were preceded by a hidden element.\n\n // Of course, if either this element or the previous (hidden) element is also\n // the first element, there's nothing to worry about.\n if (index < 2) {\n return index;\n }\n\n // That aside, the possible cases are represented below.\n //\n // **** = fully hidden\n // A*B* = mix of partially visible and/or hidden pages\n // CDEF = fully visible\n //\n // (1) Binary search could have returned A, in which case we can stop.\n // (2) Binary search could also have returned B, in which case we need to\n // check the whole row.\n // (3) Binary search could also have returned C, in which case we need to\n // check the whole previous row.\n //\n // There's one other possibility:\n //\n // **** = fully hidden\n // ABCD = mix of fully and/or partially visible pages\n //\n // (4) Binary search could only have returned A.\n\n // Initially assume that we need to find the beginning of the current row\n // (case 1, 2, or 4), which means finding a page that is above the current\n // page's top. If the found page is partially visible, we're definitely not in\n // case 3, and this assumption is correct.\n let elt = views[index].div;\n let pageTop = elt.offsetTop + elt.clientTop;\n\n if (pageTop >= top) {\n // The found page is fully visible, so we're actually either in case 3 or 4,\n // and unfortunately we can't tell the difference between them without\n // scanning the entire previous row, so we just conservatively assume that\n // we do need to backtrack to that row. In both cases, the previous page is\n // in the previous row, so use its top instead.\n elt = views[index - 1].div;\n pageTop = elt.offsetTop + elt.clientTop;\n }\n\n // Now we backtrack to the first page that still has its bottom below\n // `pageTop`, which is the top of a page in the first visible row (unless\n // we're in case 4, in which case it's the row before that).\n // `index` is found by binary search, so the page at `index - 1` is\n // invisible and we can start looking for potentially visible pages from\n // `index - 2`. (However, if this loop terminates on its first iteration,\n // which is the case when pages are stacked vertically, `index` should remain\n // unchanged, so we use a distinct loop variable.)\n for (let i = index - 2; i >= 0; --i) {\n elt = views[i].div;\n if (elt.offsetTop + elt.clientTop + elt.clientHeight <= pageTop) {\n // We have reached the previous row, so stop now.\n // This loop is expected to terminate relatively quickly because the\n // number of pages per row is expected to be small.\n break;\n }\n index = i;\n }\n return index;\n}\n\n/**\n * @typedef {Object} GetVisibleElementsParameters\n * @property {HTMLElement} scrollEl - A container that can possibly scroll.\n * @property {Array} views - Objects with a `div` property that contains an\n * HTMLElement, which should all be descendants of `scrollEl` satisfying the\n * relevant layout assumptions.\n * @property {boolean} sortByVisibility - If `true`, the returned elements are\n * sorted in descending order of the percent of their padding box that is\n * visible. The default value is `false`.\n * @property {boolean} horizontal - If `true`, the elements are assumed to be\n * laid out horizontally instead of vertically. The default value is `false`.\n * @property {boolean} rtl - If `true`, the `scrollEl` container is assumed to\n * be in right-to-left mode. The default value is `false`.\n */\n\n/**\n * Generic helper to find out what elements are visible within a scroll pane.\n *\n * Well, pretty generic. There are some assumptions placed on the elements\n * referenced by `views`:\n * - If `horizontal`, no left of any earlier element is to the right of the\n * left of any later element.\n * - Otherwise, `views` can be split into contiguous rows where, within a row,\n * no top of any element is below the bottom of any other element, and\n * between rows, no bottom of any element in an earlier row is below the\n * top of any element in a later row.\n *\n * (Here, top, left, etc. all refer to the padding edge of the element in\n * question. For pages, that ends up being equivalent to the bounding box of the\n * rendering canvas. Earlier and later refer to index in `views`, not page\n * layout.)\n *\n * @param {GetVisibleElementsParameters} params\n * @returns {Object} `{ first, last, views: [{ id, x, y, view, percent }] }`\n */\nfunction getVisibleElements({\n scrollEl,\n views,\n sortByVisibility = false,\n horizontal = false,\n rtl = false,\n}) {\n const top = scrollEl.scrollTop,\n bottom = top + scrollEl.clientHeight;\n const left = scrollEl.scrollLeft,\n right = left + scrollEl.clientWidth;\n\n // Throughout this \"generic\" function, comments will assume we're working with\n // PDF document pages, which is the most important and complex case. In this\n // case, the visible elements we're actually interested is the page canvas,\n // which is contained in a wrapper which adds no padding/border/margin, which\n // is itself contained in `view.div` which adds no padding (but does add a\n // border). So, as specified in this function's doc comment, this function\n // does all of its work on the padding edge of the provided views, starting at\n // offsetLeft/Top (which includes margin) and adding clientLeft/Top (which is\n // the border). Adding clientWidth/Height gets us the bottom-right corner of\n // the padding edge.\n function isElementBottomAfterViewTop(view) {\n const element = view.div;\n const elementBottom =\n element.offsetTop + element.clientTop + element.clientHeight;\n return elementBottom > top;\n }\n function isElementNextAfterViewHorizontally(view) {\n const element = view.div;\n const elementLeft = element.offsetLeft + element.clientLeft;\n const elementRight = elementLeft + element.clientWidth;\n return rtl ? elementLeft < right : elementRight > left;\n }\n\n const visible = [],\n ids = new Set(),\n numViews = views.length;\n let firstVisibleElementInd = binarySearchFirstItem(\n views,\n horizontal\n ? isElementNextAfterViewHorizontally\n : isElementBottomAfterViewTop\n );\n\n // Please note the return value of the `binarySearchFirstItem` function when\n // no valid element is found (hence the `firstVisibleElementInd` check below).\n if (\n firstVisibleElementInd > 0 &&\n firstVisibleElementInd < numViews &&\n !horizontal\n ) {\n // In wrapped scrolling (or vertical scrolling with spreads), with some page\n // sizes, isElementBottomAfterViewTop doesn't satisfy the binary search\n // condition: there can be pages with bottoms above the view top between\n // pages with bottoms below. This function detects and corrects that error;\n // see it for more comments.\n firstVisibleElementInd = backtrackBeforeAllVisibleElements(\n firstVisibleElementInd,\n views,\n top\n );\n }\n\n // lastEdge acts as a cutoff for us to stop looping, because we know all\n // subsequent pages will be hidden.\n //\n // When using wrapped scrolling or vertical scrolling with spreads, we can't\n // simply stop the first time we reach a page below the bottom of the view;\n // the tops of subsequent pages on the same row could still be visible. In\n // horizontal scrolling, we don't have that issue, so we can stop as soon as\n // we pass `right`, without needing the code below that handles the -1 case.\n let lastEdge = horizontal ? right : -1;\n\n for (let i = firstVisibleElementInd; i < numViews; i++) {\n const view = views[i],\n element = view.div;\n const currentWidth = element.offsetLeft + element.clientLeft;\n const currentHeight = element.offsetTop + element.clientTop;\n const viewWidth = element.clientWidth,\n viewHeight = element.clientHeight;\n const viewRight = currentWidth + viewWidth;\n const viewBottom = currentHeight + viewHeight;\n\n if (lastEdge === -1) {\n // As commented above, this is only needed in non-horizontal cases.\n // Setting lastEdge to the bottom of the first page that is partially\n // visible ensures that the next page fully below lastEdge is on the\n // next row, which has to be fully hidden along with all subsequent rows.\n if (viewBottom >= bottom) {\n lastEdge = viewBottom;\n }\n } else if ((horizontal ? currentWidth : currentHeight) > lastEdge) {\n break;\n }\n\n if (\n viewBottom <= top ||\n currentHeight >= bottom ||\n viewRight <= left ||\n currentWidth >= right\n ) {\n continue;\n }\n\n const minY = Math.max(0, top - currentHeight);\n const minX = Math.max(0, left - currentWidth);\n\n const hiddenHeight = minY + Math.max(0, viewBottom - bottom);\n const hiddenWidth = minX + Math.max(0, viewRight - right);\n\n const fractionHeight = (viewHeight - hiddenHeight) / viewHeight,\n fractionWidth = (viewWidth - hiddenWidth) / viewWidth;\n const percent = (fractionHeight * fractionWidth * 100) | 0;\n\n visible.push({\n id: view.id,\n x: currentWidth,\n y: currentHeight,\n visibleArea:\n // We only specify which part of the page is visible when it's not\n // the full page, as there is no point in handling a partial page\n // rendering otherwise.\n percent === 100\n ? null\n : {\n minX,\n minY,\n maxX: Math.min(viewRight, right) - currentWidth,\n maxY: Math.min(viewBottom, bottom) - currentHeight,\n },\n view,\n percent,\n widthPercent: (fractionWidth * 100) | 0,\n });\n ids.add(view.id);\n }\n\n const first = visible[0],\n last = visible.at(-1);\n\n if (sortByVisibility) {\n visible.sort(function (a, b) {\n const pc = a.percent - b.percent;\n if (Math.abs(pc) > 0.001) {\n return -pc;\n }\n return a.id - b.id; // ensure stability\n });\n }\n return { first, last, views: visible, ids };\n}\n\nfunction normalizeWheelEventDirection(evt) {\n let delta = Math.hypot(evt.deltaX, evt.deltaY);\n const angle = Math.atan2(evt.deltaY, evt.deltaX);\n if (-0.25 * Math.PI < angle && angle < 0.75 * Math.PI) {\n // All that is left-up oriented has to change the sign.\n delta = -delta;\n }\n return delta;\n}\n\nfunction normalizeWheelEventDelta(evt) {\n const deltaMode = evt.deltaMode; // Avoid being affected by bug 1392460.\n let delta = normalizeWheelEventDirection(evt);\n\n const MOUSE_PIXELS_PER_LINE = 30;\n const MOUSE_LINES_PER_PAGE = 30;\n\n // Converts delta to per-page units\n if (deltaMode === WheelEvent.DOM_DELTA_PIXEL) {\n delta /= MOUSE_PIXELS_PER_LINE * MOUSE_LINES_PER_PAGE;\n } else if (deltaMode === WheelEvent.DOM_DELTA_LINE) {\n delta /= MOUSE_LINES_PER_PAGE;\n }\n return delta;\n}\n\nfunction isValidRotation(angle) {\n return Number.isInteger(angle) && angle % 90 === 0;\n}\n\nfunction isValidScrollMode(mode) {\n return (\n Number.isInteger(mode) &&\n Object.values(ScrollMode).includes(mode) &&\n mode !== ScrollMode.UNKNOWN\n );\n}\n\nfunction isValidSpreadMode(mode) {\n return (\n Number.isInteger(mode) &&\n Object.values(SpreadMode).includes(mode) &&\n mode !== SpreadMode.UNKNOWN\n );\n}\n\nfunction isPortraitOrientation(size) {\n return size.width <= size.height;\n}\n\n/**\n * Promise that is resolved when DOM window becomes visible.\n */\nconst animationStarted = new Promise(function (resolve) {\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"LIB\") &&\n typeof window === \"undefined\"\n ) {\n // Prevent \"ReferenceError: window is not defined\" errors when running the\n // unit-tests in Node.js environments.\n setTimeout(resolve, 20);\n return;\n }\n window.requestAnimationFrame(resolve);\n});\n\nconst docStyle =\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"LIB\") &&\n typeof document === \"undefined\"\n ? null\n : document.documentElement.style;\n\nclass ProgressBar {\n #classList = null;\n\n #disableAutoFetchTimeout = null;\n\n #percent = 0;\n\n #style = null;\n\n #visible = true;\n\n constructor(bar) {\n this.#classList = bar.classList;\n this.#style = bar.style;\n }\n\n get percent() {\n return this.#percent;\n }\n\n set percent(val) {\n this.#percent = MathClamp(val, 0, 100);\n\n if (isNaN(val)) {\n this.#classList.add(\"indeterminate\");\n return;\n }\n this.#classList.remove(\"indeterminate\");\n\n this.#style.setProperty(\"--progressBar-percent\", `${this.#percent}%`);\n }\n\n setWidth(viewer) {\n if (!viewer) {\n return;\n }\n const container = viewer.parentNode;\n const scrollbarWidth = container.offsetWidth - viewer.offsetWidth;\n if (scrollbarWidth > 0) {\n this.#style.setProperty(\n \"--progressBar-end-offset\",\n `${scrollbarWidth}px`\n );\n }\n }\n\n setDisableAutoFetch(delay = /* ms = */ 5000) {\n if (this.#percent === 100 || isNaN(this.#percent)) {\n return;\n }\n if (this.#disableAutoFetchTimeout) {\n clearTimeout(this.#disableAutoFetchTimeout);\n }\n this.show();\n\n this.#disableAutoFetchTimeout = setTimeout(() => {\n this.#disableAutoFetchTimeout = null;\n this.hide();\n }, delay);\n }\n\n hide() {\n if (!this.#visible) {\n return;\n }\n this.#visible = false;\n this.#classList.add(\"hidden\");\n }\n\n show() {\n if (this.#visible) {\n return;\n }\n this.#visible = true;\n this.#classList.remove(\"hidden\");\n }\n}\n\n/**\n * Get the active or focused element in current DOM.\n *\n * Recursively search for the truly active or focused element in case there are\n * shadow DOMs.\n *\n * @returns {Element} the truly active or focused element.\n */\nfunction getActiveOrFocusedElement() {\n let curRoot = document;\n let curActiveOrFocused =\n curRoot.activeElement || curRoot.querySelector(\":focus\");\n\n while (curActiveOrFocused?.shadowRoot) {\n curRoot = curActiveOrFocused.shadowRoot;\n curActiveOrFocused =\n curRoot.activeElement || curRoot.querySelector(\":focus\");\n }\n\n return curActiveOrFocused;\n}\n\n/**\n * Converts API PageLayout values to the format used by `BaseViewer`.\n * @param {string} layout - The API PageLayout value.\n * @returns {Object}\n */\nfunction apiPageLayoutToViewerModes(layout) {\n let scrollMode = ScrollMode.VERTICAL,\n spreadMode = SpreadMode.NONE;\n\n switch (layout) {\n case \"SinglePage\":\n scrollMode = ScrollMode.PAGE;\n break;\n case \"OneColumn\":\n break;\n case \"TwoPageLeft\":\n scrollMode = ScrollMode.PAGE;\n /* falls through */\n case \"TwoColumnLeft\":\n spreadMode = SpreadMode.ODD;\n break;\n case \"TwoPageRight\":\n scrollMode = ScrollMode.PAGE;\n /* falls through */\n case \"TwoColumnRight\":\n spreadMode = SpreadMode.EVEN;\n break;\n }\n return { scrollMode, spreadMode };\n}\n\n/**\n * Converts API PageMode values to the format used by `PDFSidebar`.\n * NOTE: There's also a \"FullScreen\" parameter which is not possible to support,\n * since the Fullscreen API used in browsers requires that entering\n * fullscreen mode only occurs as a result of a user-initiated event.\n * @param {string} mode - The API PageMode value.\n * @returns {number} A value from {SidebarView}.\n */\nfunction apiPageModeToSidebarView(mode) {\n switch (mode) {\n case \"UseNone\":\n return SidebarView.NONE;\n case \"UseThumbs\":\n return SidebarView.THUMBS;\n case \"UseOutlines\":\n return SidebarView.OUTLINE;\n case \"UseAttachments\":\n return SidebarView.ATTACHMENTS;\n case \"UseOC\":\n return SidebarView.LAYERS;\n }\n return SidebarView.NONE; // Default value.\n}\n\nfunction toggleCheckedBtn(button, toggle, view = null) {\n button.classList.toggle(\"toggled\", toggle);\n button.setAttribute(\"aria-checked\", toggle);\n\n view?.classList.toggle(\"hidden\", !toggle);\n}\n\nfunction toggleExpandedBtn(button, toggle, view = null) {\n button.classList.toggle(\"toggled\", toggle);\n button.setAttribute(\"aria-expanded\", toggle);\n\n view?.classList.toggle(\"hidden\", !toggle);\n}\n\n// In Firefox, the css calc function uses f32 precision but the Chrome or Safari\n// are using f64 one. So in order to have the same rendering in all browsers, we\n// need to use the right precision in order to have correct dimensions.\nconst calcRound =\n typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")\n ? Math.fround\n : (function () {\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"LIB\") &&\n typeof document === \"undefined\"\n ) {\n return x => x;\n }\n const e = document.createElement(\"div\");\n e.style.width = \"round(down, calc(1.6666666666666665 * 792px), 1px)\";\n return e.style.width === \"calc(1320px)\" ? Math.fround : x => x;\n })();\n\nexport {\n animationStarted,\n apiPageLayoutToViewerModes,\n apiPageModeToSidebarView,\n approximateFraction,\n AutoPrintRegExp,\n backtrackBeforeAllVisibleElements, // only exported for testing\n binarySearchFirstItem,\n calcRound,\n CursorTool,\n DEFAULT_SCALE,\n DEFAULT_SCALE_DELTA,\n DEFAULT_SCALE_VALUE,\n docStyle,\n floorToDivide,\n getActiveOrFocusedElement,\n getPageSizeInches,\n getVisibleElements,\n isPortraitOrientation,\n isValidRotation,\n isValidScrollMode,\n isValidSpreadMode,\n MAX_AUTO_SCALE,\n MAX_SCALE,\n MIN_SCALE,\n normalizeWheelEventDelta,\n normalizeWheelEventDirection,\n parseQueryString,\n PresentationModeState,\n ProgressBar,\n removeNullCharacters,\n RenderingStates,\n SCROLLBAR_PADDING,\n scrollIntoView,\n ScrollMode,\n SidebarView,\n SpreadMode,\n TextLayerMode,\n toggleCheckedBtn,\n toggleExpandedBtn,\n UNKNOWN_SCALE,\n VERTICAL_PADDING,\n watchScroll,\n};\n","/* Copyright 2018 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nif (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n // eslint-disable-next-line no-var\n var compatParams = new Map();\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"LIB\") &&\n !globalThis.navigator?.language\n ) {\n globalThis.navigator = {\n language: \"en-US\",\n maxTouchPoints: 1,\n platform: \"\",\n userAgent: \"\",\n };\n }\n const { maxTouchPoints, platform, userAgent } = navigator;\n\n const isAndroid = /Android/.test(userAgent);\n const isIOS =\n /\\b(iPad|iPhone|iPod)(?=;)/.test(userAgent) ||\n (platform === \"MacIntel\" && maxTouchPoints > 1);\n\n // Limit canvas size to 5 mega-pixels on mobile.\n // Support: Android, iOS\n (function () {\n if (isIOS || isAndroid) {\n compatParams.set(\"maxCanvasPixels\", 5242880);\n }\n })();\n\n // Don't use system fonts on Android (issue 18210).\n // Support: Android\n (function () {\n if (isAndroid) {\n compatParams.set(\"useSystemFonts\", false);\n }\n })();\n}\n\nconst OptionKind = {\n BROWSER: 0x01,\n VIEWER: 0x02,\n API: 0x04,\n WORKER: 0x08,\n EVENT_DISPATCH: 0x10,\n PREFERENCE: 0x80,\n};\n\n// Should only be used with options that allow multiple types.\nconst Type = {\n BOOLEAN: 0x01,\n NUMBER: 0x02,\n OBJECT: 0x04,\n STRING: 0x08,\n UNDEFINED: 0x10,\n};\n\n/**\n * NOTE: These options are used to generate the `default_preferences.json` file,\n * see `OptionKind.PREFERENCE`, hence the values below must use only\n * primitive types and cannot rely on any imported types.\n */\nconst defaultOptions = {\n allowedGlobalEvents: {\n /** @type {Object} */\n value: null,\n kind: OptionKind.BROWSER,\n },\n canvasMaxAreaInBytes: {\n /** @type {number} */\n value: -1,\n kind: OptionKind.BROWSER + OptionKind.API,\n },\n isInAutomation: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.BROWSER,\n },\n localeProperties: {\n /** @type {Object} */\n value:\n typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")\n ? { lang: navigator.language || \"en-US\" }\n : null,\n kind: OptionKind.BROWSER,\n },\n maxCanvasDim: {\n /** @type {number} */\n value: 32767,\n kind: OptionKind.BROWSER + OptionKind.VIEWER,\n },\n nimbusDataStr: {\n /** @type {string} */\n value: \"\",\n kind: OptionKind.BROWSER,\n },\n supportsCaretBrowsingMode: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.BROWSER,\n },\n supportsDocumentFonts: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.BROWSER,\n },\n supportsIntegratedFind: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.BROWSER,\n },\n supportsMouseWheelZoomCtrlKey: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.BROWSER,\n },\n supportsMouseWheelZoomMetaKey: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.BROWSER,\n },\n supportsPinchToZoom: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.BROWSER,\n },\n supportsPrinting: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.BROWSER,\n },\n toolbarDensity: {\n /** @type {number} */\n value: 0, // 0 = \"normal\", 1 = \"compact\", 2 = \"touch\"\n kind: OptionKind.BROWSER + OptionKind.EVENT_DISPATCH,\n },\n\n altTextLearnMoreUrl: {\n /** @type {string} */\n value:\n typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")\n ? \"https://support.mozilla.org/1/firefox/%VERSION%/%OS%/%LOCALE%/pdf-alt-text\"\n : \"\",\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n annotationEditorMode: {\n /** @type {number} */\n value: 0,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n annotationMode: {\n /** @type {number} */\n value: 2,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n capCanvasAreaFactor: {\n /** @type {number} */\n value: 200,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n commentLearnMoreUrl: {\n /** @type {string} */\n value:\n typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"MOZCENTRAL\")\n ? \"https://support.mozilla.org/%LOCALE%/kb/view-pdf-files-firefox-or-choose-another-viewer#w_add-a-comment-to-a-pdf\"\n : \"\",\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n cursorToolOnLoad: {\n /** @type {number} */\n value: 0,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n debuggerSrc: {\n /** @type {string} */\n value: \"./debugger.mjs\",\n kind: OptionKind.VIEWER,\n },\n defaultZoomDelay: {\n /** @type {number} */\n value: 400,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n defaultZoomValue: {\n /** @type {string} */\n value: \"\",\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n disableHistory: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER,\n },\n disablePageLabels: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enableAltText: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enableAltTextModelDownload: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE + OptionKind.EVENT_DISPATCH,\n },\n enableAutoLinking: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enableComment: {\n /** @type {boolean} */\n value: typeof PDFJSDev === \"undefined\",\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enableDetailCanvas: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.VIEWER,\n },\n enableGuessAltText: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE + OptionKind.EVENT_DISPATCH,\n },\n enableHighlightFloatingButton: {\n // We'll probably want to make some experiments before enabling this\n // in Firefox release, but it has to be temporary.\n // TODO: remove it when unnecessary.\n /** @type {boolean} */\n value: typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\"),\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enableNewAltTextWhenAddingImage: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enableOptimizedPartialRendering: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enablePermissions: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enablePrintAutoRotate: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enableScripting: {\n /** @type {boolean} */\n value: typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"CHROME\"),\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enableSignatureEditor: {\n /** @type {boolean} */\n value: typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\"),\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enableUpdatedAddImage: {\n // We'll probably want to make some experiments before enabling this\n // in Firefox release, but it has to be temporary.\n // TODO: remove it when unnecessary.\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n externalLinkRel: {\n /** @type {string} */\n value: \"noopener noreferrer nofollow\",\n kind: OptionKind.VIEWER,\n },\n externalLinkTarget: {\n /** @type {number} */\n value: 0,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n highlightEditorColors: {\n /** @type {string} */\n value:\n \"yellow=#FFFF98,green=#53FFBC,blue=#80EBFF,pink=#FFCBE6,red=#FF4F5F,\" +\n \"yellow_HCM=#FFFFCC,green_HCM=#53FFBC,blue_HCM=#80EBFF,pink_HCM=#F6B8FF,red_HCM=#C50043\",\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n historyUpdateUrl: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n ignoreDestinationZoom: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n imageResourcesPath: {\n /** @type {string} */\n value:\n typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")\n ? \"resource://pdf.js/web/images/\"\n : \"./images/\",\n kind: OptionKind.VIEWER,\n },\n maxCanvasPixels: {\n /** @type {number} */\n value: 2 ** 25,\n kind: OptionKind.VIEWER,\n },\n minDurationToUpdateCanvas: {\n /** @type {number} */\n value: 500, // ms\n kind: OptionKind.VIEWER,\n },\n forcePageColors: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n pageColorsBackground: {\n /** @type {string} */\n value: \"Canvas\",\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n pageColorsForeground: {\n /** @type {string} */\n value: \"CanvasText\",\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n pdfBugEnabled: {\n /** @type {boolean} */\n value: typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\"),\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n printResolution: {\n /** @type {number} */\n value: 150,\n kind: OptionKind.VIEWER,\n },\n sidebarViewOnLoad: {\n /** @type {number} */\n value: -1,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n scrollModeOnLoad: {\n /** @type {number} */\n value: -1,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n spreadModeOnLoad: {\n /** @type {number} */\n value: -1,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n textLayerMode: {\n /** @type {number} */\n value: 1,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n viewerCssTheme: {\n /** @type {number} */\n value: typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"CHROME\") ? 2 : 0,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n viewOnLoad: {\n /** @type {boolean} */\n value: 0,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n\n cMapPacked: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.API,\n },\n cMapUrl: {\n /** @type {string} */\n value:\n // eslint-disable-next-line no-nested-ternary\n typeof PDFJSDev === \"undefined\"\n ? \"../external/bcmaps/\"\n : PDFJSDev.test(\"MOZCENTRAL\")\n ? \"resource://pdf.js/web/cmaps/\"\n : \"../web/cmaps/\",\n kind: OptionKind.API,\n },\n disableAutoFetch: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.API + OptionKind.PREFERENCE,\n },\n disableFontFace: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.API + OptionKind.PREFERENCE,\n },\n disableRange: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.API + OptionKind.PREFERENCE,\n },\n disableStream: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.API + OptionKind.PREFERENCE,\n },\n docBaseUrl: {\n /** @type {string} */\n value:\n typeof PDFJSDev === \"undefined\"\n ? // NOTE: We cannot use the `updateUrlHash` function here, because of\n // the default preferences generation (see `gulpfile.mjs`).\n // However, the following line is *only* used in development mode.\n document.URL.split(\"#\", 1)[0]\n : \"\",\n kind: OptionKind.API,\n },\n enableHWA: {\n /** @type {boolean} */\n value: typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"MOZCENTRAL\"),\n kind: OptionKind.API + OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enableXfa: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.API + OptionKind.PREFERENCE,\n },\n fontExtraProperties: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.API,\n },\n iccUrl: {\n /** @type {string} */\n value:\n // eslint-disable-next-line no-nested-ternary\n typeof PDFJSDev === \"undefined\"\n ? \"../external/iccs/\"\n : PDFJSDev.test(\"MOZCENTRAL\")\n ? \"resource://pdf.js/web/iccs/\"\n : \"../web/iccs/\",\n kind: OptionKind.API,\n },\n isEvalSupported: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.API,\n },\n isOffscreenCanvasSupported: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.API,\n },\n maxImageSize: {\n /** @type {number} */\n value: -1,\n kind: OptionKind.API,\n },\n pdfBug: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.API,\n },\n standardFontDataUrl: {\n /** @type {string} */\n value:\n // eslint-disable-next-line no-nested-ternary\n typeof PDFJSDev === \"undefined\"\n ? \"../external/standard_fonts/\"\n : PDFJSDev.test(\"MOZCENTRAL\")\n ? \"resource://pdf.js/web/standard_fonts/\"\n : \"../web/standard_fonts/\",\n kind: OptionKind.API,\n },\n useSystemFonts: {\n // On Android, there is almost no chance to have the font we want so we\n // don't use the system fonts in this case (bug 1882613).\n /** @type {boolean|undefined} */\n value: (\n typeof PDFJSDev === \"undefined\"\n ? window.isGECKOVIEW\n : PDFJSDev.test(\"GECKOVIEW\")\n )\n ? false\n : undefined,\n kind: OptionKind.API,\n type: Type.BOOLEAN + Type.UNDEFINED,\n },\n verbosity: {\n /** @type {number} */\n value: 1,\n kind: OptionKind.API,\n },\n wasmUrl: {\n /** @type {string} */\n value:\n typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")\n ? \"resource://pdf.js/web/wasm/\"\n : \"../web/wasm/\",\n kind: OptionKind.API,\n },\n\n workerPort: {\n /** @type {Object} */\n value:\n typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")\n ? globalThis.pdfjsPreloadedWorker || null\n : null,\n kind: OptionKind.WORKER,\n },\n workerSrc: {\n /** @type {string} */\n value:\n // eslint-disable-next-line no-nested-ternary\n typeof PDFJSDev === \"undefined\"\n ? \"../src/pdf.worker.js\"\n : PDFJSDev.test(\"MOZCENTRAL\")\n ? \"resource://pdf.js/build/pdf.worker.mjs\"\n : \"../build/pdf.worker.mjs\",\n kind: OptionKind.WORKER,\n },\n};\nif (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\n defaultOptions.defaultUrl = {\n /** @type {string} */\n value:\n typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"CHROME\")\n ? \"\"\n : \"compressed.tracemonkey-pldi-09.pdf\",\n kind: OptionKind.VIEWER,\n };\n defaultOptions.sandboxBundleSrc = {\n /** @type {string} */\n value:\n typeof PDFJSDev === \"undefined\"\n ? \"../build/dev-sandbox/pdf.sandbox.mjs\"\n : \"../build/pdf.sandbox.mjs\",\n kind: OptionKind.VIEWER,\n };\n defaultOptions.enableFakeMLManager = {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.VIEWER,\n };\n}\nif (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n defaultOptions.disablePreferences = {\n /** @type {boolean} */\n value: typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\"),\n kind: OptionKind.VIEWER,\n };\n} else if (PDFJSDev.test(\"CHROME\")) {\n defaultOptions.disableTelemetry = {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n };\n}\n\nif (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING || LIB\")) {\n // Ensure that the `defaultOptions` are correctly specified.\n for (const name in defaultOptions) {\n const { value, kind, type } = defaultOptions[name];\n\n if (kind & OptionKind.PREFERENCE) {\n if (kind === OptionKind.PREFERENCE) {\n throw new Error(`Cannot use only \"PREFERENCE\" kind: ${name}`);\n }\n if (kind & OptionKind.BROWSER) {\n throw new Error(`Cannot mix \"PREFERENCE\" and \"BROWSER\" kind: ${name}`);\n }\n if (type !== undefined) {\n throw new Error(\n `Cannot have \\`type\\`-field for \"PREFERENCE\" kind: ${name}`\n );\n }\n if (typeof compatParams === \"object\" && compatParams.has(name)) {\n throw new Error(\n `Should not have compatibility-value for \"PREFERENCE\" kind: ${name}`\n );\n }\n // Only \"simple\" preference-values are allowed.\n if (\n typeof value !== \"boolean\" &&\n typeof value !== \"string\" &&\n !Number.isInteger(value)\n ) {\n throw new Error(`Invalid value for \"PREFERENCE\" kind: ${name}`);\n }\n } else if (kind & OptionKind.BROWSER) {\n if (type !== undefined) {\n throw new Error(\n `Cannot have \\`type\\`-field for \"BROWSER\" kind: ${name}`\n );\n }\n if (typeof compatParams === \"object\" && compatParams.has(name)) {\n throw new Error(\n `Should not have compatibility-value for \"BROWSER\" kind: ${name}`\n );\n }\n if (value === undefined) {\n throw new Error(`Invalid value for \"BROWSER\" kind: ${name}`);\n }\n }\n }\n}\n\nclass AppOptions {\n static eventBus;\n\n static #opts = new Map();\n\n static {\n // Initialize all the user-options.\n for (const name in defaultOptions) {\n this.#opts.set(name, defaultOptions[name].value);\n }\n\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n // Apply any compatibility-values to the user-options.\n for (const [name, value] of compatParams) {\n this.#opts.set(name, value);\n }\n this._hasInvokedSet = false;\n\n this._checkDisablePreferences = () => {\n if (this.get(\"disablePreferences\")) {\n // Give custom implementations of the default viewer a simpler way to\n // opt-out of having the `Preferences` override existing `AppOptions`.\n return true;\n }\n if (this._hasInvokedSet) {\n console.warn(\n \"The Preferences may override manually set AppOptions; \" +\n 'please use the \"disablePreferences\"-option to prevent that.'\n );\n }\n return false;\n };\n }\n }\n\n constructor() {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n throw new Error(\"Cannot initialize AppOptions.\");\n }\n }\n\n static get(name) {\n return this.#opts.get(name);\n }\n\n static getAll(kind = null, defaultOnly = false) {\n const options = Object.create(null);\n for (const name in defaultOptions) {\n const defaultOpt = defaultOptions[name];\n\n if (kind && !(kind & defaultOpt.kind)) {\n continue;\n }\n options[name] = !defaultOnly ? this.#opts.get(name) : defaultOpt.value;\n }\n return options;\n }\n\n static set(name, value) {\n this.setAll({ [name]: value });\n }\n\n static setAll(options, prefs = false) {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n this._hasInvokedSet ||= true;\n }\n let events;\n\n for (const name in options) {\n const defaultOpt = defaultOptions[name],\n userOpt = options[name];\n\n if (\n !defaultOpt ||\n !(\n typeof userOpt === typeof defaultOpt.value ||\n Type[(typeof userOpt).toUpperCase()] & defaultOpt.type\n )\n ) {\n continue;\n }\n const { kind } = defaultOpt;\n\n if (\n prefs &&\n !(kind & OptionKind.BROWSER || kind & OptionKind.PREFERENCE)\n ) {\n continue;\n }\n if (this.eventBus && kind & OptionKind.EVENT_DISPATCH) {\n (events ||= new Map()).set(name, userOpt);\n }\n this.#opts.set(name, userOpt);\n }\n\n if (events) {\n for (const [name, value] of events) {\n this.eventBus.dispatch(name.toLowerCase(), { source: this, value });\n }\n }\n }\n}\n\nexport { AppOptions, OptionKind };\n","/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./event_utils\").EventBus} EventBus */\n/** @typedef {import(\"./interfaces\").IPDFLinkService} IPDFLinkService */\n\nimport { isValidExplicitDest } from \"pdfjs-lib\";\nimport { parseQueryString } from \"./ui_utils.js\";\n\nconst DEFAULT_LINK_REL = \"noopener noreferrer nofollow\";\n\nconst LinkTarget = {\n NONE: 0, // Default value.\n SELF: 1,\n BLANK: 2,\n PARENT: 3,\n TOP: 4,\n};\n\n/**\n * @typedef {Object} PDFLinkServiceOptions\n * @property {EventBus} eventBus - The application event bus.\n * @property {number} [externalLinkTarget] - Specifies the `target` attribute\n * for external links. Must use one of the values from {LinkTarget}.\n * Defaults to using no target.\n * @property {string} [externalLinkRel] - Specifies the `rel` attribute for\n * external links. Defaults to stripping the referrer.\n * @property {boolean} [ignoreDestinationZoom] - Ignores the zoom argument,\n * thus preserving the current zoom level in the viewer, when navigating\n * to internal destinations. The default value is `false`.\n */\n\n/**\n * Performs navigation functions inside PDF, such as opening specified page,\n * or destination.\n * @implements {IPDFLinkService}\n */\nclass PDFLinkService {\n externalLinkEnabled = true;\n\n /**\n * @param {PDFLinkServiceOptions} options\n */\n constructor({\n eventBus,\n externalLinkTarget = null,\n externalLinkRel = null,\n ignoreDestinationZoom = false,\n } = {}) {\n this.eventBus = eventBus;\n this.externalLinkTarget = externalLinkTarget;\n this.externalLinkRel = externalLinkRel;\n this._ignoreDestinationZoom = ignoreDestinationZoom;\n\n this.baseUrl = null;\n this.pdfDocument = null;\n this.pdfViewer = null;\n this.pdfHistory = null;\n }\n\n setDocument(pdfDocument, baseUrl = null) {\n this.baseUrl = baseUrl;\n this.pdfDocument = pdfDocument;\n }\n\n setViewer(pdfViewer) {\n this.pdfViewer = pdfViewer;\n }\n\n setHistory(pdfHistory) {\n this.pdfHistory = pdfHistory;\n }\n\n /**\n * @type {number}\n */\n get pagesCount() {\n return this.pdfDocument ? this.pdfDocument.numPages : 0;\n }\n\n /**\n * @type {number}\n */\n get page() {\n return this.pdfDocument ? this.pdfViewer.currentPageNumber : 1;\n }\n\n /**\n * @param {number} value\n */\n set page(value) {\n if (this.pdfDocument) {\n this.pdfViewer.currentPageNumber = value;\n }\n }\n\n /**\n * @type {number}\n */\n get rotation() {\n return this.pdfDocument ? this.pdfViewer.pagesRotation : 0;\n }\n\n /**\n * @param {number} value\n */\n set rotation(value) {\n if (this.pdfDocument) {\n this.pdfViewer.pagesRotation = value;\n }\n }\n\n /**\n * @type {boolean}\n */\n get isInPresentationMode() {\n return this.pdfDocument ? this.pdfViewer.isInPresentationMode : false;\n }\n\n /**\n * This method will, when available, also update the browser history.\n *\n * @param {string|Array} dest - The named, or explicit, PDF destination.\n */\n async goToDestination(dest) {\n if (!this.pdfDocument) {\n return;\n }\n let namedDest, explicitDest, pageNumber;\n if (typeof dest === \"string\") {\n namedDest = dest;\n explicitDest = await this.pdfDocument.getDestination(dest);\n } else {\n namedDest = null;\n explicitDest = await dest;\n }\n if (!Array.isArray(explicitDest)) {\n console.error(\n `goToDestination: \"${explicitDest}\" is not a valid destination array, for dest=\"${dest}\".`\n );\n return;\n }\n // Dest array looks like that: \n const [destRef] = explicitDest;\n\n if (destRef && typeof destRef === \"object\") {\n pageNumber = this.pdfDocument.cachedPageNumber(destRef);\n\n if (!pageNumber) {\n // Fetch the page reference if it's not yet available. This could\n // only occur during loading, before all pages have been resolved.\n try {\n pageNumber = (await this.pdfDocument.getPageIndex(destRef)) + 1;\n } catch {\n console.error(\n `goToDestination: \"${destRef}\" is not a valid page reference, for dest=\"${dest}\".`\n );\n return;\n }\n }\n } else if (Number.isInteger(destRef)) {\n pageNumber = destRef + 1;\n }\n if (!pageNumber || pageNumber < 1 || pageNumber > this.pagesCount) {\n console.error(\n `goToDestination: \"${pageNumber}\" is not a valid page number, for dest=\"${dest}\".`\n );\n return;\n }\n\n if (this.pdfHistory) {\n // Update the browser history before scrolling the new destination into\n // view, to be able to accurately capture the current document position.\n this.pdfHistory.pushCurrentPosition();\n this.pdfHistory.push({ namedDest, explicitDest, pageNumber });\n }\n\n this.pdfViewer.scrollPageIntoView({\n pageNumber,\n destArray: explicitDest,\n ignoreDestinationZoom: this._ignoreDestinationZoom,\n });\n\n const ac = new AbortController();\n this.eventBus._on(\n \"textlayerrendered\",\n evt => {\n if (evt.pageNumber === pageNumber) {\n evt.source.textLayer.div.focus();\n ac.abort();\n }\n },\n { signal: ac.signal }\n );\n }\n\n /**\n * This method will, when available, also update the browser history.\n *\n * @param {number|string} val - The page number, or page label.\n */\n goToPage(val) {\n if (!this.pdfDocument) {\n return;\n }\n const pageNumber =\n (typeof val === \"string\" && this.pdfViewer.pageLabelToPageNumber(val)) ||\n val | 0;\n if (\n !(\n Number.isInteger(pageNumber) &&\n pageNumber > 0 &&\n pageNumber <= this.pagesCount\n )\n ) {\n console.error(`PDFLinkService.goToPage: \"${val}\" is not a valid page.`);\n return;\n }\n\n if (this.pdfHistory) {\n // Update the browser history before scrolling the new page into view,\n // to be able to accurately capture the current document position.\n this.pdfHistory.pushCurrentPosition();\n this.pdfHistory.pushPage(pageNumber);\n }\n\n this.pdfViewer.scrollPageIntoView({ pageNumber });\n }\n\n /**\n * Scrolls to a specific location in the PDF document.\n * @param {number} pageNumber - The page number to scroll to.\n * @param {number} x - The x-coordinate to scroll to in page coordinates.\n * @param {number} y - The y-coordinate to scroll to in page coordinates.\n * @param {Object} [options]\n */\n goToXY(pageNumber, x, y, options = {}) {\n this.pdfViewer.scrollPageIntoView({\n pageNumber,\n destArray: [null, { name: \"XYZ\" }, x, y],\n ignoreDestinationZoom: true,\n ...options,\n });\n }\n\n /**\n * Adds various attributes (href, title, target, rel) to hyperlinks.\n * @param {HTMLAnchorElement} link\n * @param {string} url\n * @param {boolean} [newWindow]\n */\n addLinkAttributes(link, url, newWindow = false) {\n if (!url || typeof url !== \"string\") {\n throw new Error('A valid \"url\" parameter must provided.');\n }\n const target = newWindow ? LinkTarget.BLANK : this.externalLinkTarget,\n rel = this.externalLinkRel;\n\n if (this.externalLinkEnabled) {\n link.href = link.title = url;\n } else {\n link.href = \"\";\n link.title = `Disabled: ${url}`;\n link.onclick = () => false;\n }\n\n let targetStr = \"\"; // LinkTarget.NONE\n switch (target) {\n case LinkTarget.NONE:\n break;\n case LinkTarget.SELF:\n targetStr = \"_self\";\n break;\n case LinkTarget.BLANK:\n targetStr = \"_blank\";\n break;\n case LinkTarget.PARENT:\n targetStr = \"_parent\";\n break;\n case LinkTarget.TOP:\n targetStr = \"_top\";\n break;\n }\n link.target = targetStr;\n\n link.rel = typeof rel === \"string\" ? rel : DEFAULT_LINK_REL;\n }\n\n /**\n * @param {string|Array} dest - The PDF destination object.\n * @returns {string} The hyperlink to the PDF object.\n */\n getDestinationHash(dest) {\n if (typeof dest === \"string\") {\n if (dest.length > 0) {\n return this.getAnchorUrl(\"#\" + escape(dest));\n }\n } else if (Array.isArray(dest)) {\n const str = JSON.stringify(dest);\n if (str.length > 0) {\n return this.getAnchorUrl(\"#\" + escape(str));\n }\n }\n return this.getAnchorUrl(\"\");\n }\n\n /**\n * Prefix the full url on anchor links to make sure that links are resolved\n * relative to the current URL instead of the one defined in .\n * @param {string} anchor - The anchor hash, including the #.\n * @returns {string} The hyperlink to the PDF object.\n */\n getAnchorUrl(anchor) {\n return this.baseUrl ? this.baseUrl + anchor : anchor;\n }\n\n /**\n * @param {string} hash\n */\n setHash(hash) {\n if (!this.pdfDocument) {\n return;\n }\n let pageNumber, dest;\n if (hash.includes(\"=\")) {\n const params = parseQueryString(hash);\n if (params.has(\"search\")) {\n const query = params.get(\"search\").replaceAll('\"', \"\"),\n phrase = params.get(\"phrase\") === \"true\";\n\n this.eventBus.dispatch(\"findfromurlhash\", {\n source: this,\n query: phrase ? query : query.match(/\\S+/g),\n });\n }\n // borrowing syntax from \"Parameters for Opening PDF Files\"\n if (params.has(\"page\")) {\n pageNumber = params.get(\"page\") | 0 || 1;\n }\n if (params.has(\"zoom\")) {\n // Build the destination array.\n const zoomArgs = params.get(\"zoom\").split(\",\"); // scale,left,top\n const zoomArg = zoomArgs[0];\n const zoomArgNumber = parseFloat(zoomArg);\n\n if (!zoomArg.includes(\"Fit\")) {\n // If the zoomArg is a number, it has to get divided by 100. If it's\n // a string, it should stay as it is.\n dest = [\n null,\n { name: \"XYZ\" },\n zoomArgs.length > 1 ? zoomArgs[1] | 0 : null,\n zoomArgs.length > 2 ? zoomArgs[2] | 0 : null,\n zoomArgNumber ? zoomArgNumber / 100 : zoomArg,\n ];\n } else if (zoomArg === \"Fit\" || zoomArg === \"FitB\") {\n dest = [null, { name: zoomArg }];\n } else if (\n zoomArg === \"FitH\" ||\n zoomArg === \"FitBH\" ||\n zoomArg === \"FitV\" ||\n zoomArg === \"FitBV\"\n ) {\n dest = [\n null,\n { name: zoomArg },\n zoomArgs.length > 1 ? zoomArgs[1] | 0 : null,\n ];\n } else if (zoomArg === \"FitR\") {\n if (zoomArgs.length !== 5) {\n console.error(\n 'PDFLinkService.setHash: Not enough parameters for \"FitR\".'\n );\n } else {\n dest = [\n null,\n { name: zoomArg },\n zoomArgs[1] | 0,\n zoomArgs[2] | 0,\n zoomArgs[3] | 0,\n zoomArgs[4] | 0,\n ];\n }\n } else {\n console.error(\n `PDFLinkService.setHash: \"${zoomArg}\" is not a valid zoom value.`\n );\n }\n }\n if (dest) {\n this.pdfViewer.scrollPageIntoView({\n pageNumber: pageNumber || this.page,\n destArray: dest,\n allowNegativeOffset: true,\n });\n } else if (pageNumber) {\n this.page = pageNumber; // simple page\n }\n if (params.has(\"pagemode\")) {\n this.eventBus.dispatch(\"pagemode\", {\n source: this,\n mode: params.get(\"pagemode\"),\n });\n }\n // Ensure that this parameter is *always* handled last, in order to\n // guarantee that it won't be overridden (e.g. by the \"page\" parameter).\n if (params.has(\"nameddest\")) {\n this.goToDestination(params.get(\"nameddest\"));\n }\n\n if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\n return;\n }\n // Support opening of PDF attachments in the Firefox PDF Viewer,\n // which uses a couple of non-standard hash parameters; refer to\n // `DownloadManager.openOrDownloadData` in the firefoxcom.js file.\n if (!params.has(\"filename\") || !params.has(\"filedest\")) {\n return;\n }\n hash = params.get(\"filedest\");\n }\n\n // Named (or explicit) destination.\n dest = unescape(hash);\n try {\n dest = JSON.parse(dest);\n\n if (!Array.isArray(dest)) {\n // Avoid incorrectly rejecting a valid named destination, such as\n // e.g. \"4.3\" or \"true\", because `JSON.parse` converted its type.\n dest = dest.toString();\n }\n } catch {}\n\n if (typeof dest === \"string\" || isValidExplicitDest(dest)) {\n this.goToDestination(dest);\n return;\n }\n console.error(\n `PDFLinkService.setHash: \"${unescape(hash)}\" is not a valid destination.`\n );\n }\n\n /**\n * @param {string} action\n */\n executeNamedAction(action) {\n if (!this.pdfDocument) {\n return;\n }\n // See PDF reference, table 8.45 - Named action\n switch (action) {\n case \"GoBack\":\n this.pdfHistory?.back();\n break;\n\n case \"GoForward\":\n this.pdfHistory?.forward();\n break;\n\n case \"NextPage\":\n this.pdfViewer.nextPage();\n break;\n\n case \"PrevPage\":\n this.pdfViewer.previousPage();\n break;\n\n case \"LastPage\":\n this.page = this.pagesCount;\n break;\n\n case \"FirstPage\":\n this.page = 1;\n break;\n\n default:\n break; // No action according to spec\n }\n\n this.eventBus.dispatch(\"namedaction\", {\n source: this,\n action,\n });\n }\n\n /**\n * @param {Object} action\n */\n async executeSetOCGState(action) {\n if (!this.pdfDocument) {\n return;\n }\n const pdfDocument = this.pdfDocument,\n optionalContentConfig = await this.pdfViewer.optionalContentConfigPromise;\n\n if (pdfDocument !== this.pdfDocument) {\n return; // The document was closed while the optional content resolved.\n }\n optionalContentConfig.setOCGState(action);\n\n this.pdfViewer.optionalContentConfigPromise = Promise.resolve(\n optionalContentConfig\n );\n }\n}\n\n/**\n * @implements {IPDFLinkService}\n */\nclass SimpleLinkService extends PDFLinkService {\n setDocument(pdfDocument, baseUrl = null) {}\n}\n\nexport { LinkTarget, PDFLinkService, SimpleLinkService };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst WaitOnType = {\n EVENT: \"event\",\n TIMEOUT: \"timeout\",\n};\n\n/**\n * @typedef {Object} WaitOnEventOrTimeoutParameters\n * @property {Object} target - The event target, can for example be:\n * `window`, `document`, a DOM element, or an {EventBus} instance.\n * @property {string} name - The name of the event.\n * @property {number} delay - The delay, in milliseconds, after which the\n * timeout occurs (if the event wasn't already dispatched).\n */\n\n/**\n * Allows waiting for an event or a timeout, whichever occurs first.\n * Can be used to ensure that an action always occurs, even when an event\n * arrives late or not at all.\n *\n * @param {WaitOnEventOrTimeoutParameters}\n * @returns {Promise} A promise that is resolved with a {WaitOnType} value.\n */\nasync function waitOnEventOrTimeout({ target, name, delay = 0 }) {\n if (\n typeof target !== \"object\" ||\n !(name && typeof name === \"string\") ||\n !(Number.isInteger(delay) && delay >= 0)\n ) {\n throw new Error(\"waitOnEventOrTimeout - invalid parameters.\");\n }\n const { promise, resolve } = Promise.withResolvers();\n const ac = new AbortController();\n\n function handler(type) {\n ac.abort(); // Remove event listener.\n clearTimeout(timeout);\n\n resolve(type);\n }\n\n const evtMethod = target instanceof EventBus ? \"_on\" : \"addEventListener\";\n target[evtMethod](name, handler.bind(null, WaitOnType.EVENT), {\n signal: ac.signal,\n });\n\n const timeout = setTimeout(handler.bind(null, WaitOnType.TIMEOUT), delay);\n\n return promise;\n}\n\n/**\n * Simple event bus for an application. Listeners are attached using the `on`\n * and `off` methods. To raise an event, the `dispatch` method shall be used.\n */\nclass EventBus {\n #listeners = Object.create(null);\n\n /**\n * @param {string} eventName\n * @param {function} listener\n * @param {Object} [options]\n */\n on(eventName, listener, options = null) {\n this._on(eventName, listener, {\n external: true,\n once: options?.once,\n signal: options?.signal,\n });\n }\n\n /**\n * @param {string} eventName\n * @param {function} listener\n * @param {Object} [options]\n */\n off(eventName, listener, options = null) {\n this._off(eventName, listener);\n }\n\n /**\n * @param {string} eventName\n * @param {Object} data\n */\n dispatch(eventName, data) {\n const eventListeners = this.#listeners[eventName];\n if (!eventListeners || eventListeners.length === 0) {\n return;\n }\n let externalListeners;\n // Making copy of the listeners array in case if it will be modified\n // during dispatch.\n for (const { listener, external, once } of eventListeners.slice(0)) {\n if (once) {\n this._off(eventName, listener);\n }\n if (external) {\n (externalListeners ||= []).push(listener);\n continue;\n }\n listener(data);\n }\n // Dispatch any \"external\" listeners *after* the internal ones, to give the\n // viewer components time to handle events and update their state first.\n if (externalListeners) {\n for (const listener of externalListeners) {\n listener(data);\n }\n externalListeners = null;\n }\n }\n\n /**\n * @ignore\n */\n _on(eventName, listener, options = null) {\n let rmAbort = null;\n if (options?.signal instanceof AbortSignal) {\n const { signal } = options;\n if (signal.aborted) {\n console.error(\"Cannot use an `aborted` signal.\");\n return;\n }\n const onAbort = () => this._off(eventName, listener);\n rmAbort = () => signal.removeEventListener(\"abort\", onAbort);\n\n signal.addEventListener(\"abort\", onAbort);\n }\n\n const eventListeners = (this.#listeners[eventName] ||= []);\n eventListeners.push({\n listener,\n external: options?.external === true,\n once: options?.once === true,\n rmAbort,\n });\n }\n\n /**\n * @ignore\n */\n _off(eventName, listener, options = null) {\n const eventListeners = this.#listeners[eventName];\n if (!eventListeners) {\n return;\n }\n for (let i = 0, ii = eventListeners.length; i < ii; i++) {\n const evt = eventListeners[i];\n if (evt.listener === listener) {\n evt.rmAbort?.(); // Ensure that the `AbortSignal` listener is removed.\n eventListeners.splice(i, 1);\n return;\n }\n }\n }\n}\n\n/**\n * NOTE: Only used in the Firefox built-in pdf viewer.\n */\nclass FirefoxEventBus extends EventBus {\n #externalServices;\n\n #globalEventNames;\n\n #isInAutomation;\n\n constructor(globalEventNames, externalServices, isInAutomation) {\n super();\n this.#globalEventNames = globalEventNames;\n this.#externalServices = externalServices;\n this.#isInAutomation = isInAutomation;\n }\n\n dispatch(eventName, data) {\n if (typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: FirefoxEventBus.dispatch\");\n }\n super.dispatch(eventName, data);\n\n if (this.#isInAutomation) {\n const detail = Object.create(null);\n if (data) {\n for (const key in data) {\n const value = data[key];\n if (key === \"source\") {\n if (value === window || value === document) {\n return; // No need to re-dispatch (already) global events.\n }\n continue; // Ignore the `source` property.\n }\n detail[key] = value;\n }\n }\n const event = new CustomEvent(eventName, {\n bubbles: true,\n cancelable: true,\n detail,\n });\n document.dispatchEvent(event);\n }\n\n if (this.#globalEventNames?.has(eventName)) {\n this.#externalServices.dispatchGlobalEvent({\n eventName,\n detail: data,\n });\n }\n }\n}\n\nexport { EventBus, FirefoxEventBus, waitOnEventOrTimeout, WaitOnType };\n","/* Copyright 2024 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./interfaces.js\").IL10n} IL10n */\n\nclass BaseExternalServices {\n constructor() {\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n this.constructor === BaseExternalServices\n ) {\n throw new Error(\"Cannot initialize BaseExternalServices.\");\n }\n }\n\n updateFindControlState(data) {}\n\n updateFindMatchesCount(data) {}\n\n initPassiveLoading() {}\n\n reportTelemetry(data) {}\n\n reportText(data) {}\n\n /**\n * @returns {Promise}\n */\n async createL10n() {\n throw new Error(\"Not implemented: createL10n\");\n }\n\n createScripting() {\n throw new Error(\"Not implemented: createScripting\");\n }\n\n createSignatureStorage() {\n throw new Error(\"Not implemented: createSignatureStorage\");\n }\n\n updateEditorStates(data) {\n throw new Error(\"Not implemented: updateEditorStates\");\n }\n\n dispatchGlobalEvent(_event) {}\n}\n\nexport { BaseExternalServices };\n","/* Copyright 2013 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AppOptions, OptionKind } from \"./app_options.js\";\n\n/**\n * BasePreferences - Abstract base class for storing persistent settings.\n * Used for settings that should be applied to all opened documents,\n * or every time the viewer is loaded.\n */\nclass BasePreferences {\n #defaults = Object.freeze(\n typeof PDFJSDev === \"undefined\"\n ? AppOptions.getAll(OptionKind.PREFERENCE, /* defaultOnly = */ true)\n : PDFJSDev.eval(\"DEFAULT_PREFERENCES\")\n );\n\n #initializedPromise = null;\n\n constructor() {\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n this.constructor === BasePreferences\n ) {\n throw new Error(\"Cannot initialize BasePreferences.\");\n }\n\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"CHROME\")) {\n Object.defineProperty(this, \"defaults\", {\n get() {\n return this.#defaults;\n },\n });\n }\n\n this.#initializedPromise = this._readFromStorage(this.#defaults).then(\n ({ browserPrefs, prefs }) => {\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n AppOptions._checkDisablePreferences()\n ) {\n return;\n }\n AppOptions.setAll({ ...browserPrefs, ...prefs }, /* prefs = */ true);\n }\n );\n\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n window.addEventListener(\n \"updatedPreference\",\n async ({ detail: { name, value } }) => {\n await this.#initializedPromise;\n AppOptions.setAll({ [name]: value }, /* prefs = */ true);\n }\n );\n }\n }\n\n /**\n * Stub function for writing preferences to storage.\n * @param {Object} prefObj The preferences that should be written to storage.\n * @returns {Promise} A promise that is resolved when the preference values\n * have been written.\n */\n async _writeToStorage(prefObj) {\n throw new Error(\"Not implemented: _writeToStorage\");\n }\n\n /**\n * Stub function for reading preferences from storage.\n * @param {Object} prefObj The preferences that should be read from storage.\n * @returns {Promise} A promise that is resolved with an {Object} containing\n * the preferences that have been read.\n */\n async _readFromStorage(prefObj) {\n throw new Error(\"Not implemented: _readFromStorage\");\n }\n\n /**\n * Reset the preferences to their default values and update storage.\n * @returns {Promise} A promise that is resolved when the preference values\n * have been reset.\n */\n async reset() {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Please use `about:config` to change preferences.\");\n }\n await this.#initializedPromise;\n AppOptions.setAll(this.#defaults, /* prefs = */ true);\n\n await this._writeToStorage(this.#defaults);\n }\n\n /**\n * Set the value of a preference.\n * @param {string} name The name of the preference that should be changed.\n * @param {boolean|number|string} value The new value of the preference.\n * @returns {Promise} A promise that is resolved when the value has been set,\n * provided that the preference exists and the types match.\n */\n async set(name, value) {\n await this.#initializedPromise;\n AppOptions.setAll({ [name]: value }, /* prefs = */ true);\n\n await this._writeToStorage(\n typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")\n ? { [name]: AppOptions.get(name) }\n : AppOptions.getAll(OptionKind.PREFERENCE)\n );\n }\n\n /**\n * Get the value of a preference.\n * @param {string} name The name of the preference whose value is requested.\n * @returns {Promise} A promise resolved with a {boolean|number|string}\n * containing the value of the preference.\n */\n async get(name) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: get\");\n }\n await this.#initializedPromise;\n return AppOptions.get(name);\n }\n\n get initializedPromise() {\n return this.#initializedPromise;\n }\n}\n\nexport { BasePreferences };\n","/**\n * The `FluentType` class is the base of Fluent's type system.\n *\n * Fluent types wrap JavaScript values and store additional configuration for\n * them, which can then be used in the `toString` method together with a proper\n * `Intl` formatter.\n */\nexport class FluentType {\n /**\n * Create a `FluentType` instance.\n *\n * @param value The JavaScript value to wrap.\n */\n constructor(value) {\n this.value = value;\n }\n /**\n * Unwrap the raw value stored by this `FluentType`.\n */\n valueOf() {\n return this.value;\n }\n}\n/**\n * A {@link FluentType} representing no correct value.\n */\nexport class FluentNone extends FluentType {\n /**\n * Create an instance of `FluentNone` with an optional fallback value.\n * @param value The fallback value of this `FluentNone`.\n */\n constructor(value = \"???\") {\n super(value);\n }\n /**\n * Format this `FluentNone` to the fallback string.\n */\n toString(scope) {\n return `{${this.value}}`;\n }\n}\n/**\n * A {@link FluentType} representing a number.\n *\n * A `FluentNumber` instance stores the number value of the number it\n * represents. It may also store an option bag of options which will be passed\n * to `Intl.NumerFormat` when the `FluentNumber` is formatted to a string.\n */\nexport class FluentNumber extends FluentType {\n /**\n * Create an instance of `FluentNumber` with options to the\n * `Intl.NumberFormat` constructor.\n *\n * @param value The number value of this `FluentNumber`.\n * @param opts Options which will be passed to `Intl.NumberFormat`.\n */\n constructor(value, opts = {}) {\n super(value);\n this.opts = opts;\n }\n /**\n * Format this `FluentNumber` to a string.\n */\n toString(scope) {\n if (scope) {\n try {\n const nf = scope.memoizeIntlObject(Intl.NumberFormat, this.opts);\n return nf.format(this.value);\n }\n catch (err) {\n scope.reportError(err);\n }\n }\n return this.value.toString(10);\n }\n}\n/**\n * A {@link FluentType} representing a date and time.\n *\n * A `FluentDateTime` instance stores a Date object, Temporal object, or a number\n * as a numerical timestamp in milliseconds. It may also store an\n * option bag of options which will be passed to `Intl.DateTimeFormat` when the\n * `FluentDateTime` is formatted to a string.\n */\nexport class FluentDateTime extends FluentType {\n static supportsValue(value) {\n if (typeof value === \"number\")\n return true;\n if (value instanceof Date)\n return true;\n if (value instanceof FluentType)\n return FluentDateTime.supportsValue(value.valueOf());\n // Temporary workaround to support environments without Temporal\n if (\"Temporal\" in globalThis) {\n // for TypeScript, which doesn't know about Temporal yet\n const _Temporal = globalThis.Temporal;\n if (value instanceof _Temporal.Instant ||\n value instanceof _Temporal.PlainDateTime ||\n value instanceof _Temporal.PlainDate ||\n value instanceof _Temporal.PlainMonthDay ||\n value instanceof _Temporal.PlainTime ||\n value instanceof _Temporal.PlainYearMonth) {\n return true;\n }\n }\n return false;\n }\n /**\n * Create an instance of `FluentDateTime` with options to the\n * `Intl.DateTimeFormat` constructor.\n *\n * @param value The number value of this `FluentDateTime`, in milliseconds.\n * @param opts Options which will be passed to `Intl.DateTimeFormat`.\n */\n constructor(value, opts = {}) {\n // unwrap any FluentType value, but only retain the opts from FluentDateTime\n if (value instanceof FluentDateTime) {\n opts = { ...value.opts, ...opts };\n value = value.value;\n }\n else if (value instanceof FluentType) {\n value = value.valueOf();\n }\n // Intl.DateTimeFormat defaults to gregorian calendar, but Temporal defaults to iso8601\n if (typeof value === \"object\" &&\n \"calendarId\" in value &&\n opts.calendar === undefined) {\n opts = { ...opts, calendar: value.calendarId };\n }\n super(value);\n this.opts = opts;\n }\n [Symbol.toPrimitive](hint) {\n return hint === \"string\" ? this.toString() : this.toNumber();\n }\n /**\n * Convert this `FluentDateTime` to a number.\n * Note that this isn't always possible due to the nature of Temporal objects.\n * In such cases, a TypeError will be thrown.\n */\n toNumber() {\n const value = this.value;\n if (typeof value === \"number\")\n return value;\n if (value instanceof Date)\n return value.getTime();\n if (\"epochMilliseconds\" in value) {\n return value.epochMilliseconds;\n }\n if (\"toZonedDateTime\" in value) {\n return value.toZonedDateTime(\"UTC\").epochMilliseconds;\n }\n throw new TypeError(\"Unwrapping a non-number value as a number\");\n }\n /**\n * Format this `FluentDateTime` to a string.\n */\n toString(scope) {\n if (scope) {\n try {\n const dtf = scope.memoizeIntlObject(Intl.DateTimeFormat, this.opts);\n return dtf.format(this.value);\n }\n catch (err) {\n scope.reportError(err);\n }\n }\n if (typeof this.value === \"number\" || this.value instanceof Date) {\n return new Date(this.value).toISOString();\n }\n return this.value.toString();\n }\n}\n","/**\n * The role of the Fluent resolver is to format a `Pattern` to an instance of\n * `FluentValue`. For performance reasons, primitive strings are considered\n * such instances, too.\n *\n * Translations can contain references to other messages or variables,\n * conditional logic in form of select expressions, traits which describe their\n * grammatical features, and can use Fluent builtins which make use of the\n * `Intl` formatters to format numbers and dates into the bundle's languages.\n * See the documentation of the Fluent syntax for more information.\n *\n * In case of errors the resolver will try to salvage as much of the\n * translation as possible. In rare situations where the resolver didn't know\n * how to recover from an error it will return an instance of `FluentNone`.\n *\n * All expressions resolve to an instance of `FluentValue`. The caller should\n * use the `toString` method to convert the instance to a native value.\n *\n * Functions in this file pass around an instance of the `Scope` class, which\n * stores the data required for successful resolution and error recovery.\n */\nimport { FluentType, FluentNone, FluentNumber, FluentDateTime, } from \"./types.js\";\n/**\n * The maximum number of placeables which can be expanded in a single call to\n * `formatPattern`. The limit protects against the Billion Laughs and Quadratic\n * Blowup attacks. See https://msdn.microsoft.com/en-us/magazine/ee335713.aspx.\n */\nconst MAX_PLACEABLES = 100;\n/** Unicode bidi isolation characters. */\nconst FSI = \"\\u2068\";\nconst PDI = \"\\u2069\";\n/** Helper: match a variant key to the given selector. */\nfunction match(scope, selector, key) {\n if (key === selector) {\n // Both are strings.\n return true;\n }\n // XXX Consider comparing options too, e.g. minimumFractionDigits.\n if (key instanceof FluentNumber &&\n selector instanceof FluentNumber &&\n key.value === selector.value) {\n return true;\n }\n if (selector instanceof FluentNumber && typeof key === \"string\") {\n let category = scope\n .memoizeIntlObject(Intl.PluralRules, selector.opts)\n .select(selector.value);\n if (key === category) {\n return true;\n }\n }\n return false;\n}\n/** Helper: resolve the default variant from a list of variants. */\nfunction getDefault(scope, variants, star) {\n if (variants[star]) {\n return resolvePattern(scope, variants[star].value);\n }\n scope.reportError(new RangeError(\"No default\"));\n return new FluentNone();\n}\n/** Helper: resolve arguments to a call expression. */\nfunction getArguments(scope, args) {\n const positional = [];\n const named = Object.create(null);\n for (const arg of args) {\n if (arg.type === \"narg\") {\n named[arg.name] = resolveExpression(scope, arg.value);\n }\n else {\n positional.push(resolveExpression(scope, arg));\n }\n }\n return { positional, named };\n}\n/** Resolve an expression to a Fluent type. */\nfunction resolveExpression(scope, expr) {\n switch (expr.type) {\n case \"str\":\n return expr.value;\n case \"num\":\n return new FluentNumber(expr.value, {\n minimumFractionDigits: expr.precision,\n });\n case \"var\":\n return resolveVariableReference(scope, expr);\n case \"mesg\":\n return resolveMessageReference(scope, expr);\n case \"term\":\n return resolveTermReference(scope, expr);\n case \"func\":\n return resolveFunctionReference(scope, expr);\n case \"select\":\n return resolveSelectExpression(scope, expr);\n default:\n return new FluentNone();\n }\n}\n/** Resolve a reference to a variable. */\nfunction resolveVariableReference(scope, { name }) {\n let arg;\n if (scope.params) {\n // We're inside a TermReference. It's OK to reference undefined parameters.\n if (Object.prototype.hasOwnProperty.call(scope.params, name)) {\n arg = scope.params[name];\n }\n else {\n return new FluentNone(`$${name}`);\n }\n }\n else if (scope.args &&\n Object.prototype.hasOwnProperty.call(scope.args, name)) {\n // We're in the top-level Pattern or inside a MessageReference. Missing\n // variables references produce ReferenceErrors.\n arg = scope.args[name];\n }\n else {\n scope.reportError(new ReferenceError(`Unknown variable: $${name}`));\n return new FluentNone(`$${name}`);\n }\n // Return early if the argument already is an instance of FluentType.\n if (arg instanceof FluentType) {\n return arg;\n }\n // Convert the argument to a Fluent type.\n switch (typeof arg) {\n case \"string\":\n return arg;\n case \"number\":\n return new FluentNumber(arg);\n case \"object\":\n if (FluentDateTime.supportsValue(arg)) {\n return new FluentDateTime(arg);\n }\n // eslint-disable-next-line no-fallthrough\n default:\n scope.reportError(new TypeError(`Variable type not supported: $${name}, ${typeof arg}`));\n return new FluentNone(`$${name}`);\n }\n}\n/** Resolve a reference to another message. */\nfunction resolveMessageReference(scope, { name, attr }) {\n const message = scope.bundle._messages.get(name);\n if (!message) {\n scope.reportError(new ReferenceError(`Unknown message: ${name}`));\n return new FluentNone(name);\n }\n if (attr) {\n const attribute = message.attributes[attr];\n if (attribute) {\n return resolvePattern(scope, attribute);\n }\n scope.reportError(new ReferenceError(`Unknown attribute: ${attr}`));\n return new FluentNone(`${name}.${attr}`);\n }\n if (message.value) {\n return resolvePattern(scope, message.value);\n }\n scope.reportError(new ReferenceError(`No value: ${name}`));\n return new FluentNone(name);\n}\n/** Resolve a call to a Term with key-value arguments. */\nfunction resolveTermReference(scope, { name, attr, args }) {\n const id = `-${name}`;\n const term = scope.bundle._terms.get(id);\n if (!term) {\n scope.reportError(new ReferenceError(`Unknown term: ${id}`));\n return new FluentNone(id);\n }\n if (attr) {\n const attribute = term.attributes[attr];\n if (attribute) {\n // Every TermReference has its own variables.\n scope.params = getArguments(scope, args).named;\n const resolved = resolvePattern(scope, attribute);\n scope.params = null;\n return resolved;\n }\n scope.reportError(new ReferenceError(`Unknown attribute: ${attr}`));\n return new FluentNone(`${id}.${attr}`);\n }\n scope.params = getArguments(scope, args).named;\n const resolved = resolvePattern(scope, term.value);\n scope.params = null;\n return resolved;\n}\n/** Resolve a call to a Function with positional and key-value arguments. */\nfunction resolveFunctionReference(scope, { name, args }) {\n // Some functions are built-in. Others may be provided by the runtime via\n // the `FluentBundle` constructor.\n let func = scope.bundle._functions[name];\n if (!func) {\n scope.reportError(new ReferenceError(`Unknown function: ${name}()`));\n return new FluentNone(`${name}()`);\n }\n if (typeof func !== \"function\") {\n scope.reportError(new TypeError(`Function ${name}() is not callable`));\n return new FluentNone(`${name}()`);\n }\n try {\n let resolved = getArguments(scope, args);\n return func(resolved.positional, resolved.named);\n }\n catch (err) {\n scope.reportError(err);\n return new FluentNone(`${name}()`);\n }\n}\n/** Resolve a select expression to the member object. */\nfunction resolveSelectExpression(scope, { selector, variants, star }) {\n let sel = resolveExpression(scope, selector);\n if (sel instanceof FluentNone) {\n return getDefault(scope, variants, star);\n }\n // Match the selector against keys of each variant, in order.\n for (const variant of variants) {\n const key = resolveExpression(scope, variant.key);\n if (match(scope, sel, key)) {\n return resolvePattern(scope, variant.value);\n }\n }\n return getDefault(scope, variants, star);\n}\n/** Resolve a pattern (a complex string with placeables). */\nexport function resolveComplexPattern(scope, ptn) {\n if (scope.dirty.has(ptn)) {\n scope.reportError(new RangeError(\"Cyclic reference\"));\n return new FluentNone();\n }\n // Tag the pattern as dirty for the purpose of the current resolution.\n scope.dirty.add(ptn);\n const result = [];\n // Wrap interpolations with Directional Isolate Formatting characters\n // only when the pattern has more than one element.\n const useIsolating = scope.bundle._useIsolating && ptn.length > 1;\n for (const elem of ptn) {\n if (typeof elem === \"string\") {\n result.push(scope.bundle._transform(elem));\n continue;\n }\n scope.placeables++;\n if (scope.placeables > MAX_PLACEABLES) {\n scope.dirty.delete(ptn);\n // This is a fatal error which causes the resolver to instantly bail out\n // on this pattern. The length check protects against excessive memory\n // usage, and throwing protects against eating up the CPU when long\n // placeables are deeply nested.\n throw new RangeError(`Too many placeables expanded: ${scope.placeables}, ` +\n `max allowed is ${MAX_PLACEABLES}`);\n }\n if (useIsolating) {\n result.push(FSI);\n }\n result.push(resolveExpression(scope, elem).toString(scope));\n if (useIsolating) {\n result.push(PDI);\n }\n }\n scope.dirty.delete(ptn);\n return result.join(\"\");\n}\n/**\n * Resolve a simple or a complex Pattern to a FluentString\n * (which is really the string primitive).\n */\nfunction resolvePattern(scope, value) {\n // Resolve a simple pattern.\n if (typeof value === \"string\") {\n return scope.bundle._transform(value);\n }\n return resolveComplexPattern(scope, value);\n}\n","export class Scope {\n constructor(bundle, errors, args) {\n /**\n * The Set of patterns already encountered during this resolution.\n * Used to detect and prevent cyclic resolutions.\n * @ignore\n */\n this.dirty = new WeakSet();\n /** A dict of parameters passed to a TermReference. */\n this.params = null;\n /**\n * The running count of placeables resolved so far.\n * Used to detect the Billion Laughs and Quadratic Blowup attacks.\n * @ignore\n */\n this.placeables = 0;\n this.bundle = bundle;\n this.errors = errors;\n this.args = args;\n }\n reportError(error) {\n if (!this.errors || !(error instanceof Error)) {\n throw error;\n }\n this.errors.push(error);\n }\n memoizeIntlObject(ctor, opts) {\n let cache = this.bundle._intls.get(ctor);\n if (!cache) {\n cache = {};\n this.bundle._intls.set(ctor, cache);\n }\n let id = JSON.stringify(opts);\n if (!cache[id]) {\n // @ts-expect-error This is fine.\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n cache[id] = new ctor(this.bundle.locales, opts);\n }\n return cache[id];\n }\n}\n","/**\n * @overview\n *\n * The FTL resolver ships with a number of functions built-in.\n *\n * Each function take two arguments:\n * - args - an array of positional args\n * - opts - an object of key-value args\n *\n * Arguments to functions are guaranteed to already be instances of\n * `FluentValue`. Functions must return `FluentValues` as well.\n */\nimport { FluentNone, FluentNumber, FluentDateTime, } from \"./types.js\";\nfunction values(opts, allowed) {\n const unwrapped = Object.create(null);\n for (const [name, opt] of Object.entries(opts)) {\n if (allowed.includes(name)) {\n unwrapped[name] = opt.valueOf();\n }\n }\n return unwrapped;\n}\nconst NUMBER_ALLOWED = [\n \"unitDisplay\",\n \"currencyDisplay\",\n \"useGrouping\",\n \"minimumIntegerDigits\",\n \"minimumFractionDigits\",\n \"maximumFractionDigits\",\n \"minimumSignificantDigits\",\n \"maximumSignificantDigits\",\n];\n/**\n * The implementation of the `NUMBER()` builtin available to translations.\n *\n * Translations may call the `NUMBER()` builtin in order to specify formatting\n * options of a number. For example:\n *\n * pi = The value of π is {NUMBER($pi, maximumFractionDigits: 2)}.\n *\n * The implementation expects an array of {@link FluentValue | FluentValues} representing the\n * positional arguments, and an object of named {@link FluentValue | FluentValues} representing the\n * named parameters.\n *\n * The following options are recognized:\n *\n * unitDisplay\n * currencyDisplay\n * useGrouping\n * minimumIntegerDigits\n * minimumFractionDigits\n * maximumFractionDigits\n * minimumSignificantDigits\n * maximumSignificantDigits\n *\n * Other options are ignored.\n *\n * @param args The positional arguments passed to this `NUMBER()`.\n * @param opts The named argments passed to this `NUMBER()`.\n */\nexport function NUMBER(args, opts) {\n let arg = args[0];\n if (arg instanceof FluentNone) {\n return new FluentNone(`NUMBER(${arg.valueOf()})`);\n }\n if (arg instanceof FluentNumber) {\n return new FluentNumber(arg.valueOf(), {\n ...arg.opts,\n ...values(opts, NUMBER_ALLOWED),\n });\n }\n if (arg instanceof FluentDateTime) {\n return new FluentNumber(arg.toNumber(), {\n ...values(opts, NUMBER_ALLOWED),\n });\n }\n throw new TypeError(\"Invalid argument to NUMBER\");\n}\nconst DATETIME_ALLOWED = [\n \"dateStyle\",\n \"timeStyle\",\n \"fractionalSecondDigits\",\n \"dayPeriod\",\n \"hour12\",\n \"weekday\",\n \"era\",\n \"year\",\n \"month\",\n \"day\",\n \"hour\",\n \"minute\",\n \"second\",\n \"timeZoneName\",\n];\n/**\n * The implementation of the `DATETIME()` builtin available to translations.\n *\n * Translations may call the `DATETIME()` builtin in order to specify\n * formatting options of a number. For example:\n *\n * now = It's {DATETIME($today, month: \"long\")}.\n *\n * The implementation expects an array of {@link FluentValue | FluentValues} representing the\n * positional arguments, and an object of named {@link FluentValue | FluentValues} representing the\n * named parameters.\n *\n * The following options are recognized:\n *\n * dateStyle\n * timeStyle\n * fractionalSecondDigits\n * dayPeriod\n * hour12\n * weekday\n * era\n * year\n * month\n * day\n * hour\n * minute\n * second\n * timeZoneName\n *\n * Other options are ignored.\n *\n * @param args The positional arguments passed to this `DATETIME()`.\n * @param opts The named argments passed to this `DATETIME()`.\n */\nexport function DATETIME(args, opts) {\n let arg = args[0];\n if (arg instanceof FluentNone) {\n return new FluentNone(`DATETIME(${arg.valueOf()})`);\n }\n if (arg instanceof FluentDateTime || arg instanceof FluentNumber) {\n return new FluentDateTime(arg, values(opts, DATETIME_ALLOWED));\n }\n throw new TypeError(\"Invalid argument to DATETIME\");\n}\n","const cache = new Map();\nexport function getMemoizerForLocale(locales) {\n const stringLocale = Array.isArray(locales) ? locales.join(\" \") : locales;\n let memoizer = cache.get(stringLocale);\n if (memoizer === undefined) {\n memoizer = new Map();\n cache.set(stringLocale, memoizer);\n }\n return memoizer;\n}\n","import { resolveComplexPattern } from \"./resolver.js\";\nimport { Scope } from \"./scope.js\";\nimport { FluentNone } from \"./types.js\";\nimport { NUMBER, DATETIME } from \"./builtins.js\";\nimport { getMemoizerForLocale } from \"./memoizer.js\";\n/**\n * Message bundles are single-language stores of translation resources. They are\n * responsible for formatting message values and attributes to strings.\n */\nexport class FluentBundle {\n /**\n * Create an instance of `FluentBundle`.\n *\n * @example\n * ```js\n * let bundle = new FluentBundle([\"en-US\", \"en\"]);\n *\n * let bundle = new FluentBundle(locales, {useIsolating: false});\n *\n * let bundle = new FluentBundle(locales, {\n * useIsolating: true,\n * functions: {\n * NODE_ENV: () => process.env.NODE_ENV\n * }\n * });\n * ```\n *\n * @param locales - Used to instantiate `Intl` formatters used by translations.\n * @param options - Optional configuration for the bundle.\n */\n constructor(locales, { functions, useIsolating = true, transform = (v) => v, } = {}) {\n /** @ignore */\n this._terms = new Map();\n /** @ignore */\n this._messages = new Map();\n this.locales = Array.isArray(locales) ? locales : [locales];\n this._functions = {\n NUMBER,\n DATETIME,\n ...functions,\n };\n this._useIsolating = useIsolating;\n this._transform = transform;\n this._intls = getMemoizerForLocale(locales);\n }\n /**\n * Check if a message is present in the bundle.\n *\n * @param id - The identifier of the message to check.\n */\n hasMessage(id) {\n return this._messages.has(id);\n }\n /**\n * Return a raw unformatted message object from the bundle.\n *\n * Raw messages are `{value, attributes}` shapes containing translation units\n * called `Patterns`. `Patterns` are implementation-specific; they should be\n * treated as black boxes and formatted with `FluentBundle.formatPattern`.\n *\n * @param id - The identifier of the message to check.\n */\n getMessage(id) {\n return this._messages.get(id);\n }\n /**\n * Add a translation resource to the bundle.\n *\n * @example\n * ```js\n * let res = new FluentResource(\"foo = Foo\");\n * bundle.addResource(res);\n * bundle.getMessage(\"foo\");\n * // → {value: .., attributes: {..}}\n * ```\n *\n * @param res\n * @param options\n */\n addResource(res, { allowOverrides = false, } = {}) {\n const errors = [];\n for (let i = 0; i < res.body.length; i++) {\n let entry = res.body[i];\n if (entry.id.startsWith(\"-\")) {\n // Identifiers starting with a dash (-) define terms. Terms are private\n // and cannot be retrieved from FluentBundle.\n if (allowOverrides === false && this._terms.has(entry.id)) {\n errors.push(new Error(`Attempt to override an existing term: \"${entry.id}\"`));\n continue;\n }\n this._terms.set(entry.id, entry);\n }\n else {\n if (allowOverrides === false && this._messages.has(entry.id)) {\n errors.push(new Error(`Attempt to override an existing message: \"${entry.id}\"`));\n continue;\n }\n this._messages.set(entry.id, entry);\n }\n }\n return errors;\n }\n /**\n * Format a `Pattern` to a string.\n *\n * Format a raw `Pattern` into a string. `args` will be used to resolve\n * references to variables passed as arguments to the translation.\n *\n * In case of errors `formatPattern` will try to salvage as much of the\n * translation as possible and will still return a string. For performance\n * reasons, the encountered errors are not returned but instead are appended\n * to the `errors` array passed as the third argument.\n *\n * If `errors` is omitted, the first encountered error will be thrown.\n *\n * @example\n * ```js\n * let errors = [];\n * bundle.addResource(\n * new FluentResource(\"hello = Hello, {$name}!\"));\n *\n * let hello = bundle.getMessage(\"hello\");\n * if (hello.value) {\n * bundle.formatPattern(hello.value, {name: \"Jane\"}, errors);\n * // Returns \"Hello, Jane!\" and `errors` is empty.\n *\n * bundle.formatPattern(hello.value, undefined, errors);\n * // Returns \"Hello, {$name}!\" and `errors` is now:\n * // []\n * }\n * ```\n */\n formatPattern(pattern, args = null, errors = null) {\n // Resolve a simple pattern without creating a scope. No error handling is\n // required; by definition simple patterns don't have placeables.\n if (typeof pattern === \"string\") {\n return this._transform(pattern);\n }\n // Resolve a complex pattern.\n let scope = new Scope(this, errors, args);\n try {\n let value = resolveComplexPattern(scope, pattern);\n return value.toString(scope);\n }\n catch (err) {\n if (scope.errors && err instanceof Error) {\n scope.errors.push(err);\n return new FluentNone().toString(scope);\n }\n throw err;\n }\n }\n}\n","// This regex is used to iterate through the beginnings of messages and terms.\n// With the /m flag, the ^ matches at the beginning of every line.\nconst RE_MESSAGE_START = /^(-?[a-zA-Z][\\w-]*) *= */gm;\n// Both Attributes and Variants are parsed in while loops. These regexes are\n// used to break out of them.\nconst RE_ATTRIBUTE_START = /\\.([a-zA-Z][\\w-]*) *= */y;\nconst RE_VARIANT_START = /\\*?\\[/y;\nconst RE_NUMBER_LITERAL = /(-?[0-9]+(?:\\.([0-9]+))?)/y;\nconst RE_IDENTIFIER = /([a-zA-Z][\\w-]*)/y;\nconst RE_REFERENCE = /([$-])?([a-zA-Z][\\w-]*)(?:\\.([a-zA-Z][\\w-]*))?/y;\nconst RE_FUNCTION_NAME = /^[A-Z][A-Z0-9_-]*$/;\n// A \"run\" is a sequence of text or string literal characters which don't\n// require any special handling. For TextElements such special characters are: {\n// (starts a placeable), and line breaks which require additional logic to check\n// if the next line is indented. For StringLiterals they are: \\ (starts an\n// escape sequence), \" (ends the literal), and line breaks which are not allowed\n// in StringLiterals. Note that string runs may be empty; text runs may not.\nconst RE_TEXT_RUN = /([^{}\\n\\r]+)/y;\nconst RE_STRING_RUN = /([^\\\\\"\\n\\r]*)/y;\n// Escape sequences.\nconst RE_STRING_ESCAPE = /\\\\([\\\\\"])/y;\nconst RE_UNICODE_ESCAPE = /\\\\u([a-fA-F0-9]{4})|\\\\U([a-fA-F0-9]{6})/y;\n// Used for trimming TextElements and indents.\nconst RE_LEADING_NEWLINES = /^\\n+/;\nconst RE_TRAILING_SPACES = / +$/;\n// Used in makeIndent to strip spaces from blank lines and normalize CRLF to LF.\nconst RE_BLANK_LINES = / *\\r?\\n/g;\n// Used in makeIndent to measure the indentation.\nconst RE_INDENT = /( *)$/;\n// Common tokens.\nconst TOKEN_BRACE_OPEN = /{\\s*/y;\nconst TOKEN_BRACE_CLOSE = /\\s*}/y;\nconst TOKEN_BRACKET_OPEN = /\\[\\s*/y;\nconst TOKEN_BRACKET_CLOSE = /\\s*] */y;\nconst TOKEN_PAREN_OPEN = /\\s*\\(\\s*/y;\nconst TOKEN_ARROW = /\\s*->\\s*/y;\nconst TOKEN_COLON = /\\s*:\\s*/y;\n// Note the optional comma. As a deviation from the Fluent EBNF, the parser\n// doesn't enforce commas between call arguments.\nconst TOKEN_COMMA = /\\s*,?\\s*/y;\nconst TOKEN_BLANK = /\\s+/y;\n/**\n * Fluent Resource is a structure storing parsed localization entries.\n */\nexport class FluentResource {\n constructor(source) {\n this.body = [];\n RE_MESSAGE_START.lastIndex = 0;\n let cursor = 0;\n // Iterate over the beginnings of messages and terms to efficiently skip\n // comments and recover from errors.\n while (true) {\n let next = RE_MESSAGE_START.exec(source);\n if (next === null) {\n break;\n }\n cursor = RE_MESSAGE_START.lastIndex;\n try {\n this.body.push(parseMessage(next[1]));\n }\n catch (err) {\n if (err instanceof SyntaxError) {\n // Don't report any Fluent syntax errors. Skip directly to the\n // beginning of the next message or term.\n continue;\n }\n throw err;\n }\n }\n // The parser implementation is inlined below for performance reasons,\n // as well as for convenience of accessing `source` and `cursor`.\n // The parser focuses on minimizing the number of false negatives at the\n // expense of increasing the risk of false positives. In other words, it\n // aims at parsing valid Fluent messages with a success rate of 100%, but it\n // may also parse a few invalid messages which the reference parser would\n // reject. The parser doesn't perform any validation and may produce entries\n // which wouldn't make sense in the real world. For best results users are\n // advised to validate translations with the fluent-syntax parser\n // pre-runtime.\n // The parser makes an extensive use of sticky regexes which can be anchored\n // to any offset of the source string without slicing it. Errors are thrown\n // to bail out of parsing of ill-formed messages.\n function test(re) {\n re.lastIndex = cursor;\n return re.test(source);\n }\n // Advance the cursor by the char if it matches. May be used as a predicate\n // (was the match found?) or, if errorClass is passed, as an assertion.\n function consumeChar(char, errorClass) {\n if (source[cursor] === char) {\n cursor++;\n return true;\n }\n if (errorClass) {\n throw new errorClass(`Expected ${char}`);\n }\n return false;\n }\n // Advance the cursor by the token if it matches. May be used as a predicate\n // (was the match found?) or, if errorClass is passed, as an assertion.\n function consumeToken(re, errorClass) {\n if (test(re)) {\n cursor = re.lastIndex;\n return true;\n }\n if (errorClass) {\n throw new errorClass(`Expected ${re.toString()}`);\n }\n return false;\n }\n // Execute a regex, advance the cursor, and return all capture groups.\n function match(re) {\n re.lastIndex = cursor;\n let result = re.exec(source);\n if (result === null) {\n throw new SyntaxError(`Expected ${re.toString()}`);\n }\n cursor = re.lastIndex;\n return result;\n }\n // Execute a regex, advance the cursor, and return the capture group.\n function match1(re) {\n return match(re)[1];\n }\n function parseMessage(id) {\n let value = parsePattern();\n let attributes = parseAttributes();\n if (value === null && Object.keys(attributes).length === 0) {\n throw new SyntaxError(\"Expected message value or attributes\");\n }\n return { id, value, attributes };\n }\n function parseAttributes() {\n let attrs = Object.create(null);\n while (test(RE_ATTRIBUTE_START)) {\n let name = match1(RE_ATTRIBUTE_START);\n let value = parsePattern();\n if (value === null) {\n throw new SyntaxError(\"Expected attribute value\");\n }\n attrs[name] = value;\n }\n return attrs;\n }\n function parsePattern() {\n let first;\n // First try to parse any simple text on the same line as the id.\n if (test(RE_TEXT_RUN)) {\n first = match1(RE_TEXT_RUN);\n }\n // If there's a placeable on the first line, parse a complex pattern.\n if (source[cursor] === \"{\" || source[cursor] === \"}\") {\n // Re-use the text parsed above, if possible.\n return parsePatternElements(first ? [first] : [], Infinity);\n }\n // RE_TEXT_VALUE stops at newlines. Only continue parsing the pattern if\n // what comes after the newline is indented.\n let indent = parseIndent();\n if (indent) {\n if (first) {\n // If there's text on the first line, the blank block is part of the\n // translation content in its entirety.\n return parsePatternElements([first, indent], indent.length);\n }\n // Otherwise, we're dealing with a block pattern, i.e. a pattern which\n // starts on a new line. Discrad the leading newlines but keep the\n // inline indent; it will be used by the dedentation logic.\n indent.value = trim(indent.value, RE_LEADING_NEWLINES);\n return parsePatternElements([indent], indent.length);\n }\n if (first) {\n // It was just a simple inline text after all.\n return trim(first, RE_TRAILING_SPACES);\n }\n return null;\n }\n // Parse a complex pattern as an array of elements.\n function parsePatternElements(elements = [], commonIndent) {\n while (true) {\n if (test(RE_TEXT_RUN)) {\n elements.push(match1(RE_TEXT_RUN));\n continue;\n }\n if (source[cursor] === \"{\") {\n elements.push(parsePlaceable());\n continue;\n }\n if (source[cursor] === \"}\") {\n throw new SyntaxError(\"Unbalanced closing brace\");\n }\n let indent = parseIndent();\n if (indent) {\n elements.push(indent);\n commonIndent = Math.min(commonIndent, indent.length);\n continue;\n }\n break;\n }\n let lastIndex = elements.length - 1;\n let lastElement = elements[lastIndex];\n // Trim the trailing spaces in the last element if it's a TextElement.\n if (typeof lastElement === \"string\") {\n elements[lastIndex] = trim(lastElement, RE_TRAILING_SPACES);\n }\n let baked = [];\n for (let element of elements) {\n if (element instanceof Indent) {\n // Dedent indented lines by the maximum common indent.\n element = element.value.slice(0, element.value.length - commonIndent);\n }\n if (element) {\n baked.push(element);\n }\n }\n return baked;\n }\n function parsePlaceable() {\n consumeToken(TOKEN_BRACE_OPEN, SyntaxError);\n let selector = parseInlineExpression();\n if (consumeToken(TOKEN_BRACE_CLOSE)) {\n return selector;\n }\n if (consumeToken(TOKEN_ARROW)) {\n let variants = parseVariants();\n consumeToken(TOKEN_BRACE_CLOSE, SyntaxError);\n return {\n type: \"select\",\n selector,\n ...variants,\n };\n }\n throw new SyntaxError(\"Unclosed placeable\");\n }\n function parseInlineExpression() {\n if (source[cursor] === \"{\") {\n // It's a nested placeable.\n return parsePlaceable();\n }\n if (test(RE_REFERENCE)) {\n let [, sigil, name, attr = null] = match(RE_REFERENCE);\n if (sigil === \"$\") {\n return { type: \"var\", name };\n }\n if (consumeToken(TOKEN_PAREN_OPEN)) {\n let args = parseArguments();\n if (sigil === \"-\") {\n // A parameterized term: -term(...).\n return { type: \"term\", name, attr, args };\n }\n if (RE_FUNCTION_NAME.test(name)) {\n return { type: \"func\", name, args };\n }\n throw new SyntaxError(\"Function names must be all upper-case\");\n }\n if (sigil === \"-\") {\n // A non-parameterized term: -term.\n return {\n type: \"term\",\n name,\n attr,\n args: [],\n };\n }\n return { type: \"mesg\", name, attr };\n }\n return parseLiteral();\n }\n function parseArguments() {\n let args = [];\n while (true) {\n switch (source[cursor]) {\n case \")\": // End of the argument list.\n cursor++;\n return args;\n case undefined: // EOF\n throw new SyntaxError(\"Unclosed argument list\");\n }\n args.push(parseArgument());\n // Commas between arguments are treated as whitespace.\n consumeToken(TOKEN_COMMA);\n }\n }\n function parseArgument() {\n let expr = parseInlineExpression();\n if (expr.type !== \"mesg\") {\n return expr;\n }\n if (consumeToken(TOKEN_COLON)) {\n // The reference is the beginning of a named argument.\n return {\n type: \"narg\",\n name: expr.name,\n value: parseLiteral(),\n };\n }\n // It's a regular message reference.\n return expr;\n }\n function parseVariants() {\n let variants = [];\n let count = 0;\n let star;\n while (test(RE_VARIANT_START)) {\n if (consumeChar(\"*\")) {\n star = count;\n }\n let key = parseVariantKey();\n let value = parsePattern();\n if (value === null) {\n throw new SyntaxError(\"Expected variant value\");\n }\n variants[count++] = { key, value };\n }\n if (count === 0) {\n return null;\n }\n if (star === undefined) {\n throw new SyntaxError(\"Expected default variant\");\n }\n return { variants, star };\n }\n function parseVariantKey() {\n consumeToken(TOKEN_BRACKET_OPEN, SyntaxError);\n let key;\n if (test(RE_NUMBER_LITERAL)) {\n key = parseNumberLiteral();\n }\n else {\n key = {\n type: \"str\",\n value: match1(RE_IDENTIFIER),\n };\n }\n consumeToken(TOKEN_BRACKET_CLOSE, SyntaxError);\n return key;\n }\n function parseLiteral() {\n if (test(RE_NUMBER_LITERAL)) {\n return parseNumberLiteral();\n }\n if (source[cursor] === '\"') {\n return parseStringLiteral();\n }\n throw new SyntaxError(\"Invalid expression\");\n }\n function parseNumberLiteral() {\n let [, value, fraction = \"\"] = match(RE_NUMBER_LITERAL);\n let precision = fraction.length;\n return {\n type: \"num\",\n value: parseFloat(value),\n precision,\n };\n }\n function parseStringLiteral() {\n consumeChar('\"', SyntaxError);\n let value = \"\";\n while (true) {\n value += match1(RE_STRING_RUN);\n if (source[cursor] === \"\\\\\") {\n value += parseEscapeSequence();\n continue;\n }\n if (consumeChar('\"')) {\n return { type: \"str\", value };\n }\n // We've reached an EOL of EOF.\n throw new SyntaxError(\"Unclosed string literal\");\n }\n }\n // Unescape known escape sequences.\n function parseEscapeSequence() {\n if (test(RE_STRING_ESCAPE)) {\n return match1(RE_STRING_ESCAPE);\n }\n if (test(RE_UNICODE_ESCAPE)) {\n let [, codepoint4, codepoint6] = match(RE_UNICODE_ESCAPE);\n let codepoint = parseInt(codepoint4 || codepoint6, 16);\n return codepoint <= 0xd7ff || 0xe000 <= codepoint\n ? // It's a Unicode scalar value.\n String.fromCodePoint(codepoint)\n : // Lonely surrogates can cause trouble when the parsing result is\n // saved using UTF-8. Use U+FFFD REPLACEMENT CHARACTER instead.\n \"�\";\n }\n throw new SyntaxError(\"Unknown escape sequence\");\n }\n // Parse blank space. Return it if it looks like indent before a pattern\n // line. Skip it othwerwise.\n function parseIndent() {\n let start = cursor;\n consumeToken(TOKEN_BLANK);\n // Check the first non-blank character after the indent.\n switch (source[cursor]) {\n case \".\":\n case \"[\":\n case \"*\":\n case \"}\":\n case undefined: // EOF\n // A special character. End the Pattern.\n return false;\n case \"{\":\n // Placeables don't require indentation (in EBNF: block-placeable).\n // Continue the Pattern.\n return makeIndent(source.slice(start, cursor));\n }\n // If the first character on the line is not one of the special characters\n // listed above, it's a regular text character. Check if there's at least\n // one space of indent before it.\n if (source[cursor - 1] === \" \") {\n // It's an indented text character (in EBNF: indented-char). Continue\n // the Pattern.\n return makeIndent(source.slice(start, cursor));\n }\n // A not-indented text character is likely the identifier of the next\n // message. End the Pattern.\n return false;\n }\n // Trim blanks in text according to the given regex.\n function trim(text, re) {\n return text.replace(re, \"\");\n }\n // Normalize a blank block and extract the indent details.\n function makeIndent(blank) {\n let value = blank.replace(RE_BLANK_LINES, \"\\n\");\n let length = RE_INDENT.exec(blank)[1].length;\n return new Indent(value, length);\n }\n }\n}\nclass Indent {\n constructor(value, length) {\n this.value = value;\n this.length = length;\n }\n}\n","/**\n * A JavaScript implementation of Project Fluent, a localization\n * framework designed to unleash the expressive power of the natural language.\n *\n * @module\n */\nexport { FluentBundle } from \"./bundle.js\";\nexport { FluentResource } from \"./resource.js\";\nexport { FluentType, FluentNone, FluentNumber, FluentDateTime, } from \"./types.js\";\n","/* eslint no-console: [\"error\", {allow: [\"warn\"]}] */\n/* global console */\n// Match the opening angle bracket (<) in HTML tags, and HTML entities like\n// &, &, &.\nconst reOverlay = /<|&#?\\w+;/;\n/**\n * Elements allowed in translations even if they are not present in the source\n * HTML. They are text-level elements as defined by the HTML5 spec:\n * https://www.w3.org/TR/html5/text-level-semantics.html with the exception of:\n *\n * - a - because we don't allow href on it anyways,\n * - ruby, rt, rp - because we don't allow nested elements to be inserted.\n */\nconst TEXT_LEVEL_ELEMENTS = {\n \"http://www.w3.org/1999/xhtml\": [\n \"em\",\n \"strong\",\n \"small\",\n \"s\",\n \"cite\",\n \"q\",\n \"dfn\",\n \"abbr\",\n \"data\",\n \"time\",\n \"code\",\n \"var\",\n \"samp\",\n \"kbd\",\n \"sub\",\n \"sup\",\n \"i\",\n \"b\",\n \"u\",\n \"mark\",\n \"bdi\",\n \"bdo\",\n \"span\",\n \"br\",\n \"wbr\",\n ],\n};\nconst LOCALIZABLE_ATTRIBUTES = {\n \"http://www.w3.org/1999/xhtml\": {\n global: [\"title\", \"aria-description\", \"aria-label\", \"aria-valuetext\"],\n a: [\"download\"],\n area: [\"download\", \"alt\"],\n // value is special-cased in isAttrNameLocalizable\n input: [\"alt\", \"placeholder\"],\n menuitem: [\"label\"],\n menu: [\"label\"],\n optgroup: [\"label\"],\n option: [\"label\"],\n track: [\"label\"],\n img: [\"alt\"],\n textarea: [\"placeholder\"],\n th: [\"abbr\"],\n },\n \"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul\": {\n global: [\n \"accesskey\",\n \"aria-label\",\n \"aria-valuetext\",\n \"label\",\n \"title\",\n \"tooltiptext\",\n ],\n description: [\"value\"],\n key: [\"key\", \"keycode\"],\n label: [\"value\"],\n textbox: [\"placeholder\", \"value\"],\n },\n};\n/**\n * Translate an element.\n *\n * Translate the element's text content and attributes. Some HTML markup is\n * allowed in the translation. The element's children with the data-l10n-name\n * attribute will be treated as arguments to the translation. If the\n * translation defines the same children, their attributes and text contents\n * will be used for translating the matching source child.\n *\n * @param {Element} element\n * @param {Object} translation\n * @private\n */\nexport default function translateElement(element, translation) {\n const { value } = translation;\n if (typeof value === \"string\") {\n if (element.localName === \"title\" &&\n element.namespaceURI === \"http://www.w3.org/1999/xhtml\") {\n // A special case for the HTML title element whose content must be text.\n element.textContent = value;\n }\n else if (!reOverlay.test(value)) {\n // If the translation doesn't contain any markup skip the overlay logic.\n element.textContent = value;\n }\n else {\n // Else parse the translation's HTML using an inert template element,\n // sanitize it and replace the element's content.\n const templateElement = element.ownerDocument.createElementNS(\"http://www.w3.org/1999/xhtml\", \"template\");\n templateElement.innerHTML = value;\n overlayChildNodes(templateElement.content, element);\n }\n }\n // Even if the translation doesn't define any localizable attributes, run\n // overlayAttributes to remove any localizable attributes set by previous\n // translations.\n overlayAttributes(translation, element);\n}\n/**\n * Replace child nodes of an element with child nodes of another element.\n *\n * The contents of the target element will be cleared and fully replaced with\n * sanitized contents of the source element.\n *\n * @param {DocumentFragment} fromFragment - The source of children to overlay.\n * @param {Element} toElement - The target of the overlay.\n * @private\n */\nfunction overlayChildNodes(fromFragment, toElement) {\n for (const childNode of fromFragment.childNodes) {\n if (childNode.nodeType === childNode.TEXT_NODE) {\n // Keep the translated text node.\n continue;\n }\n if (childNode.hasAttribute(\"data-l10n-name\")) {\n const sanitized = getNodeForNamedElement(toElement, childNode);\n fromFragment.replaceChild(sanitized, childNode);\n continue;\n }\n if (isElementAllowed(childNode)) {\n const sanitized = createSanitizedElement(childNode);\n fromFragment.replaceChild(sanitized, childNode);\n continue;\n }\n console.warn(`An element of forbidden type \"${childNode.localName}\" was found in ` +\n \"the translation. Only safe text-level elements and elements with \" +\n \"data-l10n-name are allowed.\");\n // If all else fails, replace the element with its text content.\n fromFragment.replaceChild(createTextNodeFromTextContent(childNode), childNode);\n }\n toElement.textContent = \"\";\n toElement.appendChild(fromFragment);\n}\nfunction hasAttribute(attributes, name) {\n if (!attributes) {\n return false;\n }\n for (let attr of attributes) {\n if (attr.name === name) {\n return true;\n }\n }\n return false;\n}\n/**\n * Transplant localizable attributes of an element to another element.\n *\n * Any localizable attributes already set on the target element will be\n * cleared.\n *\n * @param {Element|Object} fromElement - The source of child nodes to overlay.\n * @param {Element} toElement - The target of the overlay.\n * @private\n */\nfunction overlayAttributes(fromElement, toElement) {\n const explicitlyAllowed = toElement.hasAttribute(\"data-l10n-attrs\")\n ? toElement\n .getAttribute(\"data-l10n-attrs\")\n .split(\",\")\n .map(i => i.trim())\n : null;\n // Remove existing localizable attributes if they\n // will not be used in the new translation.\n for (const attr of Array.from(toElement.attributes)) {\n if (isAttrNameLocalizable(attr.name, toElement, explicitlyAllowed) &&\n !hasAttribute(fromElement.attributes, attr.name)) {\n toElement.removeAttribute(attr.name);\n }\n }\n // fromElement might be a {value, attributes} object as returned by\n // Localization.messageFromBundle. In which case attributes may be null to\n // save GC cycles.\n if (!fromElement.attributes) {\n return;\n }\n // Set localizable attributes.\n for (const attr of Array.from(fromElement.attributes)) {\n if (isAttrNameLocalizable(attr.name, toElement, explicitlyAllowed) &&\n toElement.getAttribute(attr.name) !== attr.value) {\n toElement.setAttribute(attr.name, attr.value);\n }\n }\n}\n/**\n * Sanitize a child element created by the translation.\n *\n * Try to find a corresponding child in sourceElement and use it as the base\n * for the sanitization. This will preserve functional attribtues defined on\n * the child element in the source HTML.\n *\n * @param {Element} sourceElement - The source for data-l10n-name lookups.\n * @param {Element} translatedChild - The translated child to be sanitized.\n * @returns {Element}\n * @private\n */\nfunction getNodeForNamedElement(sourceElement, translatedChild) {\n const childName = translatedChild.getAttribute(\"data-l10n-name\");\n const sourceChild = sourceElement.querySelector(`[data-l10n-name=\"${childName}\"]`);\n if (!sourceChild) {\n console.warn(`An element named \"${childName}\" wasn't found in the source.`);\n return createTextNodeFromTextContent(translatedChild);\n }\n if (sourceChild.localName !== translatedChild.localName) {\n console.warn(`An element named \"${childName}\" was found in the translation ` +\n `but its type ${translatedChild.localName} didn't match the ` +\n `element found in the source (${sourceChild.localName}).`);\n return createTextNodeFromTextContent(translatedChild);\n }\n // Remove it from sourceElement so that the translation cannot use\n // the same reference name again.\n sourceElement.removeChild(sourceChild);\n // We can't currently guarantee that a translation won't remove\n // sourceChild from the element completely, which could break the app if\n // it relies on an event handler attached to the sourceChild. Let's make\n // this limitation explicit for now by breaking the identitiy of the\n // sourceChild by cloning it. This will destroy all event handlers\n // attached to sourceChild via addEventListener and via on\n // properties.\n const clone = sourceChild.cloneNode(false);\n return shallowPopulateUsing(translatedChild, clone);\n}\n/**\n * Sanitize an allowed element.\n *\n * Text-level elements allowed in translations may only use safe attributes\n * and will have any nested markup stripped to text content.\n *\n * @param {Element} element - The element to be sanitized.\n * @returns {Element}\n * @private\n */\nfunction createSanitizedElement(element) {\n // Start with an empty element of the same type to remove nested children\n // and non-localizable attributes defined by the translation.\n const clone = element.ownerDocument.createElement(element.localName);\n return shallowPopulateUsing(element, clone);\n}\n/**\n * Convert an element to a text node.\n *\n * @param {Element} element - The element to be sanitized.\n * @returns {Node}\n * @private\n */\nfunction createTextNodeFromTextContent(element) {\n return element.ownerDocument.createTextNode(element.textContent);\n}\n/**\n * Check if element is allowed in the translation.\n *\n * This method is used by the sanitizer when the translation markup contains\n * an element which is not present in the source code.\n *\n * @param {Element} element\n * @returns {boolean}\n * @private\n */\nfunction isElementAllowed(element) {\n const allowed = TEXT_LEVEL_ELEMENTS[element.namespaceURI];\n return allowed && allowed.includes(element.localName);\n}\n/**\n * Check if attribute is allowed for the given element.\n *\n * This method is used by the sanitizer when the translation markup contains\n * DOM attributes, or when the translation has traits which map to DOM\n * attributes.\n *\n * `explicitlyAllowed` can be passed as a list of attributes explicitly\n * allowed on this element.\n *\n * @param {string} name\n * @param {Element} element\n * @param {Array} explicitlyAllowed\n * @returns {boolean}\n * @private\n */\nfunction isAttrNameLocalizable(name, element, explicitlyAllowed = null) {\n if (explicitlyAllowed && explicitlyAllowed.includes(name)) {\n return true;\n }\n const allowed = LOCALIZABLE_ATTRIBUTES[element.namespaceURI];\n if (!allowed) {\n return false;\n }\n const attrName = name.toLowerCase();\n const elemName = element.localName;\n // Is it a globally safe attribute?\n if (allowed.global.includes(attrName)) {\n return true;\n }\n // Are there no allowed attributes for this element?\n if (!allowed[elemName]) {\n return false;\n }\n // Is it allowed on this element?\n if (allowed[elemName].includes(attrName)) {\n return true;\n }\n // Special case for value on HTML inputs with type button, reset, submit\n if (element.namespaceURI === \"http://www.w3.org/1999/xhtml\" &&\n elemName === \"input\" &&\n attrName === \"value\") {\n const type = element.type.toLowerCase();\n if (type === \"submit\" || type === \"button\" || type === \"reset\") {\n return true;\n }\n }\n return false;\n}\n/**\n * Helper to set textContent and localizable attributes on an element.\n *\n * @param {Element} fromElement\n * @param {Element} toElement\n * @returns {Element}\n * @private\n */\nfunction shallowPopulateUsing(fromElement, toElement) {\n toElement.textContent = fromElement.textContent;\n overlayAttributes(fromElement, toElement);\n return toElement;\n}\n","/*\n * Base CachedIterable class.\n */\nexport default class CachedIterable extends Array {\n /**\n * Create a `CachedIterable` instance from an iterable or, if another\n * instance of `CachedIterable` is passed, return it without any\n * modifications.\n *\n * @param {Iterable} iterable\n * @returns {CachedIterable}\n */\n static from(iterable) {\n if (iterable instanceof this) {\n return iterable;\n }\n\n return new this(iterable);\n }\n}\n","import CachedIterable from \"./cached_iterable.mjs\";\n\n/*\n * CachedSyncIterable caches the elements yielded by an iterable.\n *\n * It can be used to iterate over an iterable many times without depleting the\n * iterable.\n */\nexport default class CachedSyncIterable extends CachedIterable {\n /**\n * Create an `CachedSyncIterable` instance.\n *\n * @param {Iterable} iterable\n * @returns {CachedSyncIterable}\n */\n constructor(iterable) {\n super();\n\n if (Symbol.iterator in Object(iterable)) {\n this.iterator = iterable[Symbol.iterator]();\n } else {\n throw new TypeError(\"Argument must implement the iteration protocol.\");\n }\n }\n\n [Symbol.iterator]() {\n const cached = this;\n let cur = 0;\n\n return {\n next() {\n if (cached.length <= cur) {\n cached.push(cached.iterator.next());\n }\n return cached[cur++];\n }\n };\n }\n\n /**\n * This method allows user to consume the next element from the iterator\n * into the cache.\n *\n * @param {number} count - number of elements to consume\n */\n touchNext(count = 1) {\n let idx = 0;\n while (idx++ < count) {\n const last = this[this.length - 1];\n if (last && last.done) {\n break;\n }\n this.push(this.iterator.next());\n }\n // Return the last cached {value, done} object to allow the calling\n // code to decide if it needs to call touchNext again.\n return this[this.length - 1];\n }\n}\n","import CachedIterable from \"./cached_iterable.mjs\";\n\n/*\n * CachedAsyncIterable caches the elements yielded by an async iterable.\n *\n * It can be used to iterate over an iterable many times without depleting the\n * iterable.\n */\nexport default class CachedAsyncIterable extends CachedIterable {\n /**\n * Create an `CachedAsyncIterable` instance.\n *\n * @param {Iterable} iterable\n * @returns {CachedAsyncIterable}\n */\n constructor(iterable) {\n super();\n\n if (Symbol.asyncIterator in Object(iterable)) {\n this.iterator = iterable[Symbol.asyncIterator]();\n } else if (Symbol.iterator in Object(iterable)) {\n this.iterator = iterable[Symbol.iterator]();\n } else {\n throw new TypeError(\"Argument must implement the iteration protocol.\");\n }\n }\n\n /**\n * Asynchronous iterator caching the yielded elements.\n *\n * Elements yielded by the original iterable will be cached and available\n * synchronously. Returns an async generator object implementing the\n * iterator protocol over the elements of the original (async or sync)\n * iterable.\n */\n [Symbol.asyncIterator]() {\n const cached = this;\n let cur = 0;\n\n return {\n async next() {\n if (cached.length <= cur) {\n cached.push(cached.iterator.next());\n }\n return cached[cur++];\n }\n };\n }\n\n /**\n * This method allows user to consume the next element from the iterator\n * into the cache.\n *\n * @param {number} count - number of elements to consume\n */\n async touchNext(count = 1) {\n let idx = 0;\n while (idx++ < count) {\n const last = this[this.length - 1];\n if (last && (await last).done) {\n break;\n }\n this.push(this.iterator.next());\n }\n // Return the last cached {value, done} object to allow the calling\n // code to decide if it needs to call touchNext again.\n return this[this.length - 1];\n }\n}\n","export {default as CachedSyncIterable} from \"./cached_sync_iterable.mjs\";\nexport {default as CachedAsyncIterable} from \"./cached_async_iterable.mjs\";\n","/* eslint no-console: [\"error\", { allow: [\"warn\", \"error\"] }] */\n/* global console */\nimport { CachedAsyncIterable } from \"cached-iterable\";\n/**\n * The `Localization` class is a central high-level API for vanilla\n * JavaScript use of Fluent.\n * It combines language negotiation, FluentBundle and I/O to\n * provide a scriptable API to format translations.\n */\nexport default class Localization {\n /**\n * @param {Array} resourceIds - List of resource IDs\n * @param {Function} generateBundles - Function that returns a\n * generator over FluentBundles\n *\n * @returns {Localization}\n */\n constructor(resourceIds = [], generateBundles) {\n this.resourceIds = resourceIds;\n this.generateBundles = generateBundles;\n this.onChange(true);\n }\n addResourceIds(resourceIds, eager = false) {\n this.resourceIds.push(...resourceIds);\n this.onChange(eager);\n return this.resourceIds.length;\n }\n removeResourceIds(resourceIds) {\n this.resourceIds = this.resourceIds.filter(r => !resourceIds.includes(r));\n this.onChange();\n return this.resourceIds.length;\n }\n /**\n * Format translations and handle fallback if needed.\n *\n * Format translations for `keys` from `FluentBundle` instances on this\n * DOMLocalization. In case of errors, fetch the next context in the\n * fallback chain.\n *\n * @param {Array} keys - Translation keys to format.\n * @param {Function} method - Formatting function.\n * @returns {Promise>}\n * @private\n */\n async formatWithFallback(keys, method) {\n const translations = [];\n let hasAtLeastOneBundle = false;\n for await (const bundle of this.bundles) {\n hasAtLeastOneBundle = true;\n const missingIds = keysFromBundle(method, bundle, keys, translations);\n if (missingIds.size === 0) {\n break;\n }\n if (typeof console !== \"undefined\") {\n const locale = bundle.locales[0];\n const ids = Array.from(missingIds).join(\", \");\n console.warn(`[fluent] Missing translations in ${locale}: ${ids}`);\n }\n }\n if (!hasAtLeastOneBundle && typeof console !== \"undefined\") {\n console.warn(`[fluent] Request for keys failed because no resource bundles got generated.\n keys: ${JSON.stringify(keys)}.\n resourceIds: ${JSON.stringify(this.resourceIds)}.`);\n }\n return translations;\n }\n /**\n * Format translations into `{value, attributes}` objects.\n *\n * The fallback logic is the same as in `formatValues`\n * but it returns `{value, attributes}` objects\n * which are suitable for the translation of DOM elements.\n *\n * Returns a Promise resolving to an array of the translation strings.\n *\n * @example\n * ```js\n * docL10n.formatMessages([\n * {id: 'hello', args: { who: 'Mary' }},\n * {id: 'welcome'}\n * ]).then(console.log);\n *\n * // [\n * // { value: 'Hello, Mary!', attributes: null },\n * // {\n * // value: 'Welcome!',\n * // attributes: [ { name: \"title\", value: 'Hello' } ]\n * // }\n * // ]\n * ```\n *\n * @param {Array} keys\n * @returns {Promise>}\n * @private\n */\n formatMessages(keys) {\n return this.formatWithFallback(keys, messageFromBundle);\n }\n /**\n * Retrieve translations corresponding to the passed keys.\n *\n * A generalized version of `DOMLocalization.formatValue`. Keys must\n * be `{id, args}` objects.\n *\n * Returns a Promise resolving to an array of the translation strings.\n *\n * @example\n * ```js\n * docL10n.formatValues([\n * {id: 'hello', args: { who: 'Mary' }},\n * {id: 'hello', args: { who: 'John' }},\n * {id: 'welcome'}\n * ]).then(console.log);\n *\n * // ['Hello, Mary!', 'Hello, John!', 'Welcome!']\n * ```\n *\n * @param {Array} keys\n * @returns {Promise>}\n */\n formatValues(keys) {\n return this.formatWithFallback(keys, valueFromBundle);\n }\n /**\n * Retrieve the translation corresponding to the `id` identifier.\n *\n * If passed, `args` is a simple hash object with a list of variables that\n * will be interpolated in the value of the translation.\n *\n * Returns a Promise resolving to the translation string.\n *\n * Use this sparingly for one-off messages which don't need to be\n * retranslated when the user changes their language preferences, e.g. in\n * notifications.\n *\n * @example\n * ```js\n * docL10n.formatValue(\n * 'hello', { who: 'world' }\n * ).then(console.log);\n *\n * // 'Hello, world!'\n * ```\n *\n * @param {string} id - Identifier of the translation to format\n * @param {Object} [args] - Optional external arguments\n * @returns {Promise}\n */\n async formatValue(id, args) {\n const [val] = await this.formatValues([{ id, args }]);\n return val;\n }\n handleEvent() {\n this.onChange();\n }\n /**\n * This method should be called when there's a reason to believe\n * that language negotiation or available resources changed.\n */\n onChange(eager = false) {\n this.bundles = CachedAsyncIterable.from(this.generateBundles(this.resourceIds));\n if (eager) {\n this.bundles.touchNext(2);\n }\n }\n}\n/**\n * Format the value of a message into a string or `null`.\n *\n * This function is passed as a method to `keysFromBundle` and resolve\n * a value of a single L10n Entity using provided `FluentBundle`.\n *\n * If the message doesn't have a value, return `null`.\n *\n * @param {FluentBundle} bundle\n * @param {Array} errors\n * @param {Object} message\n * @param {Object} args\n * @returns {string|null}\n * @private\n */\nfunction valueFromBundle(bundle, errors, message, args) {\n if (message.value) {\n return bundle.formatPattern(message.value, args, errors);\n }\n return null;\n}\n/**\n * Format all public values of a message into a {value, attributes} object.\n *\n * This function is passed as a method to `keysFromBundle` and resolve\n * a single L10n Entity using provided `FluentBundle`.\n *\n * The function will return an object with a value and attributes of the\n * entity.\n *\n * @param {FluentBundle} bundle\n * @param {Array} errors\n * @param {Object} message\n * @param {Object} args\n * @returns {Object}\n * @private\n */\nfunction messageFromBundle(bundle, errors, message, args) {\n const formatted = {\n value: null,\n attributes: null,\n };\n if (message.value) {\n formatted.value = bundle.formatPattern(message.value, args, errors);\n }\n let attrNames = Object.keys(message.attributes);\n if (attrNames.length > 0) {\n formatted.attributes = new Array(attrNames.length);\n for (let [i, name] of attrNames.entries()) {\n let value = bundle.formatPattern(message.attributes[name], args, errors);\n formatted.attributes[i] = { name, value };\n }\n }\n return formatted;\n}\n/**\n * This function is an inner function for `Localization.formatWithFallback`.\n *\n * It takes a `FluentBundle`, list of l10n-ids and a method to be used for\n * key resolution (either `valueFromBundle` or `messageFromBundle`) and\n * optionally a value returned from `keysFromBundle` executed against\n * another `FluentBundle`.\n *\n * The idea here is that if the previous `FluentBundle` did not resolve\n * all keys, we're calling this function with the next context to resolve\n * the remaining ones.\n *\n * In the function, we loop over `keys` and check if we have the `prev`\n * passed and if it has an error entry for the position we're in.\n *\n * If it doesn't, it means that we have a good translation for this key and\n * we return it. If it does, we'll try to resolve the key using the passed\n * `FluentBundle`.\n *\n * In the end, we fill the translations array, and return the Set with\n * missing ids.\n *\n * See `Localization.formatWithFallback` for more info on how this is used.\n *\n * @param {Function} method\n * @param {FluentBundle} bundle\n * @param {Array} keys\n * @param {{Array<{value: string, attributes: Object}>}} translations\n *\n * @returns {Set}\n * @private\n */\nfunction keysFromBundle(method, bundle, keys, translations) {\n const messageErrors = [];\n const missingIds = new Set();\n keys.forEach(({ id, args }, i) => {\n if (translations[i] !== undefined) {\n return;\n }\n let message = bundle.getMessage(id);\n if (message) {\n messageErrors.length = 0;\n translations[i] = method(bundle, messageErrors, message, args);\n if (messageErrors.length > 0 && typeof console !== \"undefined\") {\n const locale = bundle.locales[0];\n const errors = messageErrors.join(\", \");\n console.warn(`[fluent][resolver] errors in ${locale}/${id}: ${errors}.`);\n }\n }\n else {\n missingIds.add(id);\n }\n });\n return missingIds;\n}\n","import translateElement from \"./overlay.js\";\nimport Localization from \"./localization.js\";\nconst L10NID_ATTR_NAME = \"data-l10n-id\";\nconst L10NARGS_ATTR_NAME = \"data-l10n-args\";\nconst L10N_ELEMENT_QUERY = `[${L10NID_ATTR_NAME}]`;\n/**\n * The `DOMLocalization` class is responsible for fetching resources and\n * formatting translations.\n *\n * It implements the fallback strategy in case of errors encountered during the\n * formatting of translations and methods for observing DOM\n * trees with a `MutationObserver`.\n */\nexport default class DOMLocalization extends Localization {\n /**\n * @param {Array} resourceIds - List of resource IDs\n * @param {Function} generateBundles - Function that returns a\n * generator over FluentBundles\n * @returns {DOMLocalization}\n */\n constructor(resourceIds, generateBundles) {\n super(resourceIds, generateBundles);\n // A Set of DOM trees observed by the `MutationObserver`.\n this.roots = new Set();\n // requestAnimationFrame handler.\n this.pendingrAF = null;\n // list of elements pending for translation.\n this.pendingElements = new Set();\n this.windowElement = null;\n this.mutationObserver = null;\n this.observerConfig = {\n attributes: true,\n characterData: false,\n childList: true,\n subtree: true,\n attributeFilter: [L10NID_ATTR_NAME, L10NARGS_ATTR_NAME],\n };\n }\n onChange(eager = false) {\n super.onChange(eager);\n if (this.roots) {\n this.translateRoots();\n }\n }\n /**\n * Set the `data-l10n-id` and `data-l10n-args` attributes on DOM elements.\n * FluentDOM makes use of mutation observers to detect changes\n * to `data-l10n-*` attributes and translate elements asynchronously.\n * `setAttributes` is a convenience method which allows to translate\n * DOM elements declaratively.\n *\n * You should always prefer to use `data-l10n-id` on elements (statically in\n * HTML or dynamically via `setAttributes`) over manually retrieving\n * translations with `format`. The use of attributes ensures that the\n * elements can be retranslated when the user changes their language\n * preferences.\n *\n * ```javascript\n * localization.setAttributes(\n * document.querySelector('#welcome'), 'hello', { who: 'world' }\n * );\n * ```\n *\n * This will set the following attributes on the `#welcome` element.\n * The MutationObserver will pick up this change and will localize the element\n * asynchronously.\n *\n * ```html\n *

    \n *

    \n * ```\n *\n * @param {Element} element - Element to set attributes on\n * @param {string} id - l10n-id string\n * @param {Object} args - KVP list of l10n arguments\n * @returns {Element}\n */\n setAttributes(element, id, args) {\n element.setAttribute(L10NID_ATTR_NAME, id);\n if (args) {\n element.setAttribute(L10NARGS_ATTR_NAME, JSON.stringify(args));\n }\n else {\n element.removeAttribute(L10NARGS_ATTR_NAME);\n }\n return element;\n }\n /**\n * Get the `data-l10n-*` attributes from DOM elements.\n *\n * ```javascript\n * localization.getAttributes(\n * document.querySelector('#welcome')\n * );\n * // -> { id: 'hello', args: { who: 'world' } }\n * ```\n *\n * @param {Element} element - HTML element\n * @returns {{id: string, args: Object}}\n */\n getAttributes(element) {\n return {\n id: element.getAttribute(L10NID_ATTR_NAME),\n args: JSON.parse(element.getAttribute(L10NARGS_ATTR_NAME) || null),\n };\n }\n /**\n * Add `newRoot` to the list of roots managed by this `DOMLocalization`.\n *\n * Additionally, if this `DOMLocalization` has an observer, start observing\n * `newRoot` in order to translate mutations in it.\n *\n * @param {Element | DocumentFragment} newRoot - Root to observe.\n */\n connectRoot(newRoot) {\n for (const root of this.roots) {\n if (root === newRoot ||\n root.contains(newRoot) ||\n newRoot.contains(root)) {\n throw new Error(\"Cannot add a root that overlaps with existing root.\");\n }\n }\n if (this.windowElement) {\n if (this.windowElement !== newRoot.ownerDocument.defaultView) {\n throw new Error(`Cannot connect a root:\n DOMLocalization already has a root from a different window.`);\n }\n }\n else {\n this.windowElement = newRoot.ownerDocument.defaultView;\n this.mutationObserver = new this.windowElement.MutationObserver(mutations => this.translateMutations(mutations));\n }\n this.roots.add(newRoot);\n this.mutationObserver.observe(newRoot, this.observerConfig);\n }\n /**\n * Remove `root` from the list of roots managed by this `DOMLocalization`.\n *\n * Additionally, if this `DOMLocalization` has an observer, stop observing\n * `root`.\n *\n * Returns `true` if the root was the last one managed by this\n * `DOMLocalization`.\n *\n * @param {Element | DocumentFragment} root - Root to disconnect.\n * @returns {boolean}\n */\n disconnectRoot(root) {\n this.roots.delete(root);\n // Pause the mutation observer to stop observing `root`.\n this.pauseObserving();\n if (this.roots.size === 0) {\n this.mutationObserver = null;\n if (this.windowElement && this.pendingrAF) {\n this.windowElement.cancelAnimationFrame(this.pendingrAF);\n }\n this.windowElement = null;\n this.pendingrAF = null;\n this.pendingElements.clear();\n return true;\n }\n // Resume observing all other roots.\n this.resumeObserving();\n return false;\n }\n /**\n * Translate all roots associated with this `DOMLocalization`.\n *\n * @returns {Promise}\n */\n translateRoots() {\n const roots = Array.from(this.roots);\n return Promise.all(roots.map(root => this.translateFragment(root)));\n }\n /**\n * Pauses the `MutationObserver`.\n */\n pauseObserving() {\n if (!this.mutationObserver) {\n return;\n }\n this.translateMutations(this.mutationObserver.takeRecords());\n this.mutationObserver.disconnect();\n }\n /**\n * Resumes the `MutationObserver`.\n */\n resumeObserving() {\n if (!this.mutationObserver) {\n return;\n }\n for (const root of this.roots) {\n this.mutationObserver.observe(root, this.observerConfig);\n }\n }\n /**\n * Translate mutations detected by the `MutationObserver`.\n *\n * @private\n */\n translateMutations(mutations) {\n for (const mutation of mutations) {\n switch (mutation.type) {\n case \"attributes\":\n if (mutation.target.hasAttribute(\"data-l10n-id\")) {\n this.pendingElements.add(mutation.target);\n }\n break;\n case \"childList\":\n for (const addedNode of mutation.addedNodes) {\n if (addedNode.nodeType === addedNode.ELEMENT_NODE) {\n if (addedNode.childElementCount) {\n for (const element of this.getTranslatables(addedNode)) {\n this.pendingElements.add(element);\n }\n }\n else if (addedNode.hasAttribute(L10NID_ATTR_NAME)) {\n this.pendingElements.add(addedNode);\n }\n }\n }\n break;\n }\n }\n // This fragment allows us to coalesce all pending translations\n // into a single requestAnimationFrame.\n if (this.pendingElements.size > 0) {\n if (this.pendingrAF === null) {\n this.pendingrAF = this.windowElement.requestAnimationFrame(() => {\n this.translateElements(Array.from(this.pendingElements));\n this.pendingElements.clear();\n this.pendingrAF = null;\n });\n }\n }\n }\n /**\n * Translate a DOM element or fragment asynchronously using this\n * `DOMLocalization` object.\n *\n * Manually trigger the translation (or re-translation) of a DOM fragment.\n * Use the `data-l10n-id` and `data-l10n-args` attributes to mark up the DOM\n * with information about which translations to use.\n *\n * Returns a `Promise` that gets resolved once the translation is complete.\n *\n * @param {Element | DocumentFragment} frag - Element or DocumentFragment to be translated\n * @returns {Promise}\n */\n translateFragment(frag) {\n return this.translateElements(this.getTranslatables(frag));\n }\n /**\n * Translate a list of DOM elements asynchronously using this\n * `DOMLocalization` object.\n *\n * Manually trigger the translation (or re-translation) of a list of elements.\n * Use the `data-l10n-id` and `data-l10n-args` attributes to mark up the DOM\n * with information about which translations to use.\n *\n * Returns a `Promise` that gets resolved once the translation is complete.\n *\n * @param {Array} elements - List of elements to be translated\n * @returns {Promise}\n */\n async translateElements(elements) {\n if (!elements.length) {\n return undefined;\n }\n const keys = elements.map(this.getKeysForElement);\n const translations = await this.formatMessages(keys);\n return this.applyTranslations(elements, translations);\n }\n /**\n * Applies translations onto elements.\n *\n * @param {Array} elements\n * @param {Array} translations\n * @private\n */\n applyTranslations(elements, translations) {\n this.pauseObserving();\n for (let i = 0; i < elements.length; i++) {\n if (translations[i] !== undefined) {\n translateElement(elements[i], translations[i]);\n }\n }\n this.resumeObserving();\n }\n /**\n * Collects all translatable child elements of the element.\n *\n * @param {Element | DocumentFragment} element\n * @returns {Array}\n * @private\n */\n getTranslatables(element) {\n const nodes = Array.from(element.querySelectorAll(L10N_ELEMENT_QUERY));\n if (typeof element.hasAttribute === \"function\" &&\n element.hasAttribute(L10NID_ATTR_NAME)) {\n nodes.push(element);\n }\n return nodes;\n }\n /**\n * Get the `data-l10n-*` attributes from DOM elements as a two-element\n * array.\n *\n * @param {Element} element\n * @returns {Object}\n * @private\n */\n getKeysForElement(element) {\n return {\n id: element.getAttribute(L10NID_ATTR_NAME),\n args: JSON.parse(element.getAttribute(L10NARGS_ATTR_NAME) || null),\n };\n }\n}\n","export { default as DOMLocalization } from \"./dom_localization.js\";\nexport { default as Localization } from \"./localization.js\";\n","/* Copyright 2023 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./interfaces\").IL10n} IL10n */\n\n/**\n * NOTE: The L10n-implementations should use lowercase language-codes\n * internally.\n * @implements {IL10n}\n */\nclass L10n {\n #dir;\n\n #elements;\n\n #lang;\n\n #l10n;\n\n constructor({ lang, isRTL }, l10n = null) {\n this.#lang = L10n.#fixupLangCode(lang);\n this.#l10n = l10n;\n this.#dir = (isRTL ?? L10n.#isRTL(this.#lang)) ? \"rtl\" : \"ltr\";\n }\n\n _setL10n(l10n) {\n this.#l10n = l10n;\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n document.l10n = l10n;\n }\n }\n\n /** @inheritdoc */\n getLanguage() {\n return this.#lang;\n }\n\n /** @inheritdoc */\n getDirection() {\n return this.#dir;\n }\n\n /** @inheritdoc */\n async get(ids, args = null, fallback) {\n if (Array.isArray(ids)) {\n ids = ids.map(id => ({ id }));\n const messages = await this.#l10n.formatMessages(ids);\n return messages.map(message => message.value);\n }\n\n const messages = await this.#l10n.formatMessages([\n {\n id: ids,\n args,\n },\n ]);\n return messages[0]?.value || fallback;\n }\n\n /** @inheritdoc */\n async translate(element) {\n (this.#elements ||= new Set()).add(element);\n try {\n this.#l10n.connectRoot(element);\n await this.#l10n.translateRoots();\n } catch {\n // Element is under an existing root, so there is no need to add it again.\n }\n }\n\n /** @inheritdoc */\n async translateOnce(element) {\n try {\n await this.#l10n.translateElements([element]);\n } catch (ex) {\n console.error(\"translateOnce:\", ex);\n }\n }\n\n /** @inheritdoc */\n async destroy() {\n if (this.#elements) {\n for (const element of this.#elements) {\n this.#l10n.disconnectRoot(element);\n }\n this.#elements.clear();\n this.#elements = null;\n }\n this.#l10n.pauseObserving();\n }\n\n /** @inheritdoc */\n pause() {\n this.#l10n.pauseObserving();\n }\n\n /** @inheritdoc */\n resume() {\n this.#l10n.resumeObserving();\n }\n\n static #fixupLangCode(langCode) {\n // Use only lowercase language-codes internally, and fallback to English.\n langCode = langCode?.toLowerCase() || \"en-us\";\n\n // Try to support \"incompletely\" specified language codes (see issue 13689).\n const PARTIAL_LANG_CODES = {\n en: \"en-us\",\n es: \"es-es\",\n fy: \"fy-nl\",\n ga: \"ga-ie\",\n gu: \"gu-in\",\n hi: \"hi-in\",\n hy: \"hy-am\",\n nb: \"nb-no\",\n ne: \"ne-np\",\n nn: \"nn-no\",\n pa: \"pa-in\",\n pt: \"pt-pt\",\n sv: \"sv-se\",\n zh: \"zh-cn\",\n };\n return PARTIAL_LANG_CODES[langCode] || langCode;\n }\n\n static #isRTL(lang) {\n const shortCode = lang.split(\"-\", 1)[0];\n return [\"ar\", \"he\", \"fa\", \"ps\", \"ur\"].includes(shortCode);\n }\n}\n\nconst GenericL10n = null;\n\nexport { GenericL10n, L10n };\n","/* Copyright 2017 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./interfaces\").IL10n} IL10n */\n\nimport { FeatureTest, fetchData } from \"pdfjs-lib\";\nimport { FluentBundle, FluentResource } from \"fluent-bundle\";\nimport { DOMLocalization } from \"fluent-dom\";\nimport { L10n } from \"./l10n.js\";\n\nfunction PLATFORM() {\n const { isAndroid, isLinux, isMac, isWindows } = FeatureTest.platform;\n if (isLinux) {\n return \"linux\";\n }\n if (isWindows) {\n return \"windows\";\n }\n if (isMac) {\n return \"macos\";\n }\n if (isAndroid) {\n return \"android\";\n }\n return \"other\";\n}\n\nfunction createBundle(lang, text) {\n const resource = new FluentResource(text);\n const bundle = new FluentBundle(lang, {\n functions: { PLATFORM },\n });\n const errors = bundle.addResource(resource);\n if (errors.length) {\n console.error(\"L10n errors\", errors);\n }\n return bundle;\n}\n\n/**\n * @implements {IL10n}\n */\nclass GenericL10n extends L10n {\n constructor(lang) {\n super({ lang });\n\n const generateBundles = !lang\n ? GenericL10n.#generateBundlesFallback.bind(\n GenericL10n,\n this.getLanguage()\n )\n : GenericL10n.#generateBundles.bind(\n GenericL10n,\n \"en-us\",\n this.getLanguage()\n );\n this._setL10n(new DOMLocalization([], generateBundles));\n }\n\n /**\n * Generate the bundles for Fluent.\n * @param {String} defaultLang - The fallback language to use for\n * translations.\n * @param {String} baseLang - The base language to use for translations.\n */\n static async *#generateBundles(defaultLang, baseLang) {\n const { baseURL, paths } = await this.#getPaths();\n\n const langs = [baseLang];\n if (defaultLang !== baseLang) {\n // Also fallback to the short-format of the base language\n // (see issue 17269).\n const shortLang = baseLang.split(\"-\", 1)[0];\n\n if (shortLang !== baseLang) {\n langs.push(shortLang);\n }\n langs.push(defaultLang);\n }\n // Trigger fetching of bundles in parallel, to reduce overall load time.\n const bundles = langs.map(lang => [\n lang,\n this.#createBundle(lang, baseURL, paths),\n ]);\n\n for (const [lang, bundlePromise] of bundles) {\n const bundle = await bundlePromise;\n if (bundle) {\n yield bundle;\n } else if (lang === \"en-us\") {\n yield this.#createBundleFallback(lang);\n }\n }\n }\n\n static async #createBundle(lang, baseURL, paths) {\n const path = paths[lang];\n if (!path) {\n return null;\n }\n const url = new URL(path, baseURL);\n const text = await fetchData(url, /* type = */ \"text\");\n\n return createBundle(lang, text);\n }\n\n static async #getPaths() {\n try {\n const { href } = document.querySelector(`link[type=\"application/l10n\"]`);\n const paths = await fetchData(href, /* type = */ \"json\");\n\n return {\n baseURL: href.substring(0, href.lastIndexOf(\"/\") + 1) || \"./\",\n paths,\n };\n } catch {}\n return { baseURL: \"./\", paths: Object.create(null) };\n }\n\n static async *#generateBundlesFallback(lang) {\n yield this.#createBundleFallback(lang);\n }\n\n static async #createBundleFallback(lang) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n throw new Error(\"Not implemented: #createBundleFallback\");\n }\n const text =\n typeof PDFJSDev === \"undefined\"\n ? await fetchData(\n new URL(\"../l10n/en-US/viewer.ftl\", window.location.href),\n /* type = */ \"text\"\n )\n : PDFJSDev.eval(\"DEFAULT_FTL\");\n\n return createBundle(lang, text);\n }\n}\n\nexport { GenericL10n };\n","/* Copyright 2020 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getPdfFilenameFromUrl } from \"pdfjs-lib\";\n\nasync function docProperties(pdfDocument) {\n const url = \"\",\n baseUrl = \"\";\n const { info, metadata, contentDispositionFilename, contentLength } =\n await pdfDocument.getMetadata();\n\n return {\n ...info,\n baseURL: baseUrl,\n filesize: contentLength || (await pdfDocument.getDownloadInfo()).length,\n filename: contentDispositionFilename || getPdfFilenameFromUrl(url),\n metadata: metadata?.getRaw(),\n authors: metadata?.get(\"dc:creator\"),\n numPages: pdfDocument.numPages,\n URL: url,\n };\n}\n\nclass GenericScripting {\n constructor(sandboxBundleSrc) {\n this._ready = new Promise((resolve, reject) => {\n const sandbox =\n typeof PDFJSDev === \"undefined\"\n ? import(sandboxBundleSrc) // eslint-disable-line no-unsanitized/method\n : __raw_import__(sandboxBundleSrc);\n sandbox\n .then(pdfjsSandbox => {\n resolve(pdfjsSandbox.QuickJSSandbox());\n })\n .catch(reject);\n });\n }\n\n async createSandbox(data) {\n const sandbox = await this._ready;\n sandbox.create(data);\n }\n\n async dispatchEventInSandbox(event) {\n const sandbox = await this._ready;\n setTimeout(() => sandbox.dispatchEvent(event), 0);\n }\n\n async destroySandbox() {\n const sandbox = await this._ready;\n sandbox.nukeSandbox();\n }\n}\n\nexport { docProperties, GenericScripting };\n","/* Copyright 2025 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getUuid } from \"pdfjs-lib\";\n\nconst KEY_STORAGE = \"pdfjs.signature\";\n\nclass SignatureStorage {\n // TODO: Encrypt the data in using a password and add a UI for entering it.\n // We could use the Web Crypto API for this (see https://bradyjoslin.com/blog/encryption-webcrypto/\n // for an example).\n\n #eventBus;\n\n #signatures = null;\n\n #signal = null;\n\n constructor(eventBus, signal) {\n this.#eventBus = eventBus;\n this.#signal = signal;\n }\n\n #save() {\n localStorage.setItem(\n KEY_STORAGE,\n JSON.stringify(Object.fromEntries(this.#signatures))\n );\n }\n\n async getAll() {\n if (this.#signal) {\n window.addEventListener(\n \"storage\",\n ({ key }) => {\n if (key === KEY_STORAGE) {\n this.#signatures = null;\n this.#eventBus?.dispatch(\"storedsignatureschanged\", {\n source: this,\n });\n }\n },\n { signal: this.#signal }\n );\n this.#signal = null;\n }\n if (!this.#signatures) {\n this.#signatures = new Map();\n const data = localStorage.getItem(KEY_STORAGE);\n if (data) {\n for (const [key, value] of Object.entries(JSON.parse(data))) {\n this.#signatures.set(key, value);\n }\n }\n }\n return this.#signatures;\n }\n\n async isFull() {\n // Only allow 5 signatures to be saved.\n return (await this.size()) === 5;\n }\n\n async size() {\n return (await this.getAll()).size;\n }\n\n async create(data) {\n if (await this.isFull()) {\n return null;\n }\n const uuid = getUuid();\n this.#signatures.set(uuid, data);\n this.#save();\n\n return uuid;\n }\n\n async delete(uuid) {\n const signatures = await this.getAll();\n if (!signatures.has(uuid)) {\n return false;\n }\n signatures.delete(uuid);\n this.#save();\n\n return true;\n }\n}\n\nexport { SignatureStorage };\n","/* Copyright 2017 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AppOptions } from \"./app_options.js\";\nimport { BaseExternalServices } from \"./external_services.js\";\nimport { BasePreferences } from \"./preferences.js\";\nimport { GenericL10n } from \"./genericl10n.js\";\nimport { GenericScripting } from \"./generic_scripting.js\";\nimport { SignatureStorage } from \"./generic_signature_storage.js\";\n\nif (typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"GENERIC\")) {\n throw new Error(\n 'Module \"pdfjs-web/genericcom\" shall not be used outside GENERIC build.'\n );\n}\n\nfunction initCom(app) {}\n\nclass Preferences extends BasePreferences {\n async _writeToStorage(prefObj) {\n localStorage.setItem(\"pdfjs.preferences\", JSON.stringify(prefObj));\n }\n\n async _readFromStorage(prefObj) {\n return { prefs: JSON.parse(localStorage.getItem(\"pdfjs.preferences\")) };\n }\n}\n\nclass ExternalServices extends BaseExternalServices {\n async createL10n() {\n return new GenericL10n(AppOptions.get(\"localeProperties\")?.lang);\n }\n\n createScripting() {\n return new GenericScripting(AppOptions.get(\"sandboxBundleSrc\"));\n }\n\n createSignatureStorage(eventBus, signal) {\n return new SignatureStorage(eventBus, signal);\n }\n}\n\nclass MLManager {\n static {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n this.getFakeMLManager = options => new FakeMLManager(options);\n }\n }\n\n async isEnabledFor(_name) {\n return false;\n }\n\n async deleteModel(_service) {\n return null;\n }\n\n isReady(_name) {\n return false;\n }\n\n guess(_data) {}\n\n toggleService(_name, _enabled) {}\n}\n\nif (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n // eslint-disable-next-line no-var\n var FakeMLManager = class {\n eventBus = null;\n\n hasProgress = false;\n\n constructor({ enableGuessAltText, enableAltTextModelDownload }) {\n this.enableGuessAltText = enableGuessAltText;\n this.enableAltTextModelDownload = enableAltTextModelDownload;\n }\n\n setEventBus(eventBus, abortSignal) {\n this.eventBus = eventBus;\n }\n\n async isEnabledFor(_name) {\n return this.enableGuessAltText;\n }\n\n async deleteModel(_name) {\n this.enableAltTextModelDownload = false;\n return null;\n }\n\n async loadModel(_name) {}\n\n async downloadModel(_name) {\n // Simulate downloading the model but with progress.\n // The progress can be seen in the new alt-text dialog.\n this.hasProgress = true;\n\n const { promise, resolve } = Promise.withResolvers();\n const total = 1e8;\n const end = 1.5 * total;\n const increment = 5e6;\n let loaded = 0;\n const id = setInterval(() => {\n loaded += increment;\n if (loaded <= end) {\n this.eventBus.dispatch(\"loadaiengineprogress\", {\n source: this,\n detail: {\n total,\n totalLoaded: loaded,\n finished: loaded + increment >= end,\n },\n });\n return;\n }\n clearInterval(id);\n this.hasProgress = false;\n this.enableAltTextModelDownload = true;\n resolve(true);\n }, 900);\n return promise;\n }\n\n isReady(_name) {\n return this.enableAltTextModelDownload;\n }\n\n guess({ request: { data } }) {\n return new Promise(resolve => {\n setTimeout(() => {\n resolve(data ? { output: \"Fake alt text.\" } : { error: true });\n }, 3000);\n });\n }\n\n toggleService(_name, enabled) {\n this.enableGuessAltText = enabled;\n }\n };\n}\n\nexport { ExternalServices, initCom, MLManager, Preferences };\n","/* Copyright 2024 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { noContextMenu } from \"pdfjs-lib\";\n\nclass NewAltTextManager {\n #boundCancel = this.#cancel.bind(this);\n\n #createAutomaticallyButton;\n\n #currentEditor = null;\n\n #cancelButton;\n\n #descriptionContainer;\n\n #dialog;\n\n #disclaimer;\n\n #downloadModel;\n\n #downloadModelDescription;\n\n #eventBus;\n\n #firstTime = false;\n\n #guessedAltText;\n\n #hasAI = null;\n\n #isEditing = null;\n\n #imagePreview;\n\n #imageData;\n\n #isAILoading = false;\n\n #wasAILoading = false;\n\n #learnMore;\n\n #notNowButton;\n\n #overlayManager;\n\n #textarea;\n\n #title;\n\n #uiManager;\n\n #previousAltText = null;\n\n constructor(\n {\n descriptionContainer,\n dialog,\n imagePreview,\n cancelButton,\n disclaimer,\n notNowButton,\n saveButton,\n textarea,\n learnMore,\n errorCloseButton,\n createAutomaticallyButton,\n downloadModel,\n downloadModelDescription,\n title,\n },\n overlayManager,\n eventBus\n ) {\n this.#cancelButton = cancelButton;\n this.#createAutomaticallyButton = createAutomaticallyButton;\n this.#descriptionContainer = descriptionContainer;\n this.#dialog = dialog;\n this.#disclaimer = disclaimer;\n this.#notNowButton = notNowButton;\n this.#imagePreview = imagePreview;\n this.#textarea = textarea;\n this.#learnMore = learnMore;\n this.#title = title;\n this.#downloadModel = downloadModel;\n this.#downloadModelDescription = downloadModelDescription;\n this.#overlayManager = overlayManager;\n this.#eventBus = eventBus;\n\n dialog.addEventListener(\"close\", this.#close.bind(this));\n dialog.addEventListener(\"contextmenu\", event => {\n if (event.target !== this.#textarea) {\n event.preventDefault();\n }\n });\n cancelButton.addEventListener(\"click\", this.#boundCancel);\n notNowButton.addEventListener(\"click\", this.#boundCancel);\n saveButton.addEventListener(\"click\", this.#save.bind(this));\n errorCloseButton.addEventListener(\"click\", () => {\n this.#toggleError(false);\n });\n createAutomaticallyButton.addEventListener(\"click\", async () => {\n const checked =\n createAutomaticallyButton.getAttribute(\"aria-pressed\") !== \"true\";\n this.#currentEditor._reportTelemetry({\n action: \"pdfjs.image.alt_text.ai_generation_check\",\n data: { status: checked },\n });\n\n if (this.#uiManager) {\n this.#uiManager.setPreference(\"enableGuessAltText\", checked);\n await this.#uiManager.mlManager.toggleService(\"altText\", checked);\n }\n this.#toggleGuessAltText(checked, /* isInitial = */ false);\n });\n textarea.addEventListener(\"focus\", () => {\n this.#wasAILoading = this.#isAILoading;\n this.#toggleLoading(false);\n this.#toggleTitleAndDisclaimer();\n });\n textarea.addEventListener(\"blur\", () => {\n if (!textarea.value) {\n this.#toggleLoading(this.#wasAILoading);\n }\n this.#toggleTitleAndDisclaimer();\n });\n textarea.addEventListener(\"input\", () => {\n this.#toggleTitleAndDisclaimer();\n });\n\n eventBus._on(\"enableguessalttext\", ({ value }) => {\n this.#toggleGuessAltText(value, /* isInitial = */ false);\n });\n\n this.#overlayManager.register(dialog);\n\n this.#learnMore.addEventListener(\"click\", () => {\n this.#currentEditor._reportTelemetry({\n action: \"pdfjs.image.alt_text.info\",\n data: { topic: \"alt_text\" },\n });\n });\n }\n\n #toggleLoading(value) {\n if (!this.#uiManager || this.#isAILoading === value) {\n return;\n }\n this.#isAILoading = value;\n this.#descriptionContainer.classList.toggle(\"loading\", value);\n }\n\n #toggleError(value) {\n if (!this.#uiManager) {\n return;\n }\n this.#dialog.classList.toggle(\"error\", value);\n }\n\n async #toggleGuessAltText(value, isInitial = false) {\n if (!this.#uiManager) {\n return;\n }\n this.#dialog.classList.toggle(\"aiDisabled\", !value);\n this.#createAutomaticallyButton.setAttribute(\"aria-pressed\", value);\n\n if (value) {\n const { altTextLearnMoreUrl } = this.#uiManager.mlManager;\n if (altTextLearnMoreUrl) {\n this.#learnMore.href = altTextLearnMoreUrl;\n }\n this.#mlGuessAltText(isInitial);\n } else {\n this.#toggleLoading(false);\n this.#isAILoading = false;\n this.#toggleTitleAndDisclaimer();\n }\n }\n\n #toggleNotNow() {\n this.#notNowButton.classList.toggle(\"hidden\", !this.#firstTime);\n this.#cancelButton.classList.toggle(\"hidden\", this.#firstTime);\n }\n\n #toggleAI(value) {\n if (!this.#uiManager || this.#hasAI === value) {\n return;\n }\n this.#hasAI = value;\n this.#dialog.classList.toggle(\"noAi\", !value);\n this.#toggleTitleAndDisclaimer();\n }\n\n #toggleTitleAndDisclaimer() {\n // Disclaimer is visible when the AI is loading or the user didn't change\n // the guessed alt text.\n const visible =\n this.#isAILoading ||\n (this.#guessedAltText && this.#guessedAltText === this.#textarea.value);\n this.#disclaimer.hidden = !visible;\n\n // The title changes depending if the text area is empty or not.\n const isEditing = this.#isAILoading || !!this.#textarea.value;\n if (this.#isEditing === isEditing) {\n return;\n }\n this.#isEditing = isEditing;\n this.#title.setAttribute(\n \"data-l10n-id\",\n isEditing\n ? \"pdfjs-editor-new-alt-text-dialog-edit-label\"\n : \"pdfjs-editor-new-alt-text-dialog-add-label\"\n );\n }\n\n async #mlGuessAltText(isInitial) {\n if (this.#isAILoading) {\n // We're still loading the previous guess.\n return;\n }\n\n if (this.#textarea.value) {\n // The user has already set an alt text.\n return;\n }\n\n if (isInitial && this.#previousAltText !== null) {\n // The user has already set an alt text (empty or not).\n return;\n }\n\n this.#guessedAltText = this.#currentEditor.guessedAltText;\n if (this.#previousAltText === null && this.#guessedAltText) {\n // We have a guessed alt text and the user didn't change it.\n this.#addAltText(this.#guessedAltText);\n return;\n }\n\n this.#toggleLoading(true);\n this.#toggleTitleAndDisclaimer();\n\n let hasError = false;\n try {\n // When calling #mlGuessAltText we don't wait for it, so we must take care\n // that the alt text dialog can have been closed before the response is.\n\n const altText = await this.#currentEditor.mlGuessAltText(\n this.#imageData,\n /* updateAltTextData = */ false\n );\n if (altText) {\n this.#guessedAltText = altText;\n this.#wasAILoading = this.#isAILoading;\n if (this.#isAILoading) {\n this.#addAltText(altText);\n }\n }\n } catch (e) {\n console.error(e);\n hasError = true;\n }\n\n this.#toggleLoading(false);\n this.#toggleTitleAndDisclaimer();\n\n if (hasError && this.#uiManager) {\n this.#toggleError(true);\n }\n }\n\n #addAltText(altText) {\n if (!this.#uiManager || this.#textarea.value) {\n return;\n }\n this.#textarea.value = altText;\n this.#toggleTitleAndDisclaimer();\n }\n\n #setProgress() {\n // Show the download model progress.\n this.#downloadModel.classList.toggle(\"hidden\", false);\n\n const callback = async ({ detail: { finished, total, totalLoaded } }) => {\n const ONE_MEGA_BYTES = 1e6;\n // totalLoaded can be greater than total if the download is compressed.\n // So we cheat to avoid any confusion.\n totalLoaded = Math.min(0.99 * total, totalLoaded);\n\n // Update the progress.\n const totalSize = (this.#downloadModelDescription.ariaValueMax =\n Math.round(total / ONE_MEGA_BYTES));\n const downloadedSize = (this.#downloadModelDescription.ariaValueNow =\n Math.round(totalLoaded / ONE_MEGA_BYTES));\n this.#downloadModelDescription.setAttribute(\n \"data-l10n-args\",\n JSON.stringify({ totalSize, downloadedSize })\n );\n if (!finished) {\n return;\n }\n\n // We're done, remove the listener and hide the download model progress.\n this.#eventBus._off(\"loadaiengineprogress\", callback);\n this.#downloadModel.classList.toggle(\"hidden\", true);\n\n this.#toggleAI(true);\n if (!this.#uiManager) {\n return;\n }\n const { mlManager } = this.#uiManager;\n\n // The model has been downloaded, we can now enable the AI service.\n mlManager.toggleService(\"altText\", true);\n this.#toggleGuessAltText(\n await mlManager.isEnabledFor(\"altText\"),\n /* isInitial = */ true\n );\n };\n this.#eventBus._on(\"loadaiengineprogress\", callback);\n }\n\n async editAltText(uiManager, editor, firstTime) {\n if (this.#currentEditor || !editor) {\n return;\n }\n\n if (firstTime && editor.hasAltTextData()) {\n editor.altTextFinish();\n return;\n }\n\n this.#firstTime = firstTime;\n let { mlManager } = uiManager;\n let hasAI = !!mlManager;\n this.#toggleTitleAndDisclaimer();\n\n if (mlManager && !mlManager.isReady(\"altText\")) {\n hasAI = false;\n if (mlManager.hasProgress) {\n this.#setProgress();\n } else {\n mlManager = null;\n }\n } else {\n this.#downloadModel.classList.toggle(\"hidden\", true);\n }\n\n const isAltTextEnabledPromise = mlManager?.isEnabledFor(\"altText\");\n\n this.#currentEditor = editor;\n this.#uiManager = uiManager;\n this.#uiManager.removeEditListeners();\n\n ({ altText: this.#previousAltText } = editor.altTextData);\n this.#textarea.value = this.#previousAltText ?? \"\";\n\n // TODO: get this value from Firefox\n // (https://bugzilla.mozilla.org/show_bug.cgi?id=1908184)\n const AI_MAX_IMAGE_DIMENSION = 224;\n const MAX_PREVIEW_DIMENSION = 180;\n\n // The max dimension of the preview in the dialog is 180px, so we keep 224px\n // and rescale it thanks to css.\n\n let canvas, width, height;\n if (mlManager) {\n ({\n canvas,\n width,\n height,\n imageData: this.#imageData,\n } = editor.copyCanvas(\n AI_MAX_IMAGE_DIMENSION,\n MAX_PREVIEW_DIMENSION,\n /* createImageData = */ true\n ));\n if (hasAI) {\n this.#toggleGuessAltText(\n await isAltTextEnabledPromise,\n /* isInitial = */ true\n );\n }\n } else {\n ({ canvas, width, height } = editor.copyCanvas(\n AI_MAX_IMAGE_DIMENSION,\n MAX_PREVIEW_DIMENSION,\n /* createImageData = */ false\n ));\n }\n\n canvas.setAttribute(\"role\", \"presentation\");\n const { style } = canvas;\n style.width = `${width}px`;\n style.height = `${height}px`;\n this.#imagePreview.append(canvas);\n\n this.#toggleNotNow();\n this.#toggleAI(hasAI);\n this.#toggleError(false);\n\n try {\n await this.#overlayManager.open(this.#dialog);\n } catch (ex) {\n this.#close();\n throw ex;\n }\n }\n\n #cancel() {\n this.#currentEditor.altTextData = {\n cancel: true,\n };\n const altText = this.#textarea.value.trim();\n this.#currentEditor._reportTelemetry({\n action: \"pdfjs.image.alt_text.dismiss\",\n data: {\n alt_text_type: altText ? \"present\" : \"empty\",\n flow: this.#firstTime ? \"image_add\" : \"alt_text_edit\",\n },\n });\n this.#currentEditor._reportTelemetry({\n action: \"pdfjs.image.image_added\",\n data: { alt_text_modal: true, alt_text_type: \"skipped\" },\n });\n this.#finish();\n }\n\n #finish() {\n this.#overlayManager.closeIfActive(this.#dialog);\n }\n\n #close() {\n const canvas = this.#imagePreview.firstChild;\n canvas.remove();\n canvas.width = canvas.height = 0;\n this.#imageData = null;\n\n this.#toggleLoading(false);\n\n this.#uiManager?.addEditListeners();\n this.#currentEditor.altTextFinish();\n this.#uiManager?.setSelected(this.#currentEditor);\n this.#currentEditor = null;\n this.#uiManager = null;\n }\n\n #extractWords(text) {\n return new Set(\n text\n .toLowerCase()\n .split(/[^\\p{L}\\p{N}]+/gu)\n .filter(x => !!x)\n );\n }\n\n #save() {\n const altText = this.#textarea.value.trim();\n this.#currentEditor.altTextData = {\n altText,\n decorative: false,\n };\n this.#currentEditor.altTextData.guessedAltText = this.#guessedAltText;\n\n if (this.#guessedAltText && this.#guessedAltText !== altText) {\n const guessedWords = this.#extractWords(this.#guessedAltText);\n const words = this.#extractWords(altText);\n this.#currentEditor._reportTelemetry({\n action: \"pdfjs.image.alt_text.user_edit\",\n data: {\n total_words: guessedWords.size,\n words_removed: guessedWords.difference(words).size,\n words_added: words.difference(guessedWords).size,\n },\n });\n }\n this.#currentEditor._reportTelemetry({\n action: \"pdfjs.image.image_added\",\n data: {\n alt_text_modal: true,\n alt_text_type: altText ? \"present\" : \"empty\",\n },\n });\n\n this.#currentEditor._reportTelemetry({\n action: \"pdfjs.image.alt_text.save\",\n data: {\n alt_text_type: altText ? \"present\" : \"empty\",\n flow: this.#firstTime ? \"image_add\" : \"alt_text_edit\",\n },\n });\n\n this.#finish();\n }\n\n destroy() {\n this.#uiManager = null; // Avoid re-adding the edit listeners.\n this.#finish();\n }\n}\n\nclass ImageAltTextSettings {\n #aiModelSettings;\n\n #createModelButton;\n\n #downloadModelButton;\n\n #dialog;\n\n #eventBus;\n\n #mlManager;\n\n #overlayManager;\n\n #showAltTextDialogButton;\n\n constructor(\n {\n dialog,\n createModelButton,\n aiModelSettings,\n learnMore,\n closeButton,\n deleteModelButton,\n downloadModelButton,\n showAltTextDialogButton,\n },\n overlayManager,\n eventBus,\n mlManager\n ) {\n this.#dialog = dialog;\n this.#aiModelSettings = aiModelSettings;\n this.#createModelButton = createModelButton;\n this.#downloadModelButton = downloadModelButton;\n this.#showAltTextDialogButton = showAltTextDialogButton;\n this.#overlayManager = overlayManager;\n this.#eventBus = eventBus;\n this.#mlManager = mlManager;\n\n const { altTextLearnMoreUrl } = mlManager;\n if (altTextLearnMoreUrl) {\n learnMore.href = altTextLearnMoreUrl;\n }\n\n dialog.addEventListener(\"contextmenu\", noContextMenu);\n\n createModelButton.addEventListener(\"click\", async e => {\n const checked = this.#togglePref(\"enableGuessAltText\", e);\n await mlManager.toggleService(\"altText\", checked);\n this.#reportTelemetry({\n type: \"stamp\",\n action: \"pdfjs.image.alt_text.settings_ai_generation_check\",\n data: { status: checked },\n });\n });\n\n showAltTextDialogButton.addEventListener(\"click\", e => {\n const checked = this.#togglePref(\"enableNewAltTextWhenAddingImage\", e);\n this.#reportTelemetry({\n type: \"stamp\",\n action: \"pdfjs.image.alt_text.settings_edit_alt_text_check\",\n data: { status: checked },\n });\n });\n\n deleteModelButton.addEventListener(\"click\", this.#delete.bind(this, true));\n downloadModelButton.addEventListener(\n \"click\",\n this.#download.bind(this, true)\n );\n\n closeButton.addEventListener(\"click\", this.#finish.bind(this));\n\n learnMore.addEventListener(\"click\", () => {\n this.#reportTelemetry({\n type: \"stamp\",\n action: \"pdfjs.image.alt_text.info\",\n data: { topic: \"ai_generation\" },\n });\n });\n\n eventBus._on(\"enablealttextmodeldownload\", ({ value }) => {\n if (value) {\n this.#download(false);\n } else {\n this.#delete(false);\n }\n });\n\n this.#overlayManager.register(dialog);\n }\n\n #reportTelemetry(data) {\n this.#eventBus.dispatch(\"reporttelemetry\", {\n source: this,\n details: {\n type: \"editing\",\n data,\n },\n });\n }\n\n async #download(isFromUI = false) {\n if (isFromUI) {\n this.#downloadModelButton.disabled = true;\n const span = this.#downloadModelButton.firstChild;\n span.setAttribute(\n \"data-l10n-id\",\n \"pdfjs-editor-alt-text-settings-downloading-model-button\"\n );\n\n await this.#mlManager.downloadModel(\"altText\");\n\n span.setAttribute(\n \"data-l10n-id\",\n \"pdfjs-editor-alt-text-settings-download-model-button\"\n );\n\n this.#createModelButton.disabled = false;\n this.#setPref(\"enableGuessAltText\", true);\n this.#mlManager.toggleService(\"altText\", true);\n this.#setPref(\"enableAltTextModelDownload\", true);\n this.#downloadModelButton.disabled = false;\n }\n\n this.#aiModelSettings.classList.toggle(\"download\", false);\n this.#createModelButton.setAttribute(\"aria-pressed\", true);\n }\n\n async #delete(isFromUI = false) {\n if (isFromUI) {\n await this.#mlManager.deleteModel(\"altText\");\n this.#setPref(\"enableGuessAltText\", false);\n this.#setPref(\"enableAltTextModelDownload\", false);\n }\n\n this.#aiModelSettings.classList.toggle(\"download\", true);\n this.#createModelButton.disabled = true;\n this.#createModelButton.setAttribute(\"aria-pressed\", false);\n }\n\n async open({ enableGuessAltText, enableNewAltTextWhenAddingImage }) {\n const { enableAltTextModelDownload } = this.#mlManager;\n this.#createModelButton.disabled = !enableAltTextModelDownload;\n this.#createModelButton.setAttribute(\n \"aria-pressed\",\n enableAltTextModelDownload && enableGuessAltText\n );\n this.#showAltTextDialogButton.setAttribute(\n \"aria-pressed\",\n enableNewAltTextWhenAddingImage\n );\n this.#aiModelSettings.classList.toggle(\n \"download\",\n !enableAltTextModelDownload\n );\n\n await this.#overlayManager.open(this.#dialog);\n this.#reportTelemetry({\n type: \"stamp\",\n action: \"pdfjs.image.alt_text.settings_displayed\",\n });\n }\n\n #togglePref(name, { target }) {\n const checked = target.getAttribute(\"aria-pressed\") !== \"true\";\n this.#setPref(name, checked);\n target.setAttribute(\"aria-pressed\", checked);\n return checked;\n }\n\n #setPref(name, value) {\n this.#eventBus.dispatch(\"setpreference\", {\n source: this,\n name,\n value,\n });\n }\n\n #finish() {\n this.#overlayManager.closeIfActive(this.#dialog);\n }\n}\n\nexport { ImageAltTextSettings, NewAltTextManager };\n","/* Copyright 2023 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DOMSVGFactory } from \"pdfjs-lib\";\n\nclass AltTextManager {\n #clickAC = null;\n\n #currentEditor = null;\n\n #cancelButton;\n\n #dialog;\n\n #eventBus;\n\n #hasUsedPointer = false;\n\n #optionDescription;\n\n #optionDecorative;\n\n #overlayManager;\n\n #saveButton;\n\n #textarea;\n\n #uiManager;\n\n #previousAltText = null;\n\n #resizeAC = null;\n\n #svgElement = null;\n\n #rectElement = null;\n\n #container;\n\n #telemetryData = null;\n\n constructor(\n {\n dialog,\n optionDescription,\n optionDecorative,\n textarea,\n cancelButton,\n saveButton,\n },\n container,\n overlayManager,\n eventBus\n ) {\n this.#dialog = dialog;\n this.#optionDescription = optionDescription;\n this.#optionDecorative = optionDecorative;\n this.#textarea = textarea;\n this.#cancelButton = cancelButton;\n this.#saveButton = saveButton;\n this.#overlayManager = overlayManager;\n this.#eventBus = eventBus;\n this.#container = container;\n\n const onUpdateUIState = this.#updateUIState.bind(this);\n\n dialog.addEventListener(\"close\", this.#close.bind(this));\n dialog.addEventListener(\"contextmenu\", event => {\n if (event.target !== this.#textarea) {\n event.preventDefault();\n }\n });\n cancelButton.addEventListener(\"click\", this.#finish.bind(this));\n saveButton.addEventListener(\"click\", this.#save.bind(this));\n optionDescription.addEventListener(\"change\", onUpdateUIState);\n optionDecorative.addEventListener(\"change\", onUpdateUIState);\n\n this.#overlayManager.register(dialog);\n }\n\n #createSVGElement() {\n if (this.#svgElement) {\n return;\n }\n\n // We create a mask to add to the dialog backdrop: the idea is to have a\n // darken background everywhere except on the editor to clearly see the\n // picture to describe.\n\n const svgFactory = new DOMSVGFactory();\n const svg = (this.#svgElement = svgFactory.createElement(\"svg\"));\n svg.setAttribute(\"width\", \"0\");\n svg.setAttribute(\"height\", \"0\");\n const defs = svgFactory.createElement(\"defs\");\n svg.append(defs);\n const mask = svgFactory.createElement(\"mask\");\n defs.append(mask);\n mask.setAttribute(\"id\", \"alttext-manager-mask\");\n mask.setAttribute(\"maskContentUnits\", \"objectBoundingBox\");\n let rect = svgFactory.createElement(\"rect\");\n mask.append(rect);\n rect.setAttribute(\"fill\", \"white\");\n rect.setAttribute(\"width\", \"1\");\n rect.setAttribute(\"height\", \"1\");\n rect.setAttribute(\"x\", \"0\");\n rect.setAttribute(\"y\", \"0\");\n\n rect = this.#rectElement = svgFactory.createElement(\"rect\");\n mask.append(rect);\n rect.setAttribute(\"fill\", \"black\");\n this.#dialog.append(svg);\n }\n\n async editAltText(uiManager, editor) {\n if (this.#currentEditor || !editor) {\n return;\n }\n this.#createSVGElement();\n\n this.#hasUsedPointer = false;\n\n this.#clickAC = new AbortController();\n const clickOpts = { signal: this.#clickAC.signal },\n onClick = this.#onClick.bind(this);\n for (const element of [\n this.#optionDescription,\n this.#optionDecorative,\n this.#textarea,\n this.#saveButton,\n this.#cancelButton,\n ]) {\n element.addEventListener(\"click\", onClick, clickOpts);\n }\n\n const { altText, decorative } = editor.altTextData;\n if (decorative === true) {\n this.#optionDecorative.checked = true;\n this.#optionDescription.checked = false;\n } else {\n this.#optionDecorative.checked = false;\n this.#optionDescription.checked = true;\n }\n this.#previousAltText = this.#textarea.value = altText?.trim() || \"\";\n this.#updateUIState();\n\n this.#currentEditor = editor;\n this.#uiManager = uiManager;\n this.#uiManager.removeEditListeners();\n\n this.#resizeAC = new AbortController();\n this.#eventBus._on(\"resize\", this.#setPosition.bind(this), {\n signal: this.#resizeAC.signal,\n });\n\n try {\n await this.#overlayManager.open(this.#dialog);\n this.#setPosition();\n } catch (ex) {\n this.#close();\n throw ex;\n }\n }\n\n #setPosition() {\n if (!this.#currentEditor) {\n return;\n }\n const dialog = this.#dialog;\n const { style } = dialog;\n const {\n x: containerX,\n y: containerY,\n width: containerW,\n height: containerH,\n } = this.#container.getBoundingClientRect();\n const { innerWidth: windowW, innerHeight: windowH } = window;\n const { width: dialogW, height: dialogH } = dialog.getBoundingClientRect();\n const { x, y, width, height } = this.#currentEditor.getClientDimensions();\n const MARGIN = 10;\n const isLTR = this.#uiManager.direction === \"ltr\";\n\n const xs = Math.max(x, containerX);\n const xe = Math.min(x + width, containerX + containerW);\n const ys = Math.max(y, containerY);\n const ye = Math.min(y + height, containerY + containerH);\n this.#rectElement.setAttribute(\"width\", `${(xe - xs) / windowW}`);\n this.#rectElement.setAttribute(\"height\", `${(ye - ys) / windowH}`);\n this.#rectElement.setAttribute(\"x\", `${xs / windowW}`);\n this.#rectElement.setAttribute(\"y\", `${ys / windowH}`);\n\n let left = null;\n let top = Math.max(y, 0);\n top += Math.min(windowH - (top + dialogH), 0);\n\n if (isLTR) {\n // Prefer to position the dialog \"after\" (so on the right) the editor.\n if (x + width + MARGIN + dialogW < windowW) {\n left = x + width + MARGIN;\n } else if (x > dialogW + MARGIN) {\n left = x - dialogW - MARGIN;\n }\n } else if (x > dialogW + MARGIN) {\n left = x - dialogW - MARGIN;\n } else if (x + width + MARGIN + dialogW < windowW) {\n left = x + width + MARGIN;\n }\n\n if (left === null) {\n top = null;\n left = Math.max(x, 0);\n left += Math.min(windowW - (left + dialogW), 0);\n if (y > dialogH + MARGIN) {\n top = y - dialogH - MARGIN;\n } else if (y + height + MARGIN + dialogH < windowH) {\n top = y + height + MARGIN;\n }\n }\n\n if (top !== null) {\n dialog.classList.add(\"positioned\");\n if (isLTR) {\n style.left = `${left}px`;\n } else {\n style.right = `${windowW - left - dialogW}px`;\n }\n style.top = `${top}px`;\n } else {\n dialog.classList.remove(\"positioned\");\n style.left = \"\";\n style.top = \"\";\n }\n }\n\n #finish() {\n this.#overlayManager.closeIfActive(this.#dialog);\n }\n\n #close() {\n this.#currentEditor._reportTelemetry(\n this.#telemetryData || {\n action: \"alt_text_cancel\",\n alt_text_keyboard: !this.#hasUsedPointer,\n }\n );\n this.#telemetryData = null;\n\n this.#removeOnClickListeners();\n this.#uiManager?.addEditListeners();\n this.#resizeAC?.abort();\n this.#resizeAC = null;\n this.#currentEditor.altTextFinish();\n this.#currentEditor = null;\n this.#uiManager = null;\n }\n\n #updateUIState() {\n this.#textarea.disabled = this.#optionDecorative.checked;\n }\n\n #save() {\n const altText = this.#textarea.value.trim();\n const decorative = this.#optionDecorative.checked;\n this.#currentEditor.altTextData = {\n altText,\n decorative,\n };\n this.#telemetryData = {\n action: \"alt_text_save\",\n alt_text_description: !!altText,\n alt_text_edit:\n !!this.#previousAltText && this.#previousAltText !== altText,\n alt_text_decorative: decorative,\n alt_text_keyboard: !this.#hasUsedPointer,\n };\n this.#finish();\n }\n\n #onClick(evt) {\n if (evt.detail === 0) {\n return; // The keyboard was used.\n }\n this.#hasUsedPointer = true;\n this.#removeOnClickListeners();\n }\n\n #removeOnClickListeners() {\n this.#clickAC?.abort();\n this.#clickAC = null;\n }\n\n destroy() {\n this.#uiManager = null; // Avoid re-adding the edit listeners.\n this.#finish();\n this.#svgElement?.remove();\n this.#svgElement = this.#rectElement = null;\n }\n}\n\nexport { AltTextManager };\n","/* Copyright 2022 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./event_utils.js\").EventBus} EventBus */\n\nimport { AnnotationEditorParamsType } from \"pdfjs-lib\";\n\n/**\n * @typedef {Object} AnnotationEditorParamsOptions\n * @property {HTMLInputElement} editorFreeTextFontSize\n * @property {HTMLInputElement} editorFreeTextColor\n * @property {HTMLInputElement} editorInkColor\n * @property {HTMLInputElement} editorInkThickness\n * @property {HTMLInputElement} editorInkOpacity\n * @property {HTMLButtonElement} editorStampAddImage\n * @property {HTMLInputElement} editorFreeHighlightThickness\n * @property {HTMLButtonElement} editorHighlightShowAll\n * @property {HTMLButtonElement} editorSignatureAddSignature\n */\n\nclass AnnotationEditorParams {\n /**\n * @param {AnnotationEditorParamsOptions} options\n * @param {EventBus} eventBus\n */\n constructor(options, eventBus) {\n this.eventBus = eventBus;\n this.#bindListeners(options);\n }\n\n /**\n * @param {AnnotationEditorParamsOptions} options\n */\n #bindListeners({\n editorFreeTextFontSize,\n editorFreeTextColor,\n editorInkColor,\n editorInkThickness,\n editorInkOpacity,\n editorStampAddImage,\n editorFreeHighlightThickness,\n editorHighlightShowAll,\n editorSignatureAddSignature,\n }) {\n const { eventBus } = this;\n\n const dispatchEvent = (typeStr, value) => {\n eventBus.dispatch(\"switchannotationeditorparams\", {\n source: this,\n type: AnnotationEditorParamsType[typeStr],\n value,\n });\n };\n editorFreeTextFontSize.addEventListener(\"input\", function () {\n dispatchEvent(\"FREETEXT_SIZE\", this.valueAsNumber);\n });\n editorFreeTextColor.addEventListener(\"input\", function () {\n dispatchEvent(\"FREETEXT_COLOR\", this.value);\n });\n editorInkColor.addEventListener(\"input\", function () {\n dispatchEvent(\"INK_COLOR\", this.value);\n });\n editorInkThickness.addEventListener(\"input\", function () {\n dispatchEvent(\"INK_THICKNESS\", this.valueAsNumber);\n });\n editorInkOpacity.addEventListener(\"input\", function () {\n dispatchEvent(\"INK_OPACITY\", this.valueAsNumber);\n });\n editorStampAddImage.addEventListener(\"click\", () => {\n eventBus.dispatch(\"reporttelemetry\", {\n source: this,\n details: {\n type: \"editing\",\n data: { action: \"pdfjs.image.add_image_click\" },\n },\n });\n dispatchEvent(\"CREATE\");\n });\n editorFreeHighlightThickness.addEventListener(\"input\", function () {\n dispatchEvent(\"HIGHLIGHT_THICKNESS\", this.valueAsNumber);\n });\n editorHighlightShowAll.addEventListener(\"click\", function () {\n const checked = this.getAttribute(\"aria-pressed\") === \"true\";\n this.setAttribute(\"aria-pressed\", !checked);\n dispatchEvent(\"HIGHLIGHT_SHOW_ALL\", !checked);\n });\n editorSignatureAddSignature.addEventListener(\"click\", () => {\n dispatchEvent(\"CREATE\");\n });\n\n eventBus._on(\"annotationeditorparamschanged\", evt => {\n for (const [type, value] of evt.details) {\n switch (type) {\n case AnnotationEditorParamsType.FREETEXT_SIZE:\n editorFreeTextFontSize.value = value;\n break;\n case AnnotationEditorParamsType.FREETEXT_COLOR:\n editorFreeTextColor.value = value;\n break;\n case AnnotationEditorParamsType.INK_COLOR:\n editorInkColor.value = value;\n break;\n case AnnotationEditorParamsType.INK_THICKNESS:\n editorInkThickness.value = value;\n break;\n case AnnotationEditorParamsType.INK_OPACITY:\n editorInkOpacity.value = value;\n break;\n case AnnotationEditorParamsType.HIGHLIGHT_COLOR:\n eventBus.dispatch(\"mainhighlightcolorpickerupdatecolor\", {\n source: this,\n value,\n });\n break;\n case AnnotationEditorParamsType.HIGHLIGHT_THICKNESS:\n editorFreeHighlightThickness.value = value;\n break;\n case AnnotationEditorParamsType.HIGHLIGHT_FREE:\n editorFreeHighlightThickness.disabled = !value;\n break;\n case AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL:\n editorHighlightShowAll.setAttribute(\"aria-pressed\", value);\n break;\n }\n }\n });\n }\n}\n\nexport { AnnotationEditorParams };\n","/* Copyright 2024 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Used to compare floats: there is no exact equality due to rounding errors.\nconst PRECISION = 1e-1;\n\nclass CaretBrowsingMode {\n #mainContainer;\n\n #toolBarHeight = 0;\n\n #viewerContainer;\n\n constructor(abortSignal, mainContainer, viewerContainer, toolbarContainer) {\n this.#mainContainer = mainContainer;\n this.#viewerContainer = viewerContainer;\n\n if (!toolbarContainer) {\n return;\n }\n this.#toolBarHeight = toolbarContainer.getBoundingClientRect().height;\n\n const toolbarObserver = new ResizeObserver(entries => {\n for (const entry of entries) {\n if (entry.target === toolbarContainer) {\n this.#toolBarHeight = Math.floor(entry.borderBoxSize[0].blockSize);\n break;\n }\n }\n });\n toolbarObserver.observe(toolbarContainer);\n\n abortSignal.addEventListener(\"abort\", () => toolbarObserver.disconnect(), {\n once: true,\n });\n }\n\n /**\n * Return true if the two rectangles are on the same line.\n * @param {DOMRect} rect1\n * @param {DOMRect} rect2\n * @returns {boolean}\n */\n #isOnSameLine(rect1, rect2) {\n const top1 = rect1.y;\n const bot1 = rect1.bottom;\n const mid1 = rect1.y + rect1.height / 2;\n\n const top2 = rect2.y;\n const bot2 = rect2.bottom;\n const mid2 = rect2.y + rect2.height / 2;\n\n return (top1 <= mid2 && mid2 <= bot1) || (top2 <= mid1 && mid1 <= bot2);\n }\n\n /**\n * Return `true` if the rectangle is:\n * - under the caret when `isUp === false`.\n * - over the caret when `isUp === true`.\n * @param {DOMRect} rect\n * @param {number} x\n * @param {number} y\n * @param {boolean} isUp\n * @returns {boolean}\n */\n #isUnderOver(rect, x, y, isUp) {\n const midY = rect.y + rect.height / 2;\n return (\n (isUp ? y >= midY : y <= midY) &&\n rect.x - PRECISION <= x &&\n x <= rect.right + PRECISION\n );\n }\n\n /**\n * Check if the rectangle is visible.\n * @param {DOMRect} rect\n * @returns {boolean}\n */\n #isVisible(rect) {\n return (\n rect.top >= this.#toolBarHeight &&\n rect.left >= 0 &&\n rect.bottom <=\n (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n }\n\n /**\n * Get the position of the caret.\n * @param {Selection} selection\n * @param {boolean} isUp\n * @returns {Array}\n */\n #getCaretPosition(selection, isUp) {\n const { focusNode, focusOffset } = selection;\n const range = document.createRange();\n range.setStart(focusNode, focusOffset);\n range.setEnd(focusNode, focusOffset);\n const rect = range.getBoundingClientRect();\n\n return [rect.x, isUp ? rect.top : rect.bottom];\n }\n\n static #caretPositionFromPoint(x, y) {\n if (\n (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) &&\n !document.caretPositionFromPoint\n ) {\n const { startContainer: offsetNode, startOffset: offset } =\n document.caretRangeFromPoint(x, y);\n return { offsetNode, offset };\n }\n return document.caretPositionFromPoint(x, y);\n }\n\n #setCaretPositionHelper(selection, caretX, select, element, rect) {\n rect ||= element.getBoundingClientRect();\n if (caretX <= rect.x + PRECISION) {\n if (select) {\n selection.extend(element.firstChild, 0);\n } else {\n selection.setPosition(element.firstChild, 0);\n }\n return;\n }\n if (rect.right - PRECISION <= caretX) {\n const { lastChild } = element;\n if (select) {\n selection.extend(lastChild, lastChild.length);\n } else {\n selection.setPosition(lastChild, lastChild.length);\n }\n return;\n }\n\n const midY = rect.y + rect.height / 2;\n let caretPosition = CaretBrowsingMode.#caretPositionFromPoint(caretX, midY);\n let parentElement = caretPosition.offsetNode?.parentElement;\n if (parentElement && parentElement !== element) {\n // There is an element on top of the one in the text layer, so we\n // need to hide all the elements (except the one in the text layer)\n // at this position in order to get the correct caret position.\n const elementsAtPoint = document.elementsFromPoint(caretX, midY);\n const savedVisibilities = [];\n for (const el of elementsAtPoint) {\n if (el === element) {\n break;\n }\n const { style } = el;\n savedVisibilities.push([el, style.visibility]);\n style.visibility = \"hidden\";\n }\n caretPosition = CaretBrowsingMode.#caretPositionFromPoint(caretX, midY);\n parentElement = caretPosition.offsetNode?.parentElement;\n for (const [el, visibility] of savedVisibilities) {\n el.style.visibility = visibility;\n }\n }\n if (parentElement !== element) {\n // The element targeted by caretPositionFromPoint isn't in the text\n // layer.\n if (select) {\n selection.extend(element.firstChild, 0);\n } else {\n selection.setPosition(element.firstChild, 0);\n }\n return;\n }\n if (select) {\n selection.extend(caretPosition.offsetNode, caretPosition.offset);\n } else {\n selection.setPosition(caretPosition.offsetNode, caretPosition.offset);\n }\n }\n\n /**\n * Set the caret position or extend the selection (it depends on the select\n * parameter).\n * @param {boolean} select\n * @param {Selection} selection\n * @param {Element} newLineElement\n * @param {DOMRect} newLineElementRect\n * @param {number} caretX\n */\n #setCaretPosition(\n select,\n selection,\n newLineElement,\n newLineElementRect,\n caretX\n ) {\n if (this.#isVisible(newLineElementRect)) {\n this.#setCaretPositionHelper(\n selection,\n caretX,\n select,\n newLineElement,\n newLineElementRect\n );\n return;\n }\n this.#mainContainer.addEventListener(\n \"scrollend\",\n this.#setCaretPositionHelper.bind(\n this,\n selection,\n caretX,\n select,\n newLineElement,\n null\n ),\n { once: true }\n );\n newLineElement.scrollIntoView();\n }\n\n /**\n * Get the node on the next page.\n * @param {Element} textLayer\n * @param {boolean} isUp\n * @returns {Node}\n */\n #getNodeOnNextPage(textLayer, isUp) {\n while (true) {\n const page = textLayer.closest(\".page\");\n const pageNumber = parseInt(page.getAttribute(\"data-page-number\"));\n const nextPage = isUp ? pageNumber - 1 : pageNumber + 1;\n textLayer = this.#viewerContainer.querySelector(\n `.page[data-page-number=\"${nextPage}\"] .textLayer`\n );\n if (!textLayer) {\n return null;\n }\n const walker = document.createTreeWalker(textLayer, NodeFilter.SHOW_TEXT);\n const node = isUp ? walker.lastChild() : walker.firstChild();\n if (node) {\n return node;\n }\n }\n }\n\n /**\n * Move the caret in the given direction.\n * @param {boolean} isUp\n * @param {boolean} select\n */\n moveCaret(isUp, select) {\n const selection = document.getSelection();\n if (selection.rangeCount === 0) {\n return;\n }\n const { focusNode } = selection;\n const focusElement =\n focusNode.nodeType !== Node.ELEMENT_NODE\n ? focusNode.parentElement\n : focusNode;\n const root = focusElement.closest(\".textLayer\");\n if (!root) {\n return;\n }\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);\n walker.currentNode = focusNode;\n\n // Move to the next element which is not on the same line as the focus\n // element.\n const focusRect = focusElement.getBoundingClientRect();\n let newLineElement = null;\n const nodeIterator = (\n isUp ? walker.previousSibling : walker.nextSibling\n ).bind(walker);\n while (nodeIterator()) {\n const element = walker.currentNode.parentElement;\n if (!this.#isOnSameLine(focusRect, element.getBoundingClientRect())) {\n newLineElement = element;\n break;\n }\n }\n\n if (!newLineElement) {\n // Need to find the next line on the next page.\n const node = this.#getNodeOnNextPage(root, isUp);\n if (!node) {\n return;\n }\n if (select) {\n const lastNode =\n (isUp ? walker.firstChild() : walker.lastChild()) || focusNode;\n selection.extend(lastNode, isUp ? 0 : lastNode.length);\n const range = document.createRange();\n range.setStart(node, isUp ? node.length : 0);\n range.setEnd(node, isUp ? node.length : 0);\n selection.addRange(range);\n return;\n }\n const [caretX] = this.#getCaretPosition(selection, isUp);\n const { parentElement } = node;\n this.#setCaretPosition(\n select,\n selection,\n parentElement,\n parentElement.getBoundingClientRect(),\n caretX\n );\n return;\n }\n\n // We've a candidate for the next line now we want to find the first element\n // which is under/over the caret.\n const [caretX, caretY] = this.#getCaretPosition(selection, isUp);\n const newLineElementRect = newLineElement.getBoundingClientRect();\n\n // Maybe the element on the new line is a valid candidate.\n if (this.#isUnderOver(newLineElementRect, caretX, caretY, isUp)) {\n this.#setCaretPosition(\n select,\n selection,\n newLineElement,\n newLineElementRect,\n caretX\n );\n return;\n }\n\n while (nodeIterator()) {\n // Search an element on the same line as newLineElement\n // which could be under/over the caret.\n const element = walker.currentNode.parentElement;\n const elementRect = element.getBoundingClientRect();\n if (!this.#isOnSameLine(newLineElementRect, elementRect)) {\n break;\n }\n if (this.#isUnderOver(elementRect, caretX, caretY, isUp)) {\n // We found the element.\n this.#setCaretPosition(select, selection, element, elementRect, caretX);\n return;\n }\n }\n\n // No element has been found so just put the caret on the element on the new\n // line.\n this.#setCaretPosition(\n select,\n selection,\n newLineElement,\n newLineElementRect,\n caretX\n );\n }\n}\n\nexport { CaretBrowsingMode };\n","/* Copyright 2025 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n AnnotationEditorType,\n applyOpacity,\n CSSConstants,\n findContrastColor,\n MathClamp,\n noContextMenu,\n PDFDateString,\n renderRichText,\n shadow,\n stopEvent,\n Util,\n} from \"pdfjs-lib\";\nimport { binarySearchFirstItem } from \"./ui_utils.js\";\n\nclass CommentManager {\n #dialog;\n\n #popup;\n\n #sidebar;\n\n static #hasForcedColors = null;\n\n constructor(\n commentDialog,\n sidebar,\n eventBus,\n linkService,\n overlayManager,\n ltr,\n hasForcedColors\n ) {\n const dateFormat = new Intl.DateTimeFormat(undefined, {\n dateStyle: \"long\",\n });\n this.dialogElement = commentDialog.dialog;\n this.#dialog = new CommentDialog(\n commentDialog,\n overlayManager,\n eventBus,\n ltr\n );\n this.#popup = new CommentPopup(\n eventBus,\n dateFormat,\n ltr,\n this.dialogElement\n );\n this.#sidebar = new CommentSidebar(\n sidebar,\n eventBus,\n linkService,\n this.#popup,\n dateFormat,\n ltr\n );\n this.#popup.sidebar = this.#sidebar;\n CommentManager.#hasForcedColors = hasForcedColors;\n }\n\n setSidebarUiManager(uiManager) {\n this.#sidebar.setUIManager(uiManager);\n }\n\n showSidebar(annotations) {\n this.#sidebar.show(annotations);\n }\n\n hideSidebar() {\n this.#sidebar.hide();\n }\n\n removeComments(ids) {\n this.#sidebar.removeComments(ids);\n }\n\n selectComment(id) {\n this.#sidebar.selectComment(null, id);\n }\n\n addComment(annotation) {\n this.#sidebar.addComment(annotation);\n }\n\n updateComment(annotation) {\n this.#sidebar.updateComment(annotation);\n }\n\n toggleCommentPopup(editor, isSelected, visibility, isEditable) {\n if (isSelected) {\n this.selectComment(editor.uid);\n }\n this.#popup.toggle(editor, isSelected, visibility, isEditable);\n }\n\n destroyPopup() {\n this.#popup.destroy();\n }\n\n updatePopupColor(editor) {\n this.#popup.updateColor(editor);\n }\n\n showDialog(uiManager, editor, posX, posY, options) {\n return this.#dialog.open(uiManager, editor, posX, posY, options);\n }\n\n makeCommentColor(color, opacity) {\n return CommentManager._makeCommentColor(color, opacity);\n }\n\n static _makeCommentColor(color, opacity) {\n return this.#hasForcedColors\n ? null\n : findContrastColor(\n applyOpacity(...color, opacity ?? 1),\n CSSConstants.commentForegroundColor\n );\n }\n\n destroy() {\n this.#dialog.destroy();\n this.#sidebar.hide();\n this.#popup.destroy();\n }\n}\n\nclass CommentSidebar {\n #annotations = null;\n\n #eventBus;\n\n #boundCommentClick = this.#commentClick.bind(this);\n\n #boundCommentKeydown = this.#commentKeydown.bind(this);\n\n #sidebar;\n\n #closeButton;\n\n #commentsList;\n\n #commentCount;\n\n #dateFormat;\n\n #sidebarTitle;\n\n #learnMoreUrl;\n\n #linkService;\n\n #popup;\n\n #elementsToAnnotations = null;\n\n #idsToElements = null;\n\n #uiManager = null;\n\n #minWidth = 0;\n\n #maxWidth = 0;\n\n #initialWidth = 0;\n\n #width = 0;\n\n #ltr;\n\n constructor(\n {\n learnMoreUrl,\n sidebar,\n sidebarResizer,\n commentsList,\n commentCount,\n sidebarTitle,\n closeButton,\n commentToolbarButton,\n },\n eventBus,\n linkService,\n popup,\n dateFormat,\n ltr\n ) {\n this.#sidebar = sidebar;\n this.#sidebarTitle = sidebarTitle;\n this.#commentsList = commentsList;\n this.#commentCount = commentCount;\n this.#learnMoreUrl = learnMoreUrl;\n this.#linkService = linkService;\n this.#closeButton = closeButton;\n this.#popup = popup;\n this.#dateFormat = dateFormat;\n this.#ltr = ltr;\n this.#eventBus = eventBus;\n\n const style = window.getComputedStyle(sidebar);\n this.#minWidth = parseFloat(style.getPropertyValue(\"--sidebar-min-width\"));\n this.#maxWidth = parseFloat(style.getPropertyValue(\"--sidebar-max-width\"));\n this.#initialWidth = this.#width = parseFloat(\n style.getPropertyValue(\"--sidebar-width\")\n );\n\n this.#makeSidebarResizable(sidebarResizer);\n closeButton.addEventListener(\"click\", () => {\n eventBus.dispatch(\"switchannotationeditormode\", {\n source: this,\n mode: AnnotationEditorType.NONE,\n });\n });\n const keyDownCallback = e => {\n if (e.key === \"ArrowDown\" || e.key === \"Home\" || e.key === \"F6\") {\n this.#commentsList.firstElementChild.focus();\n stopEvent(e);\n } else if (e.key === \"ArrowUp\" || e.key === \"End\") {\n this.#commentsList.lastElementChild.focus();\n stopEvent(e);\n }\n };\n commentToolbarButton.addEventListener(\"keydown\", keyDownCallback);\n sidebar.addEventListener(\"keydown\", keyDownCallback);\n this.#sidebar.hidden = true;\n }\n\n #makeSidebarResizable(resizer) {\n let pointerMoveAC;\n const cancelResize = () => {\n this.#width = MathClamp(this.#width, this.#minWidth, this.#maxWidth);\n this.#sidebar.classList.remove(\"resizing\");\n pointerMoveAC?.abort();\n pointerMoveAC = null;\n };\n resizer.addEventListener(\"pointerdown\", e => {\n if (pointerMoveAC) {\n cancelResize();\n return;\n }\n const { clientX } = e;\n stopEvent(e);\n let prevX = clientX;\n pointerMoveAC = new AbortController();\n const { signal } = pointerMoveAC;\n const sign = this.#ltr ? -1 : 1;\n const sidebar = this.#sidebar;\n const sidebarStyle = sidebar.style;\n sidebar.classList.add(\"resizing\");\n const parentStyle = sidebar.parentElement.style;\n parentStyle.minWidth = 0;\n window.addEventListener(\"contextmenu\", noContextMenu, { signal });\n window.addEventListener(\n \"pointermove\",\n ev => {\n if (!pointerMoveAC) {\n return;\n }\n stopEvent(ev);\n const { clientX: x } = ev;\n const newWidth = (this.#width += sign * (x - prevX));\n prevX = x;\n if (newWidth > this.#maxWidth || newWidth < this.#minWidth) {\n return;\n }\n sidebarStyle.width = `${newWidth.toFixed(3)}px`;\n parentStyle.insetInlineStart = `${(this.#initialWidth - newWidth).toFixed(3)}px`;\n },\n { signal, capture: true }\n );\n window.addEventListener(\"blur\", cancelResize, { signal });\n window.addEventListener(\n \"pointerup\",\n ev => {\n if (pointerMoveAC) {\n cancelResize();\n stopEvent(ev);\n }\n },\n { signal }\n );\n });\n }\n\n setUIManager(uiManager) {\n this.#uiManager = uiManager;\n }\n\n show(annotations) {\n this.#elementsToAnnotations = new WeakMap();\n this.#idsToElements = new Map();\n this.#annotations = annotations;\n annotations.sort(this.#sortComments.bind(this));\n if (annotations.length !== 0) {\n const fragment = document.createDocumentFragment();\n for (const annotation of annotations) {\n fragment.append(this.#createCommentElement(annotation));\n }\n\n this.#setCommentsCount(fragment);\n this.#commentsList.append(fragment);\n } else {\n this.#setCommentsCount();\n }\n this.#sidebar.hidden = false;\n this.#eventBus.dispatch(\"reporttelemetry\", {\n source: this,\n details: {\n type: \"commentSidebar\",\n data: { numberOfAnnotations: annotations.length },\n },\n });\n }\n\n hide() {\n this.#sidebar.hidden = true;\n this.#commentsList.replaceChildren();\n this.#elementsToAnnotations = null;\n this.#idsToElements = null;\n this.#annotations = null;\n }\n\n removeComments(ids) {\n if (ids.length === 0 || !this.#idsToElements) {\n return;\n }\n if (\n new Set(this.#idsToElements.keys()).difference(new Set(ids)).size === 0\n ) {\n this.#removeAll();\n return;\n }\n for (const id of ids) {\n this.#removeComment(id);\n }\n }\n\n focusComment(id) {\n const element = this.#idsToElements.get(id);\n if (!element) {\n return;\n }\n this.#sidebar.scrollTop = element.offsetTop - this.#sidebar.offsetTop;\n for (const el of this.#commentsList.children) {\n el.classList.toggle(\"selected\", el === element);\n }\n }\n\n updateComment(annotation) {\n if (!this.#idsToElements) {\n return;\n }\n const {\n id,\n creationDate,\n modificationDate,\n richText,\n contentsObj,\n popupRef,\n } = annotation;\n\n if (!popupRef || (!richText && !contentsObj?.str)) {\n this.#removeComment(id);\n }\n\n const element = this.#idsToElements.get(id);\n if (!element) {\n return;\n }\n const prevAnnotation = this.#elementsToAnnotations.get(element);\n let index = binarySearchFirstItem(\n this.#annotations,\n a => this.#sortComments(a, prevAnnotation) >= 0\n );\n if (index >= this.#annotations.length) {\n return;\n }\n\n this.#setDate(element.firstChild, modificationDate || creationDate);\n this.#setText(element.lastChild, richText, contentsObj);\n\n this.#annotations.splice(index, 1);\n index = binarySearchFirstItem(\n this.#annotations,\n a => this.#sortComments(a, annotation) >= 0\n );\n this.#annotations.splice(index, 0, annotation);\n if (index >= this.#commentsList.children.length) {\n this.#commentsList.append(element);\n } else {\n this.#commentsList.insertBefore(\n element,\n this.#commentsList.children[index]\n );\n }\n }\n\n #removeComment(id) {\n const element = this.#idsToElements?.get(id);\n if (!element) {\n return;\n }\n const annotation = this.#elementsToAnnotations.get(element);\n const index = binarySearchFirstItem(\n this.#annotations,\n a => this.#sortComments(a, annotation) >= 0\n );\n if (index >= this.#annotations.length) {\n return;\n }\n this.#annotations.splice(index, 1);\n element.remove();\n this.#idsToElements.delete(id);\n this.#setCommentsCount();\n }\n\n #removeAll() {\n this.#commentsList.replaceChildren();\n this.#elementsToAnnotations = new WeakMap();\n this.#idsToElements.clear();\n this.#annotations.length = 0;\n this.#setCommentsCount();\n }\n\n selectComment(element, id = null) {\n if (!this.#idsToElements) {\n return;\n }\n const hasNoElement = !element;\n element ||= this.#idsToElements.get(id);\n for (const el of this.#commentsList.children) {\n el.classList.toggle(\"selected\", el === element);\n }\n if (hasNoElement) {\n element?.scrollIntoView({ behavior: \"instant\", block: \"center\" });\n }\n }\n\n addComment(annotation) {\n if (this.#idsToElements?.has(annotation.id)) {\n return;\n }\n const { popupRef, contentsObj } = annotation;\n if (!popupRef || !contentsObj?.str) {\n return;\n }\n const commentItem = this.#createCommentElement(annotation);\n if (this.#annotations.length === 0) {\n this.#commentsList.replaceChildren(commentItem);\n this.#annotations.push(annotation);\n this.#setCommentsCount();\n return;\n }\n const index = binarySearchFirstItem(\n this.#annotations,\n a => this.#sortComments(a, annotation) >= 0\n );\n this.#annotations.splice(index, 0, annotation);\n if (index >= this.#commentsList.children.length) {\n this.#commentsList.append(commentItem);\n } else {\n this.#commentsList.insertBefore(\n commentItem,\n this.#commentsList.children[index]\n );\n }\n this.#setCommentsCount();\n }\n\n #setCommentsCount(container = this.#commentsList) {\n const count = this.#idsToElements.size;\n this.#sidebarTitle.setAttribute(\n \"data-l10n-args\",\n JSON.stringify({ count })\n );\n this.#commentCount.textContent = count;\n if (count === 0) {\n container.append(this.#createZeroCommentElement());\n }\n }\n\n #createZeroCommentElement() {\n const commentItem = document.createElement(\"li\");\n commentItem.classList.add(\"sidebarComment\", \"noComments\");\n const textDiv = document.createElement(\"div\");\n textDiv.className = \"sidebarCommentText\";\n textDiv.setAttribute(\n \"data-l10n-id\",\n \"pdfjs-editor-comments-sidebar-no-comments1\"\n );\n commentItem.append(textDiv);\n if (this.#learnMoreUrl) {\n const a = document.createElement(\"a\");\n a.setAttribute(\n \"data-l10n-id\",\n \"pdfjs-editor-comments-sidebar-no-comments-link\"\n );\n a.href = this.#learnMoreUrl;\n a.target = \"_blank\";\n a.rel = \"noopener noreferrer\";\n commentItem.append(a);\n }\n return commentItem;\n }\n\n #setDate(element, date) {\n date = PDFDateString.toDateObject(date);\n element.dateTime = date.toISOString();\n element.textContent = this.#dateFormat.format(date);\n }\n\n #setText(element, richText, contentsObj) {\n element.replaceChildren();\n const html =\n richText?.str && (!contentsObj?.str || richText.str === contentsObj.str)\n ? richText.html\n : contentsObj?.str;\n renderRichText(\n {\n html,\n dir: contentsObj?.dir || \"auto\",\n className: \"richText\",\n },\n element\n );\n }\n\n #createCommentElement(annotation) {\n const {\n id,\n creationDate,\n modificationDate,\n richText,\n contentsObj,\n color,\n opacity,\n } = annotation;\n const commentItem = document.createElement(\"li\");\n commentItem.role = \"button\";\n commentItem.className = \"sidebarComment\";\n commentItem.tabIndex = -1;\n commentItem.style.backgroundColor =\n (color && CommentManager._makeCommentColor(color, opacity)) || \"\";\n const dateDiv = document.createElement(\"time\");\n this.#setDate(dateDiv, modificationDate || creationDate);\n\n const textDiv = document.createElement(\"div\");\n textDiv.className = \"sidebarCommentText\";\n this.#setText(textDiv, richText, contentsObj);\n\n commentItem.append(dateDiv, textDiv);\n commentItem.addEventListener(\"click\", this.#boundCommentClick);\n commentItem.addEventListener(\"keydown\", this.#boundCommentKeydown);\n\n this.#elementsToAnnotations.set(commentItem, annotation);\n this.#idsToElements.set(id, commentItem);\n return commentItem;\n }\n\n async #commentClick({ currentTarget }) {\n if (currentTarget.classList.contains(\"selected\")) {\n currentTarget.classList.remove(\"selected\");\n this.#popup._hide();\n return;\n }\n const annotation = this.#elementsToAnnotations.get(currentTarget);\n if (!annotation) {\n return;\n }\n this.#popup._hide();\n const { id, pageIndex, rect } = annotation;\n const pageNumber = pageIndex + 1;\n const pageVisiblePromise =\n this.#uiManager?.waitForEditorsRendered(pageNumber);\n this.#linkService?.goToXY(pageNumber, rect[0], rect[3], {\n center: \"both\",\n });\n this.selectComment(currentTarget);\n await pageVisiblePromise;\n this.#uiManager?.selectComment(pageIndex, id);\n }\n\n #commentKeydown(e) {\n const { key, currentTarget } = e;\n switch (key) {\n case \"ArrowDown\":\n (\n currentTarget.nextElementSibling ||\n this.#commentsList.firstElementChild\n ).focus();\n stopEvent(e);\n break;\n case \"ArrowUp\":\n (\n currentTarget.previousElementSibling ||\n this.#commentsList.lastElementChild\n ).focus();\n stopEvent(e);\n break;\n case \"Home\":\n this.#commentsList.firstElementChild.focus();\n stopEvent(e);\n break;\n case \"End\":\n this.#commentsList.lastElementChild.focus();\n stopEvent(e);\n break;\n case \"Enter\":\n case \" \":\n this.#commentClick(e);\n stopEvent(e);\n break;\n case \"ShiftTab\":\n this.#closeButton.focus();\n stopEvent(e);\n break;\n }\n }\n\n #sortComments(a, b) {\n const dateA = PDFDateString.toDateObject(\n a.modificationDate || a.creationDate\n );\n const dateB = PDFDateString.toDateObject(\n b.modificationDate || b.creationDate\n );\n if (dateA !== dateB) {\n if (dateA !== null && dateB !== null) {\n return dateB - dateA;\n }\n return dateA !== null ? -1 : 1;\n }\n if (a.pageIndex !== b.pageIndex) {\n return a.pageIndex - b.pageIndex;\n }\n if (a.rect[3] !== b.rect[3]) {\n return b.rect[3] - a.rect[3];\n }\n if (a.rect[0] !== b.rect[0]) {\n return a.rect[0] - b.rect[0];\n }\n if (a.rect[1] !== b.rect[1]) {\n return b.rect[1] - a.rect[1];\n }\n if (a.rect[2] !== b.rect[2]) {\n return a.rect[2] - b.rect[2];\n }\n return a.id.localeCompare(b.id);\n }\n}\n\nclass CommentDialog {\n #dialog;\n\n #editor;\n\n #overlayManager;\n\n #previousText = \"\";\n\n #commentText = \"\";\n\n #textInput;\n\n #title;\n\n #saveButton;\n\n #uiManager;\n\n #prevDragX = 0;\n\n #prevDragY = 0;\n\n #dialogX = 0;\n\n #dialogY = 0;\n\n #isLTR;\n\n #eventBus;\n\n constructor(\n { dialog, toolbar, title, textInput, cancelButton, saveButton },\n overlayManager,\n eventBus,\n ltr\n ) {\n this.#dialog = dialog;\n this.#textInput = textInput;\n this.#overlayManager = overlayManager;\n this.#eventBus = eventBus;\n this.#saveButton = saveButton;\n this.#title = title;\n this.#isLTR = ltr;\n\n const finishBound = this.#finish.bind(this);\n dialog.addEventListener(\"close\", finishBound);\n dialog.addEventListener(\"contextmenu\", e => {\n if (e.target !== this.#textInput) {\n e.preventDefault();\n }\n });\n cancelButton.addEventListener(\"click\", finishBound);\n saveButton.addEventListener(\"click\", this.#save.bind(this));\n\n textInput.addEventListener(\"input\", () => {\n saveButton.disabled = textInput.value === this.#previousText;\n });\n\n // Make the dialog draggable.\n let pointerMoveAC;\n const cancelDrag = () => {\n dialog.classList.remove(\"dragging\");\n pointerMoveAC?.abort();\n pointerMoveAC = null;\n };\n toolbar.addEventListener(\"pointerdown\", e => {\n if (pointerMoveAC) {\n cancelDrag();\n return;\n }\n const { clientX, clientY } = e;\n stopEvent(e);\n this.#prevDragX = clientX;\n this.#prevDragY = clientY;\n pointerMoveAC = new AbortController();\n const { signal } = pointerMoveAC;\n const { innerHeight, innerWidth } = window;\n dialog.classList.add(\"dragging\");\n window.addEventListener(\n \"pointermove\",\n ev => {\n if (!pointerMoveAC) {\n return;\n }\n const { clientX: x, clientY: y } = ev;\n this.#setPosition(\n this.#dialogX + (x - this.#prevDragX) / innerWidth,\n this.#dialogY + (y - this.#prevDragY) / innerHeight\n );\n this.#prevDragX = x;\n this.#prevDragY = y;\n stopEvent(ev);\n },\n { signal }\n );\n window.addEventListener(\"blur\", cancelDrag, { signal });\n window.addEventListener(\n \"pointerup\",\n ev => {\n if (pointerMoveAC) {\n cancelDrag();\n stopEvent(ev);\n }\n },\n { signal }\n );\n });\n\n overlayManager.register(dialog);\n }\n\n async open(uiManager, editor, posX, posY, options) {\n if (editor) {\n this.#uiManager = uiManager;\n this.#editor = editor;\n }\n const {\n contentsObj: { str },\n color,\n opacity,\n } = editor.getData();\n const { style: dialogStyle } = this.#dialog;\n if (color) {\n dialogStyle.backgroundColor = CommentManager._makeCommentColor(\n color,\n opacity\n );\n dialogStyle.borderColor = Util.makeHexColor(...color);\n } else {\n dialogStyle.backgroundColor = dialogStyle.borderColor = \"\";\n }\n this.#commentText = str || \"\";\n const textInput = this.#textInput;\n textInput.value = this.#previousText = this.#commentText;\n if (str) {\n this.#title.setAttribute(\n \"data-l10n-id\",\n \"pdfjs-editor-edit-comment-dialog-title-when-editing\"\n );\n this.#saveButton.setAttribute(\n \"data-l10n-id\",\n \"pdfjs-editor-edit-comment-dialog-save-button-when-editing\"\n );\n } else {\n this.#title.setAttribute(\n \"data-l10n-id\",\n \"pdfjs-editor-edit-comment-dialog-title-when-adding\"\n );\n this.#saveButton.setAttribute(\n \"data-l10n-id\",\n \"pdfjs-editor-edit-comment-dialog-save-button-when-adding\"\n );\n }\n if (options?.height) {\n textInput.style.height = `${options.height}px`;\n }\n this.#uiManager?.removeEditListeners();\n this.#saveButton.disabled = true;\n const parentDimensions = options?.parentDimensions;\n const { innerHeight, innerWidth } = window;\n if (editor.hasDefaultPopupPosition()) {\n const { dialogWidth, dialogHeight } = this._dialogDimensions;\n if (parentDimensions) {\n if (\n this.#isLTR &&\n posX + dialogWidth >\n Math.min(parentDimensions.x + parentDimensions.width, innerWidth)\n ) {\n const buttonWidth = this.#editor.commentButtonWidth;\n posX -= dialogWidth - buttonWidth * parentDimensions.width;\n } else if (!this.#isLTR) {\n const buttonWidth =\n this.#editor.commentButtonWidth * parentDimensions.width;\n if (posX - dialogWidth < Math.max(0, parentDimensions.x)) {\n posX = Math.max(0, posX);\n } else {\n posX -= dialogWidth - buttonWidth;\n }\n }\n }\n const height = Math.max(dialogHeight, options?.height || 0);\n if (posY + height > innerHeight) {\n posY = innerHeight - height;\n }\n if (posY < 0) {\n posY = 0;\n }\n }\n\n posX = MathClamp(posX / innerWidth, 0, 1);\n posY = MathClamp(posY / innerHeight, 0, 1);\n this.#setPosition(posX, posY);\n\n await this.#overlayManager.open(this.#dialog);\n textInput.focus();\n }\n\n async #save() {\n this.#editor.comment = this.#textInput.value;\n this.#finish();\n }\n\n get _dialogDimensions() {\n const dialog = this.#dialog;\n const { style } = dialog;\n style.opacity = \"0\";\n style.display = \"block\";\n const { width, height } = dialog.getBoundingClientRect();\n style.opacity = style.display = \"\";\n return shadow(this, \"_dialogDimensions\", {\n dialogWidth: width,\n dialogHeight: height,\n });\n }\n\n #setPosition(x, y) {\n this.#dialogX = x;\n this.#dialogY = y;\n const { style } = this.#dialog;\n style.left = `${100 * x}%`;\n style.top = `${100 * y}%`;\n }\n\n #finish() {\n if (!this.#editor) {\n return;\n }\n const edited = this.#textInput.value !== this.#commentText;\n this.#eventBus.dispatch(\"reporttelemetry\", {\n source: this,\n details: {\n type: \"comment\",\n data: {\n edited,\n },\n },\n });\n\n this.#editor?.focusCommentButton();\n this.#editor = null;\n this.#textInput.value = this.#previousText = this.#commentText = \"\";\n this.#overlayManager.closeIfActive(this.#dialog);\n this.#textInput.style.height = \"\";\n this.#uiManager?.addEditListeners();\n this.#uiManager = null;\n }\n\n destroy() {\n this.#uiManager = null;\n this.#editor = null;\n this.#finish();\n }\n}\n\nclass CommentPopup {\n #buttonsContainer = null;\n\n #eventBus;\n\n #commentDialog;\n\n #dateFormat;\n\n #editor = null;\n\n #isLTR;\n\n #container = null;\n\n #text = null;\n\n #time = null;\n\n #prevDragX = 0;\n\n #prevDragY = 0;\n\n #posX = 0;\n\n #posY = 0;\n\n #previousFocusedElement = null;\n\n #selected = false;\n\n #visible = false;\n\n constructor(eventBus, dateFormat, ltr, commentDialog) {\n this.#eventBus = eventBus;\n this.#dateFormat = dateFormat;\n this.#isLTR = ltr;\n this.#commentDialog = commentDialog;\n this.sidebar = null;\n }\n\n get _popupWidth() {\n const container = this.#createPopup();\n const { style } = container;\n style.opacity = \"0\";\n style.display = \"block\";\n document.body.append(container);\n const width = container.getBoundingClientRect().width;\n container.remove();\n style.opacity = style.display = \"\";\n return shadow(this, \"_popupWidth\", width);\n }\n\n #createPopup() {\n if (this.#container) {\n return this.#container;\n }\n const container = (this.#container = document.createElement(\"div\"));\n container.className = \"commentPopup\";\n container.id = \"commentPopup\";\n container.tabIndex = -1;\n container.role = \"dialog\";\n container.ariaModal = \"false\";\n container.addEventListener(\"contextmenu\", noContextMenu);\n container.addEventListener(\"keydown\", e => {\n if (e.key === \"Escape\") {\n this.toggle(this.#editor, true, false);\n this.#previousFocusedElement?.focus();\n stopEvent(e);\n }\n });\n container.addEventListener(\"click\", () => {\n container.focus();\n });\n\n const top = document.createElement(\"div\");\n top.className = \"commentPopupTop\";\n const time = (this.#time = document.createElement(\"time\"));\n time.className = \"commentPopupTime\";\n\n const buttons = (this.#buttonsContainer = document.createElement(\"div\"));\n buttons.className = \"commentPopupButtons\";\n const edit = document.createElement(\"button\");\n edit.classList.add(\"commentPopupEdit\", \"toolbarButton\");\n edit.tabIndex = 0;\n edit.setAttribute(\"data-l10n-id\", \"pdfjs-editor-edit-comment-popup-button\");\n edit.ariaHasPopup = \"dialog\";\n edit.ariaControlsElements = [this.#commentDialog];\n const editLabel = document.createElement(\"span\");\n editLabel.setAttribute(\n \"data-l10n-id\",\n \"pdfjs-editor-edit-comment-popup-button-label\"\n );\n edit.append(editLabel);\n edit.addEventListener(\"click\", () => {\n const editor = this.#editor;\n const height = parseFloat(getComputedStyle(this.#text).height);\n this.toggle(editor, /* isSelected */ true, /* visibility */ false);\n editor.editComment({\n height,\n });\n });\n edit.addEventListener(\"contextmenu\", noContextMenu);\n\n const del = document.createElement(\"button\");\n del.classList.add(\"commentPopupDelete\", \"toolbarButton\");\n del.tabIndex = 0;\n del.setAttribute(\n \"data-l10n-id\",\n \"pdfjs-editor-delete-comment-popup-button\"\n );\n const delLabel = document.createElement(\"span\");\n delLabel.setAttribute(\n \"data-l10n-id\",\n \"pdfjs-editor-delete-comment-popup-button-label\"\n );\n del.append(delLabel);\n del.addEventListener(\"click\", () => {\n this.#eventBus.dispatch(\"reporttelemetry\", {\n source: this,\n details: {\n type: \"comment\",\n data: {\n deleted: true,\n },\n },\n });\n this.#editor.comment = null;\n this.#editor.focus();\n this.destroy();\n });\n del.addEventListener(\"contextmenu\", noContextMenu);\n buttons.append(edit, del);\n\n top.append(time, buttons);\n\n const separator = document.createElement(\"hr\");\n\n const text = (this.#text = document.createElement(\"div\"));\n text.className = \"commentPopupText\";\n container.append(top, separator, text);\n\n // Make the dialog draggable.\n let pointerMoveAC;\n const cancelDrag = () => {\n container.classList.remove(\"dragging\");\n pointerMoveAC?.abort();\n pointerMoveAC = null;\n };\n top.addEventListener(\"pointerdown\", e => {\n if (pointerMoveAC) {\n cancelDrag();\n return;\n }\n const { target, clientX, clientY } = e;\n if (buttons.contains(target)) {\n return;\n }\n stopEvent(e);\n const { width: parentWidth, height: parentHeight } =\n this.#editor.parentBoundingClientRect;\n this.#prevDragX = clientX;\n this.#prevDragY = clientY;\n pointerMoveAC = new AbortController();\n const { signal } = pointerMoveAC;\n container.classList.add(\"dragging\");\n window.addEventListener(\n \"pointermove\",\n ev => {\n if (!pointerMoveAC) {\n return; // Not dragging.\n }\n const { clientX: x, clientY: y } = ev;\n this.#setPosition(\n this.#posX + (x - this.#prevDragX) / parentWidth,\n this.#posY + (y - this.#prevDragY) / parentHeight,\n /* correctPosition = */ false\n );\n this.#prevDragX = x;\n this.#prevDragY = y;\n stopEvent(ev);\n },\n { signal }\n );\n window.addEventListener(\"blur\", cancelDrag, { signal });\n window.addEventListener(\n \"pointerup\",\n ev => {\n if (pointerMoveAC) {\n cancelDrag();\n stopEvent(ev);\n }\n },\n { signal }\n );\n });\n\n return container;\n }\n\n updateColor(editor) {\n if (this.#editor !== editor || !this.#visible) {\n return;\n }\n const { color, opacity } = editor.getData();\n this.#container.style.backgroundColor =\n (color && CommentManager._makeCommentColor(color, opacity)) || \"\";\n }\n\n _hide(editor) {\n const container = this.#createPopup();\n\n container.classList.toggle(\"hidden\", true);\n container.classList.toggle(\"selected\", false);\n (editor || this.#editor)?.setCommentButtonStates({\n selected: false,\n hasPopup: false,\n });\n this.#editor = null;\n this.#selected = false;\n this.#visible = false;\n this.#text.replaceChildren();\n this.sidebar.selectComment(null);\n }\n\n toggle(editor, isSelected, visibility = undefined, isEditable = true) {\n if (!editor) {\n this.destroy();\n return;\n }\n\n if (isSelected) {\n visibility ??=\n this.#editor === editor ? !this.#selected || !this.#visible : true;\n } else {\n if (this.#selected) {\n return;\n }\n visibility ??= !this.#visible;\n }\n\n if (!visibility) {\n this._hide(editor);\n return;\n }\n\n this.#visible = true;\n if (this.#editor !== editor) {\n this.#editor?.setCommentButtonStates({\n selected: false,\n hasPopup: false,\n });\n }\n\n const container = this.#createPopup();\n this.#buttonsContainer.classList.toggle(\"hidden\", !isEditable);\n container.classList.toggle(\"hidden\", false);\n container.classList.toggle(\"selected\", isSelected);\n this.#selected = isSelected;\n this.#editor = editor;\n editor.setCommentButtonStates({\n selected: isSelected,\n hasPopup: true,\n });\n\n const {\n contentsObj,\n richText,\n creationDate,\n modificationDate,\n color,\n opacity,\n } = editor.getData();\n container.style.backgroundColor =\n (color && CommentManager._makeCommentColor(color, opacity)) || \"\";\n this.#text.replaceChildren();\n const html =\n richText?.str && (!contentsObj?.str || richText.str === contentsObj.str)\n ? richText.html\n : contentsObj?.str;\n if (html) {\n renderRichText(\n {\n html,\n dir: contentsObj?.dir || \"auto\",\n className: \"richText\",\n },\n this.#text\n );\n }\n this.#time.textContent = this.#dateFormat.format(\n PDFDateString.toDateObject(modificationDate || creationDate)\n );\n this.#setPosition(\n ...editor.commentPopupPosition,\n /* correctPosition = */ editor.hasDefaultPopupPosition()\n );\n editor.elementBeforePopup.after(container);\n container.addEventListener(\n \"focus\",\n ({ relatedTarget }) => {\n this.#previousFocusedElement = relatedTarget;\n },\n { once: true }\n );\n if (isSelected) {\n setTimeout(() => container.focus(), 0);\n }\n }\n\n #setPosition(x, y, correctPosition) {\n if (!correctPosition) {\n this.#editor.commentPopupPosition = [x, y];\n } else {\n const parentRect = this.#editor.parentBoundingClientRect;\n const widthRatio = this._popupWidth / parentRect.width;\n if (\n (this.#isLTR && x + widthRatio > 1) ||\n (!this.#isLTR && x - widthRatio >= 0)\n ) {\n const buttonWidth = this.#editor.commentButtonWidth;\n x -= widthRatio - buttonWidth;\n }\n const margin = 0.01;\n if (this.#isLTR) {\n x = Math.max(x, -parentRect.x / parentRect.width + margin);\n } else {\n x = Math.min(\n x,\n (window.innerWidth - parentRect.x) / parentRect.width -\n widthRatio -\n margin\n );\n }\n }\n this.#posX = x;\n this.#posY = y;\n const { style } = this.#container;\n style.left = `${100 * x}%`;\n style.top = `${100 * y}%`;\n }\n\n destroy() {\n this._hide();\n this.#container?.remove();\n this.#container = this.#text = this.#time = null;\n this.#prevDragX = this.#prevDragY = Infinity;\n this.#posX = this.#posY = 0;\n this.#previousFocusedElement = null;\n }\n}\n\nexport { CommentManager };\n","/* Copyright 2013 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./interfaces\").IDownloadManager} IDownloadManager */\n\nimport { createValidAbsoluteUrl, isPdfFile } from \"pdfjs-lib\";\n\nif (typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"CHROME || GENERIC\")) {\n throw new Error(\n 'Module \"pdfjs-web/download_manager\" shall not be used ' +\n \"outside CHROME and GENERIC builds.\"\n );\n}\n\nfunction download(blobUrl, filename) {\n const a = document.createElement(\"a\");\n if (!a.click) {\n throw new Error('DownloadManager: \"a.click()\" is not supported.');\n }\n a.href = blobUrl;\n a.target = \"_parent\";\n // Use a.download if available. This increases the likelihood that\n // the file is downloaded instead of opened by another PDF plugin.\n if (\"download\" in a) {\n a.download = filename;\n }\n // must be in the document for recent Firefox versions,\n // otherwise .click() is ignored.\n (document.body || document.documentElement).append(a);\n a.click();\n a.remove();\n}\n\n/**\n * @implements {IDownloadManager}\n */\nclass DownloadManager {\n #openBlobUrls = new WeakMap();\n\n downloadData(data, filename, contentType) {\n const blobUrl = URL.createObjectURL(\n new Blob([data], { type: contentType })\n );\n download(blobUrl, filename);\n }\n\n /**\n * @returns {boolean} Indicating if the data was opened.\n */\n openOrDownloadData(data, filename, dest = null) {\n const isPdfData = isPdfFile(filename);\n const contentType = isPdfData ? \"application/pdf\" : \"\";\n\n if (\n (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"COMPONENTS\")) &&\n isPdfData\n ) {\n let blobUrl = this.#openBlobUrls.get(data);\n if (!blobUrl) {\n blobUrl = URL.createObjectURL(new Blob([data], { type: contentType }));\n this.#openBlobUrls.set(data, blobUrl);\n }\n let viewerUrl;\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n // The current URL is the viewer, let's use it and append the file.\n viewerUrl = \"?file=\" + encodeURIComponent(blobUrl + \"#\" + filename);\n } else if (PDFJSDev.test(\"CHROME\")) {\n // In the Chrome extension, the URL is rewritten using the history API\n // in viewer.js, so an absolute URL must be generated.\n viewerUrl =\n // eslint-disable-next-line no-undef\n chrome.runtime.getURL(\"/content/web/viewer.html\") +\n \"?file=\" +\n encodeURIComponent(blobUrl + \"#\" + filename);\n }\n if (dest) {\n viewerUrl += `#${escape(dest)}`;\n }\n\n try {\n window.open(viewerUrl);\n return true;\n } catch (ex) {\n console.error(\"openOrDownloadData:\", ex);\n // Release the `blobUrl`, since opening it failed, and fallback to\n // downloading the PDF file.\n URL.revokeObjectURL(blobUrl);\n this.#openBlobUrls.delete(data);\n }\n }\n\n this.downloadData(data, filename, contentType);\n return false;\n }\n\n download(data, url, filename) {\n let blobUrl;\n if (data) {\n blobUrl = URL.createObjectURL(\n new Blob([data], { type: \"application/pdf\" })\n );\n } else {\n if (!createValidAbsoluteUrl(url, \"http://example.com\")) {\n console.error(`download - not a valid URL: ${url}`);\n return;\n }\n blobUrl = url + \"#pdfjs.action=download\";\n }\n download(blobUrl, filename);\n }\n}\n\nexport { DownloadManager };\n","/* Copyright 2024 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { noContextMenu } from \"pdfjs-lib\";\n\nclass EditorUndoBar {\n #closeButton = null;\n\n #container;\n\n #eventBus = null;\n\n #focusTimeout = null;\n\n #initController = null;\n\n isOpen = false;\n\n #message;\n\n #showController = null;\n\n #undoButton;\n\n static #l10nMessages = Object.freeze({\n highlight: \"pdfjs-editor-undo-bar-message-highlight\",\n freetext: \"pdfjs-editor-undo-bar-message-freetext\",\n stamp: \"pdfjs-editor-undo-bar-message-stamp\",\n ink: \"pdfjs-editor-undo-bar-message-ink\",\n signature: \"pdfjs-editor-undo-bar-message-signature\",\n _multiple: \"pdfjs-editor-undo-bar-message-multiple\",\n });\n\n constructor({ container, message, undoButton, closeButton }, eventBus) {\n this.#container = container;\n this.#message = message;\n this.#undoButton = undoButton;\n this.#closeButton = closeButton;\n this.#eventBus = eventBus;\n }\n\n destroy() {\n this.#initController?.abort();\n this.#initController = null;\n\n this.hide();\n }\n\n show(undoAction, messageData) {\n if (!this.#initController) {\n this.#initController = new AbortController();\n const opts = { signal: this.#initController.signal };\n const boundHide = this.hide.bind(this);\n\n this.#container.addEventListener(\"contextmenu\", noContextMenu, opts);\n this.#closeButton.addEventListener(\"click\", boundHide, opts);\n this.#eventBus._on(\"beforeprint\", boundHide, opts);\n this.#eventBus._on(\"download\", boundHide, opts);\n }\n\n this.hide();\n\n if (typeof messageData === \"string\") {\n this.#message.setAttribute(\n \"data-l10n-id\",\n EditorUndoBar.#l10nMessages[messageData]\n );\n } else {\n this.#message.setAttribute(\n \"data-l10n-id\",\n EditorUndoBar.#l10nMessages._multiple\n );\n this.#message.setAttribute(\n \"data-l10n-args\",\n JSON.stringify({ count: messageData })\n );\n }\n this.isOpen = true;\n this.#container.hidden = false;\n\n this.#showController = new AbortController();\n\n this.#undoButton.addEventListener(\n \"click\",\n () => {\n undoAction();\n this.hide();\n },\n { signal: this.#showController.signal }\n );\n\n // Without the setTimeout, VoiceOver will read out the document title\n // instead of the popup label.\n this.#focusTimeout = setTimeout(() => {\n this.#container.focus();\n this.#focusTimeout = null;\n }, 100);\n }\n\n hide() {\n if (!this.isOpen) {\n return;\n }\n this.isOpen = false;\n this.#container.hidden = true;\n\n this.#showController?.abort();\n this.#showController = null;\n\n if (this.#focusTimeout) {\n clearTimeout(this.#focusTimeout);\n this.#focusTimeout = null;\n }\n }\n}\n\nexport { EditorUndoBar };\n","/* Copyright 2014 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nclass OverlayManager {\n #overlays = new WeakMap();\n\n #active = null;\n\n get active() {\n return this.#active;\n }\n\n /**\n * @param {HTMLDialogElement} dialog - The overlay's DOM element.\n * @param {boolean} [canForceClose] - Indicates if opening the overlay closes\n * an active overlay. The default is `false`.\n * @returns {Promise} A promise that is resolved when the overlay has been\n * registered.\n */\n async register(dialog, canForceClose = false) {\n if (typeof dialog !== \"object\") {\n throw new Error(\"Not enough parameters.\");\n } else if (this.#overlays.has(dialog)) {\n throw new Error(\"The overlay is already registered.\");\n }\n this.#overlays.set(dialog, { canForceClose });\n\n dialog.addEventListener(\"cancel\", ({ target }) => {\n if (this.#active === target) {\n this.#active = null;\n }\n });\n }\n\n /**\n * @param {HTMLDialogElement} dialog - The overlay's DOM element.\n * @returns {Promise} A promise that is resolved when the overlay has been\n * opened.\n */\n async open(dialog) {\n if (!this.#overlays.has(dialog)) {\n throw new Error(\"The overlay does not exist.\");\n } else if (this.#active) {\n if (this.#active === dialog) {\n throw new Error(\"The overlay is already active.\");\n } else if (this.#overlays.get(dialog).canForceClose) {\n await this.close();\n } else {\n throw new Error(\"Another overlay is currently active.\");\n }\n }\n this.#active = dialog;\n dialog.showModal();\n }\n\n /**\n * @param {HTMLDialogElement} dialog - The overlay's DOM element.\n * @returns {Promise} A promise that is resolved when the overlay has been\n * closed.\n */\n async close(dialog = this.#active) {\n if (!this.#overlays.has(dialog)) {\n throw new Error(\"The overlay does not exist.\");\n } else if (!this.#active) {\n throw new Error(\"The overlay is currently not active.\");\n } else if (this.#active !== dialog) {\n throw new Error(\"Another overlay is currently active.\");\n }\n dialog.close();\n this.#active = null;\n }\n\n /**\n * @param {HTMLDialogElement} dialog - The overlay's DOM element.\n * @returns {Promise} A promise that is resolved when the overlay has been\n * closed.\n */\n async closeIfActive(dialog) {\n if (this.#active === dialog) {\n await this.close(dialog);\n }\n }\n}\n\nexport { OverlayManager };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./overlay_manager.js\").OverlayManager} OverlayManager */\n\nimport { PasswordResponses } from \"pdfjs-lib\";\n\n/**\n * @typedef {Object} PasswordPromptOptions\n * @property {HTMLDialogElement} dialog - The overlay's DOM element.\n * @property {HTMLParagraphElement} label - Label containing instructions for\n * entering the password.\n * @property {HTMLInputElement} input - Input field for entering the password.\n * @property {HTMLButtonElement} submitButton - Button for submitting the\n * password.\n * @property {HTMLButtonElement} cancelButton - Button for cancelling password\n * entry.\n */\n\nclass PasswordPrompt {\n #activeCapability = null;\n\n #updateCallback = null;\n\n #reason = null;\n\n /**\n * @param {PasswordPromptOptions} options\n * @param {OverlayManager} overlayManager - Manager for the viewer overlays.\n * @param {boolean} [isViewerEmbedded] - If the viewer is embedded, in e.g.\n * an + + + + + diff --git a/fs-framework/fs-preview/src/main/resources/templates/preview/video.html b/fs-framework/fs-preview/src/main/resources/templates/preview/video.html new file mode 100644 index 0000000000000000000000000000000000000000..c08ea2f29dc1041d718628f27098da810337346f --- /dev/null +++ b/fs-framework/fs-preview/src/main/resources/templates/preview/video.html @@ -0,0 +1,237 @@ + + + + + 视频预览 + + + +
    + 视频文件名 + +
    + +
    +
    +
    +
    正在加载视频...
    +
    + +
    +
    视频加载失败
    +
    视频可能已被删除或无法访问
    +
    + + + +
    + + + + + diff --git a/fs-framework/fs-storage-plugin/storage-plugin-aliyunoss/src/main/java/com/xddcodec/fs/storage/plugin/aliyunoss/AliyunOssStorageServiceImpl.java b/fs-framework/fs-storage-plugin/storage-plugin-aliyunoss/src/main/java/com/xddcodec/fs/storage/plugin/aliyunoss/AliyunOssStorageServiceImpl.java index d9af261328474cfaa14d88c85c7ce7ff014e68b9..7ad066330a159a6695c39d23a07c4e8cce74ff3e 100644 --- a/fs-framework/fs-storage-plugin/storage-plugin-aliyunoss/src/main/java/com/xddcodec/fs/storage/plugin/aliyunoss/AliyunOssStorageServiceImpl.java +++ b/fs-framework/fs-storage-plugin/storage-plugin-aliyunoss/src/main/java/com/xddcodec/fs/storage/plugin/aliyunoss/AliyunOssStorageServiceImpl.java @@ -82,7 +82,6 @@ public class AliyunOssStorageServiceImpl extends AbstractStorageOperationService DefaultCredentialProvider provider = new DefaultCredentialProvider(aliyunOssConfig.getAccessKey(), aliyunOssConfig.getSecretKey()); ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration(); - clientBuilderConfiguration.setSignatureVersion(SignVersion.V4); this.ossClient = OSSClientBuilder.create() .credentialsProvider(provider) .clientConfiguration(clientBuilderConfiguration) @@ -196,6 +195,13 @@ public class AliyunOssStorageServiceImpl extends AbstractStorageOperationService } } + @Override + public InputStream getFileStream(String objectKey) { + GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, objectKey); + OSSObject ossObject = ossClient.getObject(getObjectRequest); + return ossObject.getObjectContent(); + } + @Override public boolean isFileExist(String objectKey) { ensureNotPrototype(); diff --git a/fs-framework/fs-storage-plugin/storage-plugin-core/src/main/java/com/xddcodec/fs/storage/plugin/core/IStorageOperationService.java b/fs-framework/fs-storage-plugin/storage-plugin-core/src/main/java/com/xddcodec/fs/storage/plugin/core/IStorageOperationService.java index a64a3bc0cc30e5397325f376377bfdfef5b4752c..e627afc72de128c6c2fbb2308a101566cc6de55f 100644 --- a/fs-framework/fs-storage-plugin/storage-plugin-core/src/main/java/com/xddcodec/fs/storage/plugin/core/IStorageOperationService.java +++ b/fs-framework/fs-storage-plugin/storage-plugin-core/src/main/java/com/xddcodec/fs/storage/plugin/core/IStorageOperationService.java @@ -84,6 +84,14 @@ public interface IStorageOperationService extends Closeable { */ String getFileUrl(String objectKey, Integer expireSeconds); + /** + * 获取文件流 + * + * @param objectKey + * @return + */ + InputStream getFileStream(String objectKey); + /** * 检查文件是否存在 * diff --git a/fs-framework/fs-storage-plugin/storage-plugin-cos/pom.xml b/fs-framework/fs-storage-plugin/storage-plugin-cos/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..08c55234595800e7fbb9065484589609147c83ad --- /dev/null +++ b/fs-framework/fs-storage-plugin/storage-plugin-cos/pom.xml @@ -0,0 +1,29 @@ + + + 4.0.0 + + com.xddcodec.fs + fs-storage-plugin + ${revision} + + storage-plugin-cos + + + storage-plugin-cos - 存储插件-Cos + + + + + + com.xddcodec.fs + storage-plugin-core + + + + com.qcloud + cos_api + + + + diff --git a/fs-framework/fs-storage-plugin/storage-plugin-cos/src/main/java/com/xddcodec/fs/storage/plugin/cos/CosStorageOperationService.java b/fs-framework/fs-storage-plugin/storage-plugin-cos/src/main/java/com/xddcodec/fs/storage/plugin/cos/CosStorageOperationService.java new file mode 100644 index 0000000000000000000000000000000000000000..7146df36c949b541601a4c411519da6ef467af10 --- /dev/null +++ b/fs-framework/fs-storage-plugin/storage-plugin-cos/src/main/java/com/xddcodec/fs/storage/plugin/cos/CosStorageOperationService.java @@ -0,0 +1,136 @@ +package com.xddcodec.fs.storage.plugin.cos; + +import com.qcloud.cos.ClientConfig; +import com.qcloud.cos.auth.BasicCOSCredentials; +import com.qcloud.cos.auth.COSCredentials; +import com.qcloud.cos.exception.CosClientException; +import com.qcloud.cos.exception.CosServiceException; +import com.qcloud.cos.http.HttpProtocol; +import com.qcloud.cos.model.ObjectMetadata; +import com.qcloud.cos.model.PutObjectRequest; +import com.qcloud.cos.region.Region; +import com.xddcodec.fs.framework.common.enums.StoragePlatformIdentifierEnum; +import com.xddcodec.fs.framework.common.exception.StorageConfigException; +import com.xddcodec.fs.framework.common.exception.StorageOperationException; +import com.xddcodec.fs.storage.plugin.core.AbstractStorageOperationService; +import com.xddcodec.fs.storage.plugin.core.config.StorageConfig; +import com.qcloud.cos.COSClient; +import com.xddcodec.fs.storage.plugin.cos.config.CosConfig; +import lombok.extern.slf4j.Slf4j; + +import java.io.InputStream; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * 腾讯云 OSS 存储插件实现 + */ +@Slf4j +public class CosStorageOperationService extends AbstractStorageOperationService { + + private COSClient cosClient; + + private String bucketName; + + @SuppressWarnings("unused") + public CosStorageOperationService() { + super(); + } + + @SuppressWarnings("unused") + public CosStorageOperationService(StorageConfig config) { + super(config); + } + + @Override + public String getPlatformIdentifier() { + return StoragePlatformIdentifierEnum.COS.getIdentifier(); + } + + @Override + protected void validateConfig(StorageConfig config) { + + } + + @Override + protected void initialize(StorageConfig config) { + try { + CosConfig cosConfig = config.toObject(CosConfig.class); + COSCredentials cred = new BasicCOSCredentials(cosConfig.getAccessKey(), cosConfig.getSecretKey()); + Region region = new Region(cosConfig.getRegion()); + ClientConfig clientConfig = new ClientConfig(region); + clientConfig.setHttpProtocol(HttpProtocol.https); + this.cosClient = new COSClient(cred, clientConfig); + this.bucketName = cosConfig.getBucket(); + log.info("{} 腾讯云 COS 客户端初始化成功: bucket={}", getLogPrefix(), this.bucketName); + } catch (StorageConfigException e) { + // 重新抛出配置异常 + throw e; + } catch (Exception e) { + log.error("腾讯云 COS 初始化失败: {}", e.getMessage(), e); + throw new StorageConfigException("当前存储平台配置错误:客户端初始化失败"); + } + + } + + @Override + public void uploadFile(InputStream inputStream, String objectKey) { + ensureNotPrototype(); + try { + ObjectMetadata objectMetadata = new ObjectMetadata(); + PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectKey, inputStream, objectMetadata); + cosClient.putObject(putObjectRequest); + log.debug("{} 文件上传成功: objectKey={}", getLogPrefix(), objectKey); + } catch (Exception e) { + log.error("{} 文件上传失败: objectKey={}", getLogPrefix(), objectKey, e); + throw new StorageOperationException("阿里云OSS文件上传失败: " + e.getMessage(), e); + } + } + + @Override + public InputStream downloadFile(String objectKey) { + return null; + } + + @Override + public void deleteFile(String objectKey) { + + } + + @Override + public String getFileUrl(String objectKey, Integer expireSeconds) { + return ""; + } + + @Override + public boolean isFileExist(String objectKey) { + ensureNotPrototype(); + return cosClient.doesObjectExist(bucketName, objectKey); + } + + @Override + public String initiateMultipartUpload(String objectKey, String mimeType) { + return ""; + } + + @Override + public String uploadPart(String objectKey, String uploadId, int partNumber, long partSize, InputStream partInputStream) { + return ""; + } + + @Override + public Set listParts(String objectKey, String uploadId) { + return Set.of(); + } + + @Override + public void completeMultipartUpload(String objectKey, String uploadId, List> partETags) { + + } + + @Override + public void abortMultipartUpload(String objectKey, String uploadId) { + + } +} diff --git a/fs-framework/fs-storage-plugin/storage-plugin-cos/src/main/java/com/xddcodec/fs/storage/plugin/cos/config/CosConfig.java b/fs-framework/fs-storage-plugin/storage-plugin-cos/src/main/java/com/xddcodec/fs/storage/plugin/cos/config/CosConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..cfc1a709ab994ed8f68f8bf55e345ab993a87d41 --- /dev/null +++ b/fs-framework/fs-storage-plugin/storage-plugin-cos/src/main/java/com/xddcodec/fs/storage/plugin/cos/config/CosConfig.java @@ -0,0 +1,15 @@ +package com.xddcodec.fs.storage.plugin.cos.config; + +import lombok.Data; + +@Data +public class CosConfig { + + private String accessKey; + + private String secretKey; + + private String bucket; + + private String region; +} diff --git a/fs-framework/fs-storage-plugin/storage-plugin-cos/src/main/resources/META-INF/services/com.xddcodec.fs.storage.plugin.core.IStorageOperationService b/fs-framework/fs-storage-plugin/storage-plugin-cos/src/main/resources/META-INF/services/com.xddcodec.fs.storage.plugin.core.IStorageOperationService new file mode 100644 index 0000000000000000000000000000000000000000..95a25625e3ca1fefcee517f2637c158b0d11d6f8 --- /dev/null +++ b/fs-framework/fs-storage-plugin/storage-plugin-cos/src/main/resources/META-INF/services/com.xddcodec.fs.storage.plugin.core.IStorageOperationService @@ -0,0 +1 @@ +com.xddcodec.fs.storage.plugin.cos.CosStorageOperationService diff --git a/fs-framework/fs-storage-plugin/storage-plugin-local/src/main/java/com/xddcodec/fs/storage/plugin/local/LocalStorageOperationService.java b/fs-framework/fs-storage-plugin/storage-plugin-local/src/main/java/com/xddcodec/fs/storage/plugin/local/LocalStorageOperationService.java index 547076e14164865d49327fd72144233b36f0c26a..5a378d1448c55684346a0132c2f5bdab8f497011 100644 --- a/fs-framework/fs-storage-plugin/storage-plugin-local/src/main/java/com/xddcodec/fs/storage/plugin/local/LocalStorageOperationService.java +++ b/fs-framework/fs-storage-plugin/storage-plugin-local/src/main/java/com/xddcodec/fs/storage/plugin/local/LocalStorageOperationService.java @@ -179,6 +179,45 @@ public class LocalStorageOperationService extends AbstractStorageOperationServic return baseUrl + "/" + normalizedObjectKey; } + @Override + public InputStream getFileStream(String objectKey) { + ensureNotPrototype(); + try { + String fullPath = resolveFullPath(objectKey); + File file = new File(fullPath); + // 检查文件是否存在 + if (!file.exists()) { + log.error("{} 文件不存在: objectKey={}, fullPath={}", + getLogPrefix(), objectKey, fullPath); + throw new StorageOperationException("文件不存在: " + objectKey); + } + // 检查是否为文件(不是目录) + if (!file.isFile()) { + log.error("{} 路径不是文件: objectKey={}, fullPath={}", + getLogPrefix(), objectKey, fullPath); + throw new StorageOperationException("路径不是文件: " + objectKey); + } + // 检查文件是否可读 + if (!file.canRead()) { + log.error("{} 文件不可读: objectKey={}, fullPath={}", + getLogPrefix(), objectKey, fullPath); + throw new StorageOperationException("文件不可读: " + objectKey); + } + log.debug("{} 获取文件流: objectKey={}, fileSize={} bytes", + getLogPrefix(), objectKey, file.length()); + return new BufferedInputStream(new FileInputStream(file), 8192); + } catch (FileNotFoundException e) { + log.error("{} 文件不存在: objectKey={}", getLogPrefix(), objectKey, e); + throw new StorageOperationException("文件不存在: " + objectKey, e); + } catch (SecurityException e) { + log.error("{} 文件访问权限不足: objectKey={}", getLogPrefix(), objectKey, e); + throw new StorageOperationException("文件访问权限不足: " + objectKey, e); + } catch (Exception e) { + log.error("{} 获取文件流失败: objectKey={}", getLogPrefix(), objectKey, e); + throw new StorageOperationException("获取文件流失败: " + e.getMessage(), e); + } + } + @Override public boolean isFileExist(String objectKey) { ensureNotPrototype(); diff --git a/fs-framework/fs-websocket/src/main/java/com/xddcodec/fs/fs/framework/ws/handler/UploadWebSocketHandler.java b/fs-framework/fs-websocket/src/main/java/com/xddcodec/fs/fs/framework/ws/handler/UploadWebSocketHandler.java index 5a49b01927efd11fd22c259a0d7ea7df92ab4d54..196f0c82b12e1a5c9cfe979eea52588f2e97c232 100644 --- a/fs-framework/fs-websocket/src/main/java/com/xddcodec/fs/fs/framework/ws/handler/UploadWebSocketHandler.java +++ b/fs-framework/fs-websocket/src/main/java/com/xddcodec/fs/fs/framework/ws/handler/UploadWebSocketHandler.java @@ -18,13 +18,17 @@ import java.nio.channels.ClosedChannelException; import java.util.Objects; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArraySet; @Component @Slf4j public class UploadWebSocketHandler extends TextWebSocketHandler { - // 存储 userId -> WebSocketSession 映射 - private final ConcurrentHashMap sessions = new ConcurrentHashMap<>(); + /** + * 存储 userId -> Session集合 的映射 + * 使用 CopyOnWriteArraySet 保证并发读写安全,适合读多写少(推送多,连接少)的场景 + */ + private final ConcurrentHashMap> sessions = new ConcurrentHashMap<>(); // 存储 taskId -> userId 映射 private final ConcurrentHashMap taskUserMap = new ConcurrentHashMap<>(); @@ -36,19 +40,13 @@ public class UploadWebSocketHandler extends TextWebSocketHandler { public void afterConnectionEstablished(@NonNull WebSocketSession session) throws Exception { String userId = getUserId(session); if (userId != null) { - // 移除旧连接(如果存在) - WebSocketSession oldSession = sessions.put(userId, session); - if (oldSession != null && oldSession.isOpen()) { - try { - oldSession.close(); - } catch (Exception e) { - log.warn("关闭旧 WebSocket 连接失败: userId={}", userId, e); - } - } + // 不再剔除旧连接,而是将新连接加入集合 + // computeIfAbsent:如果key不存在则创建新集合,存在则返回现有集合 + sessions.computeIfAbsent(userId, k -> new CopyOnWriteArraySet<>()).add(session); - log.info("WebSocket 连接建立: userId={}, sessionId={}", userId, session.getId()); + log.info("WebSocket 连接建立: userId={}, sessionId={}, 当前该用户在线窗口数={}", userId, session.getId(), sessions.get(userId).size()); - // 发送连接成功消息 + // 发送连接成功消息(只发给当前建立连接的这个窗口) sendMessageSafely(session, UploadMessage.success("连接成功")); } else { log.warn("WebSocket 连接缺少 userId 参数,关闭连接"); @@ -70,6 +68,7 @@ public class UploadWebSocketHandler extends TextWebSocketHandler { switch (command.getAction()) { case subscribe: subscribeTask(userId, command.getTaskId()); + // 响应只发给当前操作的窗口 sendMessageSafely(session, UploadMessage.success("订阅成功: " + command.getTaskId())); break; case unsubscribe: @@ -94,13 +93,21 @@ public class UploadWebSocketHandler extends TextWebSocketHandler { public void afterConnectionClosed(@NonNull WebSocketSession session, @NonNull CloseStatus status) throws Exception { String userId = getUserId(session); if (userId != null) { - // 只移除当前 session(防止误删新连接) - sessions.remove(userId, session); - - // 清理该用户的所有任务订阅 - taskUserMap.entrySet().removeIf(entry -> entry.getValue().equals(userId)); - - log.info("WebSocket 连接关闭: userId={}, status={}", userId, status); + CopyOnWriteArraySet userSessions = sessions.get(userId); + if (userSessions != null) { + // 只移除当前断开的 session + userSessions.remove(session); + log.info("WebSocket 连接关闭: userId={}, sessionId={}, 剩余窗口数={}", + userId, session.getId(), userSessions.size()); + + // 只有当该用户的所有连接都断开时,才清除用户信息和任务订阅 + if (userSessions.isEmpty()) { + sessions.remove(userId); + // 清理该用户的所有任务订阅 + taskUserMap.entrySet().removeIf(entry -> entry.getValue().equals(userId)); + log.info("用户 [{}] 所有连接已断开,清理资源", userId); + } + } } } @@ -112,12 +119,16 @@ public class UploadWebSocketHandler extends TextWebSocketHandler { String userId = getUserId(session); log.error("WebSocket 传输错误: userId={}, sessionId={}", userId, session.getId(), exception); - // 清理会话 if (userId != null) { - sessions.remove(userId, session); + CopyOnWriteArraySet userSessions = sessions.get(userId); + if (userSessions != null) { + userSessions.remove(session); + if (userSessions.isEmpty()) { + sessions.remove(userId); + } + } } - // 尝试关闭连接 try { if (session.isOpen()) { session.close(CloseStatus.SERVER_ERROR); @@ -127,8 +138,6 @@ public class UploadWebSocketHandler extends TextWebSocketHandler { } } - // ========== 私有方法 ========== - /** * 订阅任务 */ @@ -167,166 +176,101 @@ public class UploadWebSocketHandler extends TextWebSocketHandler { } /** - * 安全发送消息(捕获所有异常) + * 安全发送消息(底层方法,针对单个Session) */ - private boolean sendMessageSafely(WebSocketSession session, UploadMessage message) { + private void sendMessageSafely(WebSocketSession session, UploadMessage message) { if (session == null || !session.isOpen()) { - log.debug("会话未打开,跳过发送: sessionId={}", session != null ? session.getId() : "null"); - return false; + return; } try { + // 加锁防止多线程并发写入同一个Session导致报错 synchronized (session) { - if (!session.isOpen()) { - log.debug("会话已关闭,跳过发送: sessionId={}", session.getId()); - return false; - } - + if (!session.isOpen()) return; String json = JsonUtils.toJsonString(message); session.sendMessage(new TextMessage(Objects.requireNonNull(json))); - return true; } - } catch (ClosedChannelException e) { - log.debug("WebSocket 通道已关闭: sessionId={}", session.getId()); - return false; + } catch (ClosedChannelException ignored) { } catch (IOException e) { log.warn("发送 WebSocket 消息失败: sessionId={}, error={}", session.getId(), e.getMessage()); - return false; } catch (Exception e) { log.error("发送 WebSocket 消息异常: sessionId={}", session.getId(), e); - return false; } } /** - * 通用推送方法 + * 通用推送方法(核心修改:广播给用户的所有Session) */ private void pushMessage(String taskId, UploadMessage message) { String userId = taskUserMap.get(taskId); if (userId == null) { - log.debug("任务未订阅,跳过推送: taskId={}, type={}", taskId, message.getType()); + // 任务未被订阅,忽略 return; } - WebSocketSession session = sessions.get(userId); - if (session == null) { - log.debug("用户会话不存在,跳过推送: userId={}, taskId={}", userId, taskId); + CopyOnWriteArraySet userSessions = sessions.get(userId); + if (userSessions == null || userSessions.isEmpty()) { + log.debug("用户会话不存在,清理订阅: userId={}, taskId={}", userId, taskId); taskUserMap.remove(taskId, userId); return; } - boolean success = sendMessageSafely(session, message); - if (!success) { - log.warn("推送消息失败: userId={}, taskId={}, type={}", userId, taskId, message.getType()); - sessions.remove(userId, session); - taskUserMap.remove(taskId, userId); + // 核心修改:遍历该用户所有的 Session 进行广播 + for (WebSocketSession session : userSessions) { + sendMessageSafely(session, message); } } - // ========== 公共推送方法 ========== - - /** - * 推送初始化成功消息 - */ public void pushInitialized(String taskId) { pushMessage(taskId, UploadMessage.initialized(taskId)); - log.debug("推送初始化消息: taskId={}", taskId); } - /** - * 推送检查中消息 - */ public void pushChecking(String taskId) { pushMessage(taskId, UploadMessage.checking(taskId)); - log.debug("推送检查中消息: taskId={}", taskId); } - /** - * 推送秒传成功消息 - */ public void pushQuickUpload(String taskId, String fileId) { pushMessage(taskId, UploadMessage.quickUpload(taskId, fileId)); - // 秒传成功后清理订阅 taskUserMap.remove(taskId); - log.info("推送秒传成功消息: taskId={}, fileId={}", taskId, fileId); } - /** - * 推送准备上传消息 - */ public void pushReadyToUpload(String taskId, String uploadId) { pushMessage(taskId, UploadMessage.readyToUpload(taskId, uploadId)); - log.debug("推送准备上传消息: taskId={}, uploadId={}", taskId, uploadId); } - /** - * 推送上传进度 - */ public void pushProgress(String taskId, UploadProgressDTO progress) { pushMessage(taskId, UploadMessage.progress(taskId, progress)); } - /** - * 推送暂停消息 - */ public void pushPaused(String taskId) { pushMessage(taskId, UploadMessage.paused(taskId)); - log.info("推送暂停消息: taskId={}", taskId); } - /** - * 推送继续消息 - */ public void pushResumed(String taskId, Set uploadedChunks) { pushMessage(taskId, UploadMessage.resumed(taskId, uploadedChunks)); - log.info("推送继续消息: taskId={}, uploadedChunks={}", taskId, uploadedChunks.size()); } - /** - * 推送合并中消息 - */ public void pushMerging(String taskId) { pushMessage(taskId, UploadMessage.merging(taskId)); - log.info("推送合并中消息: taskId={}", taskId); } - /** - * 推送完成消息 - */ public void pushComplete(String taskId, String fileId) { pushMessage(taskId, UploadMessage.complete(taskId, fileId)); - // 任务完成后清理订阅 taskUserMap.remove(taskId); - log.info("推送完成消息: taskId={}, fileId={}", taskId, fileId); } - /** - * 推送正在取消消息 - */ public void pushCancelling(String taskId) { pushMessage(taskId, UploadMessage.cancelling(taskId)); - // 任务取消后清理订阅 taskUserMap.remove(taskId); - log.info("推送正在取消消息: taskId={}", taskId); } - /** - * 推送取消消息 - */ public void pushCancelled(String taskId) { pushMessage(taskId, UploadMessage.cancelled(taskId)); - // 任务取消后清理订阅 taskUserMap.remove(taskId); - log.info("推送取消消息: taskId={}", taskId); } - /** - * 推送错误消息 - */ public void pushError(String taskId, String error) { pushMessage(taskId, UploadMessage.error(taskId, error)); - // 错误发生后清理订阅 taskUserMap.remove(taskId); - log.error("推送错误消息: taskId={}, error={}", taskId, error); } -} +} \ No newline at end of file diff --git a/fs-framework/pom.xml b/fs-framework/pom.xml index c0df2ee0aab9987f02f80dbbe022c1f56fa8b274..72fa3d34669bb56830f5dda9b6e839c7fc6404d1 100644 --- a/fs-framework/pom.xml +++ b/fs-framework/pom.xml @@ -18,6 +18,7 @@ fs-common-core fs-notify fs-orm + fs-preview fs-redis fs-security fs-swagger diff --git a/fs-modules/fs-file/pom.xml b/fs-modules/fs-file/pom.xml index 03a187142b36a3484fdf5de8b7865a350dd65737..551204232e52d9aa82e30eeec201acff051cacb4 100644 --- a/fs-modules/fs-file/pom.xml +++ b/fs-modules/fs-file/pom.xml @@ -43,6 +43,10 @@ com.xddcodec.fs fs-system + + com.xddcodec.fs + fs-preview + diff --git a/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/controller/FilePreviewController.java b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/controller/FilePreviewController.java new file mode 100644 index 0000000000000000000000000000000000000000..a104d6124ff531b9e73771c05ffb1d5e650e5679 --- /dev/null +++ b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/controller/FilePreviewController.java @@ -0,0 +1,34 @@ +package com.xddcodec.fs.file.controller; + +import com.xddcodec.fs.file.preview.PreviewService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; + +@Slf4j +@Controller +@RequiredArgsConstructor +public class FilePreviewController { + + private final PreviewService previewService; + + /** + * 文件预览入口 + */ + @GetMapping("/preview/{fileId}") + public String preview(@PathVariable String fileId, Model model) { + log.info("收到预览请求: fileId={}", fileId); + + try { + return previewService.preview(fileId, model); + } catch (Exception e) { + log.error("预览过程发生未捕获异常: fileId={}", fileId, e); + model.addAttribute("errorMessage", "系统错误"); + model.addAttribute("errorDetail", "预览过程中发生了意外错误"); + return "preview/error"; + } + } +} diff --git a/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/controller/FileShareController.java b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/controller/FileShareController.java index 817f0d11ddb31923bea40997e2a27e022aad23fd..5dc82e23efd6947a7850e61eddb013ef69d61d93 100644 --- a/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/controller/FileShareController.java +++ b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/controller/FileShareController.java @@ -1,8 +1,11 @@ package com.xddcodec.fs.file.controller; import com.xddcodec.fs.file.domain.dto.CreateShareCmd; +import com.xddcodec.fs.file.domain.dto.VerifyShareCodeCmd; import com.xddcodec.fs.file.domain.qry.FileSharePageQry; +import com.xddcodec.fs.file.domain.vo.FileShareAccessRecordVO; import com.xddcodec.fs.file.domain.vo.FileShareVO; +import com.xddcodec.fs.file.service.FileShareAccessRecordService; import com.xddcodec.fs.file.service.FileShareService; import com.xddcodec.fs.framework.common.domain.PageResult; import com.xddcodec.fs.framework.common.domain.Result; @@ -13,6 +16,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.List; + @Validated @Slf4j @RestController @@ -23,12 +28,22 @@ public class FileShareController { @Autowired private FileShareService fileShareService; + @Autowired + private FileShareAccessRecordService fileShareAccessRecordService; + @GetMapping("/pages") @Operation(summary = "分页获取我的分享", description = "分页获取我的分享列表") public PageResult getMyPages(FileSharePageQry qry) { return fileShareService.getMyPages(qry); } + @GetMapping("/{shareId}/access/records") + @Operation(summary = "获取分享访问记录列表", description = "获取分享访问记录列表") + public Result> getListByShareId(@PathVariable String shareId) { + List result = fileShareAccessRecordService.getListByShareId(shareId); + return Result.ok(result); + } + @PostMapping("/create") @Operation(summary = "创建分享", description = "创建分享") public Result createDirectory(@RequestBody @Validated CreateShareCmd cmd) { @@ -42,4 +57,11 @@ public class FileShareController { fileShareService.cancelShare(id); return Result.ok(); } + + @Operation(summary = "验证提取码", description = "验证提取码") + @PostMapping("/verify/code") + public Result verifyShareCode(@RequestBody @Validated VerifyShareCodeCmd cmd) { + boolean result = fileShareService.verifyShareCode(cmd); + return Result.ok(result); + } } diff --git a/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/controller/FileStreamController.java b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/controller/FileStreamController.java new file mode 100644 index 0000000000000000000000000000000000000000..ec085be7841502b0f99bb184ede9d6435e8b097c --- /dev/null +++ b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/controller/FileStreamController.java @@ -0,0 +1,265 @@ +package com.xddcodec.fs.file.controller; + +import com.aliyun.oss.internal.Mimetypes; +import com.xddcodec.fs.file.domain.FileInfo; +import com.xddcodec.fs.file.service.FileInfoService; +import com.xddcodec.fs.framework.common.enums.FileTypeEnum; +import com.xddcodec.fs.framework.preview.config.FilePreviewConfig; +import com.xddcodec.fs.storage.facade.StorageServiceFacade; +import com.xddcodec.fs.storage.plugin.core.IStorageOperationService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.io.InputStreamResource; +import org.springframework.core.io.Resource; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +@Slf4j +@RestController +@RequestMapping("/api/file/stream") +@RequiredArgsConstructor +public class FileStreamController { + + private final FileInfoService fileInfoService; + private final StorageServiceFacade storageServiceFacade; + private final FilePreviewConfig previewConfig; + + @GetMapping("/preview/{fileId}") + public ResponseEntity preview( + @PathVariable String fileId, + @RequestHeader(value = "Range", required = false) String rangeHeader) { + + FileInfo file = fileInfoService.getById(fileId); + if (file == null) { + return ResponseEntity.notFound().build(); + } + + // 检查文件大小限制 + if (file.getSize() > previewConfig.getMaxFileSize()) { + log.warn("文件过大,拒绝预览: fileId={}, size={}MB", fileId, file.getSize() / 1024 / 1024); + return ResponseEntity.status(HttpStatus.PAYLOAD_TOO_LARGE) + .body("文件过大,无法预览"); + } + + if (rangeHeader != null && isMediaFile(file.getSuffix())) { + return streamWithRange(file, rangeHeader); + } else if (file.getSize() > previewConfig.getSmallFileSize()) { + return streamFullFile(file); + } else { + return directTransfer(file); + } + } + + private ResponseEntity directTransfer(FileInfo file) { + try { + IStorageOperationService storage = storageServiceFacade + .getStorageService(file.getStoragePlatformSettingId()); + + byte[] fileBytes; + try (InputStream in = storage.getFileStream(file.getObjectKey())) { + fileBytes = in.readAllBytes(); + } + + return ResponseEntity.ok() + .headers(buildHeaders(file, fileBytes.length)) + .body(fileBytes); + } catch (Exception e) { + log.error("直接传输失败: {}", file.getDisplayName(), e); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); + } + } + + private ResponseEntity streamFullFile(FileInfo file) { + InputStream inputStream = null; + try { + IStorageOperationService storage = storageServiceFacade + .getStorageService(file.getStoragePlatformSettingId()); + + // 获取输入流 + inputStream = storage.getFileStream(file.getObjectKey()); + if (inputStream == null) { + log.error("无法获取文件流: {}", file.getDisplayName()); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); + } + + // 包装为 InputStreamResource(Spring会在响应完成后自动关闭) + InputStreamResource resource = new InputStreamResource(inputStream) { + // 确保资源可以被正确关闭 + @Override + public String getFilename() { + return file.getDisplayName(); + } + }; + + HttpHeaders headers = buildHeaders(file, file.getSize()); + return ResponseEntity.ok() + .headers(headers) + .contentLength(file.getSize()) + .body(resource); + } catch (Exception e) { + log.error("流式传输失败: {}", file.getDisplayName(), e); + // 异常情况下手动关闭流 + if (inputStream != null) { + try { + inputStream.close(); + } catch (IOException ex) { + log.error("关闭输入流失败", ex); + } + } + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); + } + } + + private ResponseEntity streamWithRange( + FileInfo file, String rangeHeader) { + + long fileSize = file.getSize(); + long[] range = parseRange(rangeHeader, fileSize); + long start = range[0]; + long end = range[1]; + long contentLength = end - start + 1; + + // 限制单次Range请求大小,防止内存溢出 + if (contentLength > previewConfig.getMaxRangeSize()) { + log.warn("Range请求过大: fileId={}, requestSize={}MB", + file.getId(), contentLength / 1024 / 1024); + // 自动调整end,限制在maxRangeSize内 + end = start + previewConfig.getMaxRangeSize() - 1; + contentLength = previewConfig.getMaxRangeSize(); + } + + try { + IStorageOperationService storage = storageServiceFacade + .getStorageService(file.getStoragePlatformSettingId()); + + // 读取指定范围的数据 + byte[] rangeData = new byte[(int) contentLength]; + try (InputStream in = storage.getFileStream(file.getObjectKey())) { + skipBytes(in, start); + int totalRead = 0; + while (totalRead < contentLength) { + int bytesRead = in.read(rangeData, totalRead, (int) (contentLength - totalRead)); + if (bytesRead == -1) break; + totalRead += bytesRead; + } + } + + // 包装为 InputStreamResource + InputStreamResource resource = new InputStreamResource(new ByteArrayInputStream(rangeData)); + + HttpHeaders headers = buildRangeHeaders(file, start, end, fileSize); + return ResponseEntity.status(HttpStatus.PARTIAL_CONTENT) + .headers(headers) + .contentLength(contentLength) + .body(resource); + } catch (Exception e) { + log.error("Range传输失败: {}", file.getDisplayName(), e); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); + } + } + + private void skipBytes(InputStream in, long count) throws IOException { + long skipped = 0; + while (skipped < count) { + long n = in.skip(count - skipped); + if (n > 0) { + skipped += n; + } else { + byte[] buffer = new byte[previewConfig.getBufferSize()]; + int read = in.read(buffer, 0, (int) Math.min(count - skipped, buffer.length)); + if (read <= 0) break; + skipped += read; + } + } + } + + private boolean isMediaFile(String ext) { + return FileTypeEnum.isMediaFile(ext); + } + + private long[] parseRange(String rangeHeader, long fileSize) { + long start = 0, end = fileSize - 1; + if (rangeHeader != null && rangeHeader.startsWith("bytes=")) { + Pattern pattern = Pattern.compile("bytes=(\\d*)-(\\d*)"); + Matcher matcher = pattern.matcher(rangeHeader); + if (matcher.find()) { + String startStr = matcher.group(1); + String endStr = matcher.group(2); + if (!startStr.isEmpty()) start = Long.parseLong(startStr); + if (!endStr.isEmpty()) end = Long.parseLong(endStr); + } + } + return new long[]{Math.max(0, start), Math.min(end, fileSize - 1)}; + } + + private HttpHeaders buildHeaders(FileInfo file, long contentLength) { + HttpHeaders headers = new HttpHeaders(); + + // 获取MIME类型 + String mimeType = Mimetypes.getInstance().getMimetype(file.getDisplayName()); + + // 特殊处理PDF文件,确保使用正确的MIME类型 + if (file.getSuffix() != null && file.getSuffix().equalsIgnoreCase("pdf")) { + mimeType = "application/pdf"; + } + + headers.set(HttpHeaders.CONTENT_TYPE, mimeType); + headers.setContentLength(contentLength); + + // 对于预览场景,使用inline且不带filename参数,避免浏览器触发下载 + // 只设置inline,不添加filename参数 + headers.add(HttpHeaders.CONTENT_DISPOSITION, "inline"); + + headers.add(HttpHeaders.ACCEPT_RANGES, "bytes"); + addCorsHeaders(headers); + return headers; + } + + private HttpHeaders buildRangeHeaders(FileInfo file, long start, long end, long fileSize) { + HttpHeaders headers = buildHeaders(file, end - start + 1); + headers.set(HttpHeaders.CONTENT_RANGE, + String.format("bytes %d-%d/%d", start, end, fileSize)); + return headers; + } + + private void addCorsHeaders(HttpHeaders headers) { + headers.add("Access-Control-Allow-Origin", "*"); + headers.add("Access-Control-Allow-Methods", "GET, HEAD, OPTIONS"); + headers.add("Access-Control-Expose-Headers", "Content-Range, Content-Length"); + + // 添加缓存控制,允许浏览器缓存预览内容 + headers.add(HttpHeaders.CACHE_CONTROL, "public, max-age=3600"); + + // 明确告诉浏览器不要将响应作为下载处理 + headers.add("X-Content-Type-Options", "nosniff"); + + // 防止IDM等下载工具拦截的关键头部 + // 设置为document类型,让下载工具认为这是网页内容而不是文件 + headers.add("X-Frame-Options", "SAMEORIGIN"); + + // 添加CSP头,限制资源加载方式 + headers.add("Content-Security-Policy", "default-src 'self' 'unsafe-inline' 'unsafe-eval' data: blob:;"); + + // 明确标识这是预览内容,不是下载 + headers.add("X-Content-Purpose", "preview"); + + // 禁用下载提示 + headers.add("X-Download-Options", "noopen"); + } + + private String encodeFileName(String fileName) { + try { + return java.net.URLEncoder.encode(fileName, "UTF-8").replace("+", "%20"); + } catch (Exception e) { + return fileName; + } + } +} diff --git a/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/domain/FileShareAccessRecord.java b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/domain/FileShareAccessRecord.java new file mode 100644 index 0000000000000000000000000000000000000000..2420eb4327b2834bb357c27c0177310e9a9f61c6 --- /dev/null +++ b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/domain/FileShareAccessRecord.java @@ -0,0 +1,60 @@ +package com.xddcodec.fs.file.domain; + +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.KeyType; +import com.mybatisflex.annotation.Table; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 分享访问记录表 + * + * @Author: xddcode + * @Date: 2025/10/29 15:13 + */ +@Data +@Table("file_share_access_record") +public class FileShareAccessRecord implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 分享ID + */ + @Id(keyType = KeyType.Auto) + private String id; + + /** + * 分享ID + */ + private String shareId; + + /** + * 访问IP + */ + private String accessIp; + + /** + * 访问地址 + */ + private String accessAddress; + + /** + * 访问浏览器 + */ + private String browser; + + /** + * 访问操作系统 + */ + private String os; + + /** + * 访问时间 + */ + private LocalDateTime accessTime; +} diff --git a/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/domain/dto/CreateFileShareAccessRecordCmd.java b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/domain/dto/CreateFileShareAccessRecordCmd.java new file mode 100644 index 0000000000000000000000000000000000000000..7ee39f71216ea57b1e9ad3299b9639b5680f0780 --- /dev/null +++ b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/domain/dto/CreateFileShareAccessRecordCmd.java @@ -0,0 +1,35 @@ +package com.xddcodec.fs.file.domain.dto; + +import com.xddcodec.fs.file.domain.FileShareAccessRecord; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +@Data +@AutoMapper(target = FileShareAccessRecord.class) +public class CreateFileShareAccessRecordCmd { + + /** + * 分享ID + */ + private String shareId; + + /** + * 访问IP + */ + private String accessIp; + + /** + * 访问地址 + */ + private String accessAddress; + + /** + * 访问浏览器 + */ + private String browser; + + /** + * 访问操作系统 + */ + private String os; +} diff --git a/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/domain/dto/VerifyShareCodeCmd.java b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/domain/dto/VerifyShareCodeCmd.java new file mode 100644 index 0000000000000000000000000000000000000000..e04a84a2242eecaf8e0338914a430d95245e0a63 --- /dev/null +++ b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/domain/dto/VerifyShareCodeCmd.java @@ -0,0 +1,14 @@ +package com.xddcodec.fs.file.domain.dto; + +import jakarta.validation.constraints.NotBlank; +import lombok.Data; + +@Data +public class VerifyShareCodeCmd { + + @NotBlank(message = "分享ID不能为空") + private String shareId; + + @NotBlank(message = "分享验证码不能为空") + private String shareCode; +} diff --git a/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/domain/event/CreateFileShareAccessRecordEvent.java b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/domain/event/CreateFileShareAccessRecordEvent.java new file mode 100644 index 0000000000000000000000000000000000000000..6bc3fd797ab521de3920e756cd1e2d0d49774407 --- /dev/null +++ b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/domain/event/CreateFileShareAccessRecordEvent.java @@ -0,0 +1,21 @@ +package com.xddcodec.fs.file.domain.event; + +import com.xddcodec.fs.file.domain.dto.CreateFileShareAccessRecordCmd; +import lombok.Getter; +import org.springframework.context.ApplicationEvent; + +import java.io.Serial; + +@Getter +public class CreateFileShareAccessRecordEvent extends ApplicationEvent { + + @Serial + private static final long serialVersionUID = 1L; + + private final CreateFileShareAccessRecordCmd cmd; + + public CreateFileShareAccessRecordEvent(Object source, CreateFileShareAccessRecordCmd cmd) { + super(source); + this.cmd = cmd; + } +} diff --git a/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/domain/vo/FileRecycleVO.java b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/domain/vo/FileRecycleVO.java index c19481290b7cbee1d269ce7a30ec70550aaf4a05..f8862d69dbf379bd158a400e2663a047550c030e 100644 --- a/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/domain/vo/FileRecycleVO.java +++ b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/domain/vo/FileRecycleVO.java @@ -1,6 +1,8 @@ package com.xddcodec.fs.file.domain.vo; +import com.fasterxml.jackson.annotation.JsonFormat; import com.xddcodec.fs.file.domain.FileInfo; +import com.xddcodec.fs.framework.common.utils.DateUtils; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; @@ -43,5 +45,6 @@ public class FileRecycleVO implements Serializable { /** * 上传时间 */ + @JsonFormat(pattern = DateUtils.DATE_TIME_PATTERN) private LocalDateTime deletedTime; } diff --git a/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/domain/vo/FileShareAccessRecordVO.java b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/domain/vo/FileShareAccessRecordVO.java new file mode 100644 index 0000000000000000000000000000000000000000..739db292693696e3943857a957999e59c7f88684 --- /dev/null +++ b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/domain/vo/FileShareAccessRecordVO.java @@ -0,0 +1,55 @@ +package com.xddcodec.fs.file.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.xddcodec.fs.file.domain.FileShareAccessRecord; +import com.xddcodec.fs.framework.common.utils.DateUtils; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + +@Data +@AutoMapper(target = FileShareAccessRecord.class) +public class FileShareAccessRecordVO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 自增ID + */ + private String id; + + /** + * 分享ID + */ + private String shareId; + + /** + * 访问IP + */ + private String accessIp; + + /** + * 访问地址 + */ + private String accessAddress; + + /** + * 访问浏览器 + */ + private String browser; + + /** + * 访问操作系统 + */ + private String os; + + /** + * 访问时间 + */ + @JsonFormat(pattern = DateUtils.DATE_TIME_PATTERN) + private LocalDateTime accessTime; +} diff --git a/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/domain/vo/FileTransferTaskVO.java b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/domain/vo/FileTransferTaskVO.java index 7fd9f6b6d6268461f712e61c04c60a4873e228df..69af7efa067a1c489e2ea38292301b77c5675747 100644 --- a/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/domain/vo/FileTransferTaskVO.java +++ b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/domain/vo/FileTransferTaskVO.java @@ -1,7 +1,9 @@ package com.xddcodec.fs.file.domain.vo; +import com.fasterxml.jackson.annotation.JsonFormat; import com.xddcodec.fs.file.domain.FileTransferTask; import com.xddcodec.fs.file.enums.TransferTaskStatus; +import com.xddcodec.fs.framework.common.utils.DateUtils; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; @@ -73,9 +75,11 @@ public class FileTransferTaskVO implements Serializable { /** * 开始时间 */ + @JsonFormat(pattern = DateUtils.DATE_TIME_PATTERN) private LocalDateTime startTime; /** * 完成时间 */ + @JsonFormat(pattern = DateUtils.DATE_TIME_PATTERN) private LocalDateTime completeTime; } diff --git a/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/domain/vo/FileVO.java b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/domain/vo/FileVO.java index 75a4dd29f385deb5c99ea23af5d7ab32a817c8bf..dd161541418a872971ec538c2c893cc1d8bd77ec 100644 --- a/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/domain/vo/FileVO.java +++ b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/domain/vo/FileVO.java @@ -1,6 +1,8 @@ package com.xddcodec.fs.file.domain.vo; +import com.fasterxml.jackson.annotation.JsonFormat; import com.xddcodec.fs.file.domain.FileInfo; +import com.xddcodec.fs.framework.common.utils.DateUtils; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; @@ -68,16 +70,19 @@ public class FileVO implements Serializable { /** * 上传时间 */ + @JsonFormat(pattern = DateUtils.DATE_TIME_PATTERN) private LocalDateTime uploadTime; /** * 修改时间 */ + @JsonFormat(pattern = DateUtils.DATE_TIME_PATTERN) private LocalDateTime updateTime; /** * 最后访问时间 */ + @JsonFormat(pattern = DateUtils.DATE_TIME_PATTERN) private LocalDateTime lastAccessTime; /** diff --git a/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/enums/FileTypeEnum.java b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/enums/FileTypeEnum.java deleted file mode 100644 index bf1db45fa597fd5d9a2ba4ef6fcf79612361d4d3..0000000000000000000000000000000000000000 --- a/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/enums/FileTypeEnum.java +++ /dev/null @@ -1,160 +0,0 @@ -package com.xddcodec.fs.file.enums; - -import lombok.Getter; - -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -/** - * 文件类型枚举 - * - * @Author: xddcode - * @Date: 2024/12/26 - */ -@Getter -public enum FileTypeEnum { - - /** - * 图片类型 - */ - IMAGE("image", "图片", Arrays.asList( - "jpg", "jpeg", "png", "gif", "bmp", "webp", "svg", - "JPG", "JPEG", "PNG", "GIF", "BMP", "WEBP", "SVG" - )), - - /** - * 视频类型 - */ - VIDEO("video", "视频", Arrays.asList( - "mp4", "avi", "mkv", "mov", "wmv", "flv", "webm", - "MP4", "AVI", "MKV", "MOV", "WMV", "FLV", "WEBM" - )), - - /** - * 音频类型 - */ - AUDIO("audio", "音频", Arrays.asList( - "mp3", "wav", "flac", "aac", "ogg", "m4a", "wma", - "MP3", "WAV", "FLAC", "AAC", "OGG", "M4A", "WMA" - )), - - /** - * 文档类型 - */ - DOCUMENT("document", "文档", Arrays.asList( - "doc", "docx", "pdf", "txt", "xls", "xlsx", "ppt", "pptx", - "DOC", "DOCX", "PDF", "TXT", "XLS", "XLSX", "PPT", "PPTX" - )), - - /** - * 其他类型(不属于以上任何类型) - */ - OTHER("other", "其他", null); - - /** - * 英文标识 - */ - private final String code; - - /** - * 中文名称 - */ - private final String name; - - /** - * 支持的文件后缀列表(文件夹和其他类型为null) - */ - private final List suffixes; - - FileTypeEnum(String code, String name, List suffixes) { - this.code = code; - this.name = name; - this.suffixes = suffixes; - } - - /** - * 根据类型标识获取枚举 - * - * @param type 类型标识(支持英文code或中文name) - * @return 文件类型枚举,如果未匹配则返回null - */ - public static FileTypeEnum fromType(String type) { - if (type == null || type.trim().isEmpty()) { - return null; - } - - String trimmedType = type.trim().toLowerCase(); - - for (FileTypeEnum fileType : values()) { - if (fileType.getCode().equalsIgnoreCase(trimmedType) - || fileType.getName().equals(type.trim())) { - return fileType; - } - } - - return null; - } - - /** - * 根据文件后缀判断文件类型 - * - * @param suffix 文件后缀(带或不带点都可以) - * @return 文件类型枚举 - */ - public static FileTypeEnum fromSuffix(String suffix) { - if (suffix == null || suffix.trim().isEmpty()) { - return OTHER; - } - - // 去除前缀的点 - String normalizedSuffix = suffix.trim().replace(".", ""); - - for (FileTypeEnum fileType : values()) { - // 跳过 FOLDER 和 OTHER - if (fileType.getSuffixes() != null - && fileType.getSuffixes().contains(normalizedSuffix)) { - return fileType; - } - } - - return OTHER; - } - - /** - * 获取所有已知的文件后缀(用于排除"其他"类型) - * - * @return 所有已知后缀的列表 - */ - public static List getAllKnownSuffixes() { - return Stream.of(IMAGE, VIDEO, AUDIO, DOCUMENT) - .filter(type -> type.getSuffixes() != null) - .flatMap(type -> type.getSuffixes().stream()) - .distinct() - .collect(Collectors.toList()); - } - - /** - * 判断是否为其他类型 - * - * @return true-其他类型 - */ - public boolean isOther() { - return this == OTHER; - } - - /** - * 判断某个后缀是否属于当前类型 - * - * @param suffix 文件后缀 - * @return true-属于当前类型 - */ - public boolean containsSuffix(String suffix) { - if (suffix == null || this.suffixes == null) { - return false; - } - String normalizedSuffix = suffix.trim().replace(".", ""); - return this.suffixes.contains(normalizedSuffix); - } -} diff --git a/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/listener/FileShareEventListener.java b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/listener/FileShareEventListener.java new file mode 100644 index 0000000000000000000000000000000000000000..5cfad718e37b89fc70b725eded6612d737872a72 --- /dev/null +++ b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/listener/FileShareEventListener.java @@ -0,0 +1,35 @@ +package com.xddcodec.fs.file.listener; + +import com.xddcodec.fs.file.domain.dto.CreateFileShareAccessRecordCmd; +import com.xddcodec.fs.file.domain.event.CreateFileShareAccessRecordEvent; +import com.xddcodec.fs.file.service.FileShareAccessRecordService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; + +/** + * 登录事件监听器 + * + * @Author: xddcodec + * @Date: 2025/9/25 14:35 + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class FileShareEventListener { + + private final FileShareAccessRecordService shareAccessRecordService; + + /** + * 监听创建分享访问记录 + */ + @Async + @EventListener + public void handleCreateFileShareAccessRecordEvent(CreateFileShareAccessRecordEvent event) { + CreateFileShareAccessRecordCmd cmd = event.getCmd(); + shareAccessRecordService.addShareAccessRecord(cmd); + } +} + diff --git a/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/mapper/FileShareAccessRecordMapper.java b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/mapper/FileShareAccessRecordMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..e0a72fd6879c17757f72d38de0e7ac83ea959532 --- /dev/null +++ b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/mapper/FileShareAccessRecordMapper.java @@ -0,0 +1,13 @@ +package com.xddcodec.fs.file.mapper; + +import com.mybatisflex.core.BaseMapper; +import com.xddcodec.fs.file.domain.FileShareAccessRecord; + +/** + * 分享问记录 mapper 接口 + * + * @Author: xddcode + * @Date: 2025/10/29 15:13 + */ +public interface FileShareAccessRecordMapper extends BaseMapper { +} diff --git a/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/preview/PreviewService.java b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/preview/PreviewService.java new file mode 100644 index 0000000000000000000000000000000000000000..78b782f69ecd4c14a2f715973ad00f63bc518919 --- /dev/null +++ b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/preview/PreviewService.java @@ -0,0 +1,105 @@ +package com.xddcodec.fs.file.preview; + +import com.xddcodec.fs.file.domain.FileInfo; +import com.xddcodec.fs.file.service.FileInfoService; +import com.xddcodec.fs.framework.common.enums.FileTypeEnum; +import com.xddcodec.fs.framework.preview.config.FilePreviewConfig; +import com.xddcodec.fs.framework.preview.core.PreviewContext; +import com.xddcodec.fs.framework.preview.core.PreviewStrategy; +import com.xddcodec.fs.framework.preview.factory.PreviewStrategyManager; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.ui.Model; + +/** + * 预览服务 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class PreviewService { + private final FileInfoService fileInfoService; + private final PreviewStrategyManager strategyManager; + private final FilePreviewConfig previewConfig; + + @Value("${server.servlet.context-path:}") + private String contextPath; + + public String preview(String fileId, Model model) { + // 1. 验证 fileId + if (fileId == null || fileId.trim().isEmpty()) { + log.warn("预览失败: fileId 为空"); + return buildErrorPage(model, "文件ID无效", "文件ID不能为空"); + } + + // 2. 查询文件信息 + FileInfo fileInfo = null; + try { + fileInfo = fileInfoService.getById(fileId); + } catch (Exception e) { + log.error("查询文件信息失败: fileId={}", fileId, e); + return buildErrorPage(model, "查询文件失败", "无法查询文件信息"); + } + + if (fileInfo == null) { + log.warn("预览失败: 文件不存在, fileId={}", fileId); + return buildErrorPage(model, "文件不存在", "文件不存在或已被删除"); + } + + // 3. 检查文件大小 + if (fileInfo.getSize() != null && fileInfo.getSize() > previewConfig.getMaxFileSize()) { + log.warn("预览失败: 文件过大, fileId={}, size={}MB", + fileId, fileInfo.getSize() / 1024 / 1024); + return buildErrorPage(model, "文件过大", + String.format("文件大小为 %dMB,超过预览限制(%dMB),请下载后查看", + fileInfo.getSize() / 1024 / 1024, + previewConfig.getMaxFileSize() / 1024 / 1024)); + } + + // 4. 检查文件类型 + FileTypeEnum fileType = FileTypeEnum.fromFileName(fileInfo.getDisplayName()); + if (!fileType.isPreviewable()) { + log.warn("预览失败: 文件类型不支持预览, fileName={}, fileType={}", + fileInfo.getDisplayName(), fileType.getName()); + return buildErrorPage(model, "不支持的文件类型", + "该文件类型暂不支持在线预览,请下载后查看"); + } + + // 5. 构建预览上下文 + try { + String streamUrl = buildUrl("/api/file/stream/preview/", fileId); + PreviewContext context = PreviewContext.builder() + .fileName(fileInfo.getDisplayName()) + .streamUrl(streamUrl) + .fileSize(fileInfo.getSize()) + .extension(fileInfo.getSuffix()) + .fileType(fileType) + .needConvert(fileType.isNeedConvert()) + .build(); + + PreviewStrategy strategy = strategyManager.getStrategy(fileType); + strategy.fillModel(context, model); + + log.info("预览成功: fileName={}, fileType={}", fileInfo.getDisplayName(), fileType.getName()); + return fileType.getPreviewTemplate(); + } catch (Exception e) { + log.error("构建预览上下文失败: fileId={}, fileName={}", fileId, fileInfo.getDisplayName(), e); + return buildErrorPage(model, "预览失败", "无法加载文件预览"); + } + } + + /** + * 构建错误页面 + */ + private String buildErrorPage(Model model, String errorMessage, String errorDetail) { + model.addAttribute("errorMessage", errorMessage); + model.addAttribute("errorDetail", errorDetail); + return "preview/error"; + } + + private String buildUrl(String path, String fileId) { + return (contextPath.isEmpty() ? "" : contextPath) + path + fileId; + } +} diff --git a/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/schedule/FileSchedules.java b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/schedule/FileSchedules.java deleted file mode 100644 index 2ba10c2f740993431fcfa3df30b699ae136bf2c4..0000000000000000000000000000000000000000 --- a/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/schedule/FileSchedules.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.xddcodec.fs.file.schedule; - -import com.xddcodec.fs.file.service.FileInfoService; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Component; - -import java.time.LocalDateTime; - -@Component -@RequiredArgsConstructor -public class FileSchedules { - - private final FileInfoService fileInfoService; - - //定时清理回收站 - private void configureTasks() { - System.err.println("执行静态定时任务时间: " + LocalDateTime.now()); - } - -} diff --git a/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/schedule/RecycleBinCleanupTask.java b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/schedule/RecycleBinCleanupTask.java index efe63ea5502b75f35c343871ab951a0aa04143d6..fd29036068181bc1c26c727a37c613267f9930a8 100644 --- a/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/schedule/RecycleBinCleanupTask.java +++ b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/schedule/RecycleBinCleanupTask.java @@ -32,7 +32,7 @@ public class RecycleBinCleanupTask { /** * 定时清理回收站 - * cron表达式:每天凌晨2点执行 + * cron表达式:每天00:05执行 */ @Scheduled(cron = "0 5 0 * * ?") @Transactional(rollbackFor = Exception.class) diff --git a/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/service/FileInfoService.java b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/service/FileInfoService.java index 9670d43c311014df82b1066782e2ca4a893f5adb..fc5cb9c3c3c918f4a6850e6a98000de5098f128d 100644 --- a/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/service/FileInfoService.java +++ b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/service/FileInfoService.java @@ -60,16 +60,17 @@ public interface FileInfoService extends IService { * - 如果不存在重名:返回原名称 * - 如果存在重名:自动添加 (1), (2), (3)... 后缀 * - * @param userId 用户ID - * @param parentId 父目录ID - * @param desiredName 期望的文件名 - * @param isDir 是否是文件夹 - * @param excludeFileId 排除的文件ID(可选,用于重命名场景) + * @param userId 用户ID + * @param parentId 父目录ID + * @param desiredName 期望的文件名 + * @param isDir 是否是文件夹 + * @param excludeFileId 排除的文件ID(可选,用于重命名场景) + * @param storagePlatformSettingId 存储平台设置ID * @return 唯一的文件名 */ String generateUniqueName(String userId, String parentId, String desiredName, Boolean isDir, - String excludeFileId); + String excludeFileId, String storagePlatformSettingId); /** * 重命名文件 diff --git a/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/service/FileShareAccessRecordService.java b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/service/FileShareAccessRecordService.java new file mode 100644 index 0000000000000000000000000000000000000000..82cced8d5307dd825a87ef96361f62bc616bc304 --- /dev/null +++ b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/service/FileShareAccessRecordService.java @@ -0,0 +1,33 @@ +package com.xddcodec.fs.file.service; + +import com.mybatisflex.core.service.IService; +import com.xddcodec.fs.file.domain.FileShareAccessRecord; +import com.xddcodec.fs.file.domain.dto.CreateFileShareAccessRecordCmd; +import com.xddcodec.fs.file.domain.vo.FileShareAccessRecordVO; + +import java.util.List; + +/** + * 分享访问记录服务接口 + * + * @Author: xddcode + * @Date: 2025/10/30 9:35 + */ +public interface FileShareAccessRecordService extends IService { + + /** + * 根据分享ID获取访问记录列表 + * + * @param shareId + * @return + */ + List getListByShareId(String shareId); + + + /** + * 新增分享访问记录 + * + * @param cmd + */ + void addShareAccessRecord(CreateFileShareAccessRecordCmd cmd); +} diff --git a/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/service/FileShareService.java b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/service/FileShareService.java index ca8bf46197c7da71842b90fd9680b0cd324b1d99..cf1bee3ac3b52fd4b2098326f9c48b1014f41a40 100644 --- a/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/service/FileShareService.java +++ b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/service/FileShareService.java @@ -3,6 +3,7 @@ package com.xddcodec.fs.file.service; import com.mybatisflex.core.service.IService; import com.xddcodec.fs.file.domain.FileShare; import com.xddcodec.fs.file.domain.dto.CreateShareCmd; +import com.xddcodec.fs.file.domain.dto.VerifyShareCodeCmd; import com.xddcodec.fs.file.domain.qry.FileSharePageQry; import com.xddcodec.fs.file.domain.vo.FileShareVO; import com.xddcodec.fs.framework.common.domain.PageResult; @@ -36,4 +37,11 @@ public interface FileShareService extends IService { * @param shareId 分享ID */ void cancelShare(String shareId); + + /** + * 校验提取码 + * + * @param cmd + */ + boolean verifyShareCode(VerifyShareCodeCmd cmd); } diff --git a/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/service/impl/FileInfoServiceImpl.java b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/service/impl/FileInfoServiceImpl.java index 215389530d627884a398f5304657e764b8143a9c..1994daec61f179803bc132c93eb10b48ee29ee5d 100644 --- a/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/service/impl/FileInfoServiceImpl.java +++ b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/service/impl/FileInfoServiceImpl.java @@ -14,9 +14,9 @@ import com.xddcodec.fs.file.domain.qry.FileQry; import com.xddcodec.fs.file.domain.vo.FileDetailVO; import com.xddcodec.fs.file.domain.vo.FileRecycleVO; import com.xddcodec.fs.file.domain.vo.FileVO; -import com.xddcodec.fs.file.enums.FileTypeEnum; import com.xddcodec.fs.file.mapper.FileInfoMapper; import com.xddcodec.fs.file.service.FileInfoService; +import com.xddcodec.fs.framework.common.enums.FileTypeEnum; import com.xddcodec.fs.framework.common.exception.BusinessException; import com.xddcodec.fs.framework.common.exception.StorageOperationException; import com.xddcodec.fs.framework.common.utils.StringUtils; @@ -145,7 +145,8 @@ public class FileInfoServiceImpl extends ServiceImpl i cmd.getParentId(), baseName, true, - null + null, + platformConfigId ); // 创建目录信息记录 FileInfo dirInfo = new FileInfo(); @@ -173,6 +174,7 @@ public class FileInfoServiceImpl extends ServiceImpl i if (fileInfo.getDisplayName().equals(cmd.getDisplayName())) { return; } + String storagePlatformSettingId = StoragePlatformContextHolder.getConfigId(); String newName = cmd.getDisplayName().trim(); //判断同目录下是否有重名 String finalName = generateUniqueName( @@ -180,7 +182,9 @@ public class FileInfoServiceImpl extends ServiceImpl i fileInfo.getParentId(), newName, fileInfo.getIsDir(), - fileId + fileId, + storagePlatformSettingId + ); fileInfo.setDisplayName(finalName); LocalDateTime now = LocalDateTime.now(); @@ -258,8 +262,8 @@ public class FileInfoServiceImpl extends ServiceImpl i */ @Override public String generateUniqueName(String userId, String parentId, - String desiredName, Boolean isDir, - String excludeFileId) { + String desiredName, Boolean isDir, + String excludeFileId, String storagePlatformSettingId) { String nameWithoutExt = desiredName; String extension = ""; @@ -273,7 +277,8 @@ public class FileInfoServiceImpl extends ServiceImpl i parentId, nameWithoutExt, isDir, - excludeFileId + excludeFileId, + storagePlatformSettingId ); List existingFiles = list(query); if (existingFiles.isEmpty()) { @@ -295,7 +300,7 @@ public class FileInfoServiceImpl extends ServiceImpl i */ private QueryWrapper buildSameLevelQuery(String userId, String parentId, String baseName, Boolean isDir, - String excludeFileId) { + String excludeFileId, String storagePlatformSettingId) { QueryWrapper query = new QueryWrapper(); query.where(FILE_INFO.USER_ID.eq(userId)) @@ -303,7 +308,11 @@ public class FileInfoServiceImpl extends ServiceImpl i .and(FILE_INFO.IS_DIR.eq(isDir)) .and(FILE_INFO.IS_DELETED.eq(false)) .and(FILE_INFO.DISPLAY_NAME.like(baseName + "%")); - + if (StringUtils.isEmpty(storagePlatformSettingId)) { + query.and(FILE_INFO.STORAGE_PLATFORM_SETTING_ID.isNull()); + } else { + query.and(FILE_INFO.STORAGE_PLATFORM_SETTING_ID.eq(storagePlatformSettingId)); + } // 如果是重命名场景,排除当前文件 if (StrUtil.isNotBlank(excludeFileId)) { query.and(FILE_INFO.ID.ne(excludeFileId)); @@ -503,9 +512,12 @@ public class FileInfoServiceImpl extends ServiceImpl i .on(FILE_INFO.ID.eq(FILE_USER_FAVORITES.FILE_ID) .and(FILE_USER_FAVORITES.USER_ID.eq(userId))) .where(FILE_INFO.USER_ID.eq(userId)) - .and(FILE_INFO.IS_DELETED.eq(false)) - .and(FILE_INFO.STORAGE_PLATFORM_SETTING_ID.eq(storagePlatformSettingId)); - + .and(FILE_INFO.IS_DELETED.eq(false)); + if (StringUtils.isEmpty(storagePlatformSettingId)) { + wrapper.and(FILE_INFO.STORAGE_PLATFORM_SETTING_ID.isNull()); + } else { + wrapper.and(FILE_INFO.STORAGE_PLATFORM_SETTING_ID.eq(storagePlatformSettingId)); + } // 收藏过滤 if (Boolean.TRUE.equals(qry.getIsFavorite()) && qry.getParentId() == null) { wrapper.and("fuf.file_id IS NOT NULL"); @@ -576,28 +588,62 @@ public class FileInfoServiceImpl extends ServiceImpl i if (qry.getFileType() == null || qry.getFileType().trim().isEmpty()) { return; } + FileTypeEnum.FileCategory category = FileTypeEnum.FileCategory.fromCode(qry.getFileType()); + if (category != null) { + // 按大类筛选 + applyFilterByCategory(wrapper, category); + return; + } FileTypeEnum fileType = FileTypeEnum.fromType(qry.getFileType()); - if (fileType == null) { log.warn("未识别的文件类型: {}", qry.getFileType()); return; } - // 其他类型:排除所有已知后缀 - if (fileType.isOther()) { + // 按具体类型筛选 + applyFilterByType(wrapper, fileType); + } + + /** + * 按分类筛选 + */ + private void applyFilterByCategory(QueryWrapper wrapper, FileTypeEnum.FileCategory category) { + if (category == FileTypeEnum.FileCategory.OTHER) { + // 其他类型:排除所有已知后缀 List knownSuffixes = FileTypeEnum.getAllKnownSuffixes(); wrapper.and(FILE_INFO.IS_DIR.eq(false)) .and( FILE_INFO.SUFFIX.notIn(knownSuffixes) .or(FILE_INFO.SUFFIX.isNull().or(FILE_INFO.SUFFIX.eq(""))) ); - - return; + } else { + // 常规分类:获取该分类下所有后缀 + List categorySuffixes = FileTypeEnum.getSuffixesByCategory(category); + if (!categorySuffixes.isEmpty()) { + wrapper.and(FILE_INFO.IS_DIR.eq(false)) + .and(FILE_INFO.SUFFIX.in(categorySuffixes)); + } } - // 常规类型:直接匹配后缀 - List suffixes = fileType.getSuffixes(); - if (suffixes != null && !suffixes.isEmpty()) { - wrapper.eq(FileInfo::getIsDir, false) - .in(FileInfo::getSuffix, suffixes); + } + + /** + * 按具体类型筛选 + */ + private void applyFilterByType(QueryWrapper wrapper, FileTypeEnum fileType) { + if (fileType.isOther()) { + // 其他类型:排除所有已知后缀 + List knownSuffixes = FileTypeEnum.getAllKnownSuffixes(); + wrapper.and(FILE_INFO.IS_DIR.eq(false)) + .and( + FILE_INFO.SUFFIX.notIn(knownSuffixes) + .or(FILE_INFO.SUFFIX.isNull().or(FILE_INFO.SUFFIX.eq(""))) + ); + } else { + // 具体类型:直接匹配后缀 + List suffixes = fileType.getSuffixes(); + if (suffixes != null && !suffixes.isEmpty()) { + wrapper.and(FILE_INFO.IS_DIR.eq(false)) + .and(FILE_INFO.SUFFIX.in(suffixes)); + } } } diff --git a/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/service/impl/FileShareAccessRecordServiceImpl.java b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/service/impl/FileShareAccessRecordServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..5a3701116d5388b7801c6825bc080bcfbeaf4040 --- /dev/null +++ b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/service/impl/FileShareAccessRecordServiceImpl.java @@ -0,0 +1,45 @@ +package com.xddcodec.fs.file.service.impl; + +import com.mybatisflex.core.query.QueryWrapper; +import com.mybatisflex.spring.service.impl.ServiceImpl; +import com.xddcodec.fs.file.domain.FileShareAccessRecord; +import com.xddcodec.fs.file.domain.dto.CreateFileShareAccessRecordCmd; +import com.xddcodec.fs.file.domain.vo.FileShareAccessRecordVO; +import com.xddcodec.fs.file.mapper.FileShareAccessRecordMapper; +import com.xddcodec.fs.file.service.FileShareAccessRecordService; +import com.xddcodec.fs.framework.common.utils.StringUtils; +import io.github.linpeilie.Converter; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +import static com.xddcodec.fs.file.domain.table.FileShareAccessRecordTableDef.FILE_SHARE_ACCESS_RECORD; + +/** + * 分享访问记录服务实现 + * + * @Author: xddcode + * @Date: 2025/10/30 9:35 + */ +@Service +@RequiredArgsConstructor +public class FileShareAccessRecordServiceImpl extends ServiceImpl implements FileShareAccessRecordService { + + private final Converter converter; + + @Override + public List getListByShareId(String shareId) { + List records = this.list(new QueryWrapper().where(FILE_SHARE_ACCESS_RECORD.SHARE_ID.eq(shareId))); + return converter.convert(records, FileShareAccessRecordVO.class); + } + + @Override + public void addShareAccessRecord(CreateFileShareAccessRecordCmd cmd) { + if (StringUtils.isEmpty(cmd.getShareId())) { + return; + } + FileShareAccessRecord record = converter.convert(cmd, FileShareAccessRecord.class); + this.save(record); + } +} diff --git a/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/service/impl/FileShareServiceImpl.java b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/service/impl/FileShareServiceImpl.java index b4e08f448f14c35abb13f059ccb3aef3c3d88df5..9f13d0eb45b2617b3e1b18e32bef6df0765532dd 100644 --- a/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/service/impl/FileShareServiceImpl.java +++ b/fs-modules/fs-file/src/main/java/com/xddcodec/fs/file/service/impl/FileShareServiceImpl.java @@ -9,6 +9,7 @@ import com.mybatisflex.spring.service.impl.ServiceImpl; import com.xddcodec.fs.file.domain.FileInfo; import com.xddcodec.fs.file.domain.FileShare; import com.xddcodec.fs.file.domain.dto.CreateShareCmd; +import com.xddcodec.fs.file.domain.dto.VerifyShareCodeCmd; import com.xddcodec.fs.file.domain.qry.FileSharePageQry; import com.xddcodec.fs.file.domain.vo.FileShareVO; import com.xddcodec.fs.file.mapper.FileShareMapper; @@ -160,7 +161,7 @@ public class FileShareServiceImpl extends ServiceImpl