@netless/forge-imagery-doc 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build.mjs +34 -0
- package/dist/Cont.d.ts +1 -0
- package/dist/Cont.d.ts.map +1 -0
- package/dist/Container.d.ts +16 -0
- package/dist/Container.d.ts.map +1 -0
- package/dist/ContinuousContainer.d.ts +31 -0
- package/dist/ContinuousContainer.d.ts.map +1 -0
- package/dist/FooterView.d.ts +18 -0
- package/dist/FooterView.d.ts.map +1 -0
- package/dist/ImageryDoc.d.ts +57 -0
- package/dist/ImageryDoc.d.ts.map +1 -0
- package/dist/ImageryDocApplication.d.ts +38 -0
- package/dist/ImageryDocApplication.d.ts.map +1 -0
- package/dist/ImageryDocPermissions.d.ts +80 -0
- package/dist/ImageryDocPermissions.d.ts.map +1 -0
- package/dist/InfinityScroll.d.ts +15 -0
- package/dist/InfinityScroll.d.ts.map +1 -0
- package/dist/LazyImage.d.ts +11 -0
- package/dist/LazyImage.d.ts.map +1 -0
- package/dist/SideBarView.d.ts +4 -0
- package/dist/SideBarView.d.ts.map +1 -0
- package/dist/SingleContainer.d.ts +36 -0
- package/dist/SingleContainer.d.ts.map +1 -0
- package/dist/icons.d.ts +6 -0
- package/dist/icons.d.ts.map +1 -0
- package/dist/imagery-doc.esm.js +1031 -0
- package/dist/imagery-doc.esm.js.map +7 -0
- package/dist/imagery-doc.js +1064 -0
- package/dist/imagery-doc.js.map +7 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/infinityScrollor.d.ts +5 -0
- package/dist/infinityScrollor.d.ts.map +1 -0
- package/package.json +23 -0
- package/src/Container.ts +17 -0
- package/src/ContinuousContainer.ts +157 -0
- package/src/FooterView.ts +139 -0
- package/src/ImageryDoc.ts +64 -0
- package/src/ImageryDocApplication.ts +225 -0
- package/src/ImageryDocPermissions.ts +159 -0
- package/src/InfinityScroll.ts +55 -0
- package/src/LazyImage.ts +66 -0
- package/src/SingleContainer.ts +248 -0
- package/src/icons.ts +9 -0
- package/src/index.ts +5 -0
- package/tsconfig.json +7 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/index.ts", "../src/ImageryDoc.ts", "../src/ImageryDocApplication.ts", "../src/LazyImage.ts", "../src/ImageryDocPermissions.ts", "../src/icons.ts", "../src/FooterView.ts", "../src/InfinityScroll.ts", "../src/Container.ts", "../src/ContinuousContainer.ts", "../src/SingleContainer.ts"],
|
|
4
|
+
"sourcesContent": ["export { ImageryDoc } from \"./ImageryDoc\";\nexport { ImageryDocApplication } from \"./ImageryDocApplication\";\nexport { ImageryDocPermissionFlag } from \"./ImageryDocPermissions\";", "function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport EventEmitter from \"eventemitter3\";\nexport class ImageryDoc extends EventEmitter {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"view\", void 0);\n /**\n * \u5E95\u90E8\u64CD\u4F5C\u680F\n */\n _defineProperty(this, \"footView\", void 0);\n _defineProperty(this, \"permissions\", void 0);\n /**\n * \u5F53\u524D\u9875\u9762\u7D22\u5F15, \u4ECE 0 \u5F00\u59CB\n */\n _defineProperty(this, \"pageIndex\", void 0);\n /**\n * \u603B\u9875\u6570\n */\n _defineProperty(this, \"pageCount\", void 0);\n /**\n * \u5207\u6362\u5230\u53C2\u6570\u6307\u5B9A\u9875\u9762, index \u4ECE 0 \u5F00\u59CB\n * @param {number} index \u9875\u9762\u7D22\u5F15\n */\n _defineProperty(this, \"goto\", void 0);\n /**\n * \u83B7\u53D6\u56FE\u7247\u5185\u5BB9, base64 \u7F16\u7801\n * @param {number} index \u9875\u9762\u7D22\u5F15\n */\n _defineProperty(this, \"imgContent\", void 0);\n /**\n * \u83B7\u53D6\u56FE\u7247\u5C3A\u5BF8\n * @param {number} index \u9875\u9762\u7D22\u5F15\n */\n _defineProperty(this, \"imgSize\", void 0);\n }\n}", "function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { AbstractApplication } from \"@netless/forge-room\";\nimport { WhiteboardApplication, WhiteboardPermissionFlag } from \"@netless/forge-whiteboard\";\nimport { ImageryDoc } from \"./ImageryDoc\";\nimport { LazyImage } from \"./LazyImage\";\nimport { ImageryDocPermissionFlag, ImageryDocPermissions } from \"./ImageryDocPermissions\";\nimport { FooterView } from \"./FooterView\";\nimport { ContinuousContainer } from \"./ContinuousContainer\";\nimport { SingleContainer } from \"./SingleContainer\";\nexport const IMAGERY_DOC_APP_NAME = \"imagery_doc\";\n\n/**\n * \u9700\u7528\u6237\u81EA\u884C\u4FDD\u8BC1 ImageryDocApplication.view \u7684\u9AD8\u5BBD\u6BD4\u4E00\u81F4\n */\nexport class ImageryDocApplication extends AbstractApplication {\n constructor() {\n super();\n _defineProperty(this, \"name\", IMAGERY_DOC_APP_NAME);\n _defineProperty(this, \"emitter\", new ImageryDoc());\n _defineProperty(this, \"whiteboardApp\", void 0);\n _defineProperty(this, \"whiteboard\", void 0);\n _defineProperty(this, \"container\", void 0);\n _defineProperty(this, \"rootView\", document.createElement(\"div\"));\n _defineProperty(this, \"contentContainer\", document.createElement(\"div\"));\n _defineProperty(this, \"whiteboardContainer\", document.createElement(\"div\"));\n _defineProperty(this, \"footerContainer\", document.createElement(\"div\"));\n _defineProperty(this, \"permissions\", void 0);\n _defineProperty(this, \"footer\", void 0);\n _defineProperty(this, \"images\", []);\n this.rootView.setAttribute(\"data-forge-app\", \"imagery-doc\");\n this.rootView.style.background = \"red\";\n this.rootView.style.overflow = \"hidden\";\n this.contentContainer.style.width = \"100%\";\n this.contentContainer.style.height = \"100%\";\n this.contentContainer.style.display = \"flex\";\n this.contentContainer.style.flexDirection = \"column\";\n this.footer = new FooterView(this.emitter);\n this.rootView.appendChild(this.contentContainer);\n this.emitter.on(\"renderStart\", pageIndex => {\n this.footer.prevPageState(pageIndex !== 0);\n this.footer.nextPageState(pageIndex !== this.images.length - 1);\n });\n const that = this;\n Object.defineProperty(this.emitter, \"footView\", {\n get() {\n return that.footerContainer;\n }\n });\n Object.defineProperty(this.emitter, \"view\", {\n get() {\n return that.rootView;\n }\n });\n Object.defineProperty(this.emitter, \"permissions\", {\n get() {\n return that.permissions;\n }\n });\n Object.defineProperty(this.emitter, \"pageIndex\", {\n get() {\n return that.container.pageIndex;\n }\n });\n Object.defineProperty(this.emitter, \"pageCount\", {\n get() {\n return that.images.length;\n }\n });\n Object.defineProperty(this.emitter, \"goto\", {\n get() {\n return index => {\n if (that.permissions.hasPermission(ImageryDocPermissionFlag.switchPage)) {\n that.container.goto(index);\n }\n };\n }\n });\n Object.defineProperty(this.emitter, \"imgContent\", {\n get() {\n return index => {\n return that.images[index].getImgContent();\n };\n }\n });\n Object.defineProperty(this.emitter, \"imgSize\", {\n get() {\n return index => {\n return {\n width: that.images[index].width,\n height: that.images[index].height\n };\n };\n }\n });\n }\n async initialize(option) {\n const whiteboardApp = new WhiteboardApplication();\n // @ts-ignore\n whiteboardApp.roomDoc = this.roomDoc;\n // @ts-ignore\n whiteboardApp.appId = `${this.appId}_wb`;\n // @ts-ignore\n whiteboardApp.userId = this.userId;\n // @ts-ignore\n whiteboardApp.userManager = this.userManager;\n // @ts-ignore\n whiteboardApp.applicationManager = this.applicationManager;\n await whiteboardApp.initialize({\n width: -1,\n height: -1\n });\n this.whiteboardApp = whiteboardApp;\n this.whiteboard = whiteboardApp.emitter;\n this.whiteboard.enableCameraByMouse = false;\n this.whiteboard.enableCameraByTouch = false;\n this.whiteboard.view.style.width = \"100%\";\n this.whiteboard.view.style.height = \"100%\";\n this.whiteboard.view.style.position = \"absolute\";\n this.whiteboard.view.style.top = \"0\";\n this.whiteboard.view.style.left = \"0\";\n this.whiteboard.setCanvasBackgroundColor(\"#f0f0f000\");\n if (option.displayMode === \"single\") {\n this.container = new SingleContainer(this.getMap(\"single-container\"), whiteboardApp, this.whiteboardContainer, this.emitter);\n } else {\n this.container = new ContinuousContainer(this.getMap(\"continuous-container\"), whiteboardApp, this.whiteboardContainer, this.emitter);\n }\n this.whiteboardContainer.style.position = \"relative\";\n this.whiteboardContainer.style.flex = \"1 1 auto\";\n this.whiteboardContainer.style.overflow = \"hidden\";\n this.whiteboardContainer.appendChild(this.container.view);\n this.whiteboardContainer.appendChild(this.whiteboard.view);\n this.contentContainer.appendChild(this.whiteboardContainer);\n this.contentContainer.appendChild(this.footerContainer);\n this.footerContainer.appendChild(this.footer.root);\n this.whiteboard.setViewModeToMain();\n let i = 0;\n this.whiteboard.permissions.addPermission(WhiteboardPermissionFlag.mainView);\n while (i < option.images.length) {\n const image = option.images[i];\n this.images[i] = new LazyImage(image.src, image.width, image.height);\n this.container.append(this.images[i]);\n if (option.displayMode === \"single\") {\n this.whiteboard.addPage(`doc_${i}`);\n }\n i += 1;\n }\n if (option.displayMode === \"continuous\") {\n this.whiteboard.addPage(\"doc_continuous\");\n this.whiteboard.gotoPage(\"doc_continuous\");\n }\n if (option.displayMode === \"single\") {\n this.whiteboard.setViewModeToMain();\n } else {\n this.whiteboard.setViewModeToFree();\n }\n this.permissions = new ImageryDocPermissions(this.userManager, userId => {\n return this.userMap(userId);\n });\n this.permissions.addPermission(ImageryDocPermissionFlag.all);\n this.whiteboardApp.disableViewModel();\n this.container.init();\n this.whiteboard.permissions.removePermission(WhiteboardPermissionFlag.mainView);\n if (option.inheritWhiteboardId) {\n whiteboardApp.linkToWhiteboard(option.inheritWhiteboardId);\n }\n return Promise.resolve(undefined);\n }\n userMap(userId) {\n return this.getMap(`user/${userId}`);\n }\n async dispose() {\n await this.whiteboardApp.dispose();\n this.rootView.parentElement?.removeChild(this.rootView);\n this.container.dispose();\n return Promise.resolve(undefined);\n }\n}\n_defineProperty(ImageryDocApplication, \"applicationName\", IMAGERY_DOC_APP_NAME);", "function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { kvStore } from \"@netless/forge-room\";\nexport class LazyImage {\n constructor(src, width, height) {\n _defineProperty(this, \"view\", void 0);\n _defineProperty(this, \"width\", void 0);\n _defineProperty(this, \"height\", void 0);\n _defineProperty(this, \"src\", void 0);\n this.src = src;\n this.width = width;\n this.height = height;\n this.view = document.createElement(\"div\");\n this.view.setAttribute(\"data-forge-src\", src);\n this.view.style.width = `${width}px`;\n this.view.style.height = `${height}px`;\n this.view.style.transformOrigin = \"0 0\";\n }\n scale(scale) {\n // this.localScale = scale;\n this.view.style.width = `${this.width * scale}px`;\n this.view.style.height = `${this.height * scale}px`;\n // this.img.style.width = \"100%\";\n }\n async getImgContent() {\n let base64Data = null;\n try {\n base64Data = await kvStore.getItem(this.src);\n } catch {\n // ignore\n }\n if (base64Data) {\n return base64Data;\n }\n const response = await fetch(this.src);\n const blob = await response.blob();\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = e => {\n kvStore.setItem(this.src, reader.result);\n resolve(reader.result);\n };\n reader.onerror = () => {\n reject(reader.error);\n };\n reader.readAsDataURL(blob);\n });\n }\n async prepare() {\n if (this.view.children.length > 0) {\n return;\n }\n const base64Data = await this.getImgContent();\n const img = document.createElement(\"img\");\n img.src = base64Data;\n img.style.width = \"100%\";\n if (this.view.children.length === 0) {\n this.view.appendChild(img);\n }\n }\n}", "function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport EventEmitter from \"eventemitter3\";\nexport let ImageryDocPermissionFlag = function (ImageryDocPermissionFlag) {\n /**\n * \u6CA1\u6709\u4EFB\u4F55\u6743\u9650, \u53EA\u80FD\u540C\u6B65\u4ED6\u4EBA\u7684\u64CD\u4F5C\n */\n ImageryDocPermissionFlag[ImageryDocPermissionFlag[\"none\"] = 0] = \"none\";\n /**\n * \u53EF\u4EE5\u5207\u6362\u9875\u9762\n */\n ImageryDocPermissionFlag[ImageryDocPermissionFlag[\"switchPage\"] = 1] = \"switchPage\";\n /**\n * \u53EF\u4EE5\u64CD\u4F5C\u76F8\u673A, \u5305\u62EC\u7F29\u653E, \u5E73\u79FB\n */\n ImageryDocPermissionFlag[ImageryDocPermissionFlag[\"camera\"] = 2] = \"camera\";\n /**\n * \u53EF\u4EE5\u64CD\u4F5C\u4FA7\u8FB9\u680F\n */\n ImageryDocPermissionFlag[ImageryDocPermissionFlag[\"sideBar\"] = 4] = \"sideBar\";\n /**\n * \u62E5\u6709\u6240\u6709\u6743\u9650\n */\n ImageryDocPermissionFlag[ImageryDocPermissionFlag[\"all\"] = ImageryDocPermissionFlag.switchPage | ImageryDocPermissionFlag.camera | ImageryDocPermissionFlag.sideBar] = \"all\";\n return ImageryDocPermissionFlag;\n}({});\nexport class ImageryDocPermissions extends EventEmitter {\n constructor(userManager, requestUserMap) {\n super();\n _defineProperty(this, \"requestUserMap\", void 0);\n _defineProperty(this, \"userManager\", void 0);\n _defineProperty(this, \"observers\", new Map());\n _defineProperty(this, \"handleUserLeave\", user => {\n const cb = this.observers.get(user.id);\n if (cb) {\n this.requestUserMap(user.id).unobserve(cb);\n }\n });\n _defineProperty(this, \"handleUserJoin\", user => {\n this.addObserve(user.id);\n });\n this.userManager = userManager;\n this.requestUserMap = requestUserMap;\n this.createModel(this.userManager.selfId);\n this.userManager.userIdList().forEach(userId => {\n this.addObserve(userId);\n });\n this.userManager.on(\"join\", this.handleUserJoin);\n this.userManager.on(\"leave\", this.handleUserLeave);\n }\n addObserve(userId) {\n const observer = evt => {\n this.handleUserPermissionChange(userId, evt);\n };\n this.observers.set(userId, observer);\n this.requestUserMap(userId).observe(observer);\n }\n createModel(userId) {\n const userMap = this.requestUserMap(userId);\n if (!userMap.has(\"permission\")) {\n userMap.set(\"permission\", 0);\n }\n }\n handleUserPermissionChange(userId, evt) {\n for (const [key, value] of evt.changes.keys.entries()) {\n if (key === \"permission\") {\n if (value.action === \"add\" || value.action === \"update\") {\n const newValue = this.requestUserMap(userId).get(\"permission\");\n this.emit(\"change\", userId, this.resolveFlags(newValue), newValue);\n }\n }\n }\n }\n\n /**\n * \u89E3\u6790\u6743\u9650\u5217\u8868\u7EC4\u5408\n * @param {number} value - \u6743\u9650\u6570\u5B57\u503C\n * @return {WhiteboardPermissionFlag[]} - \u6743\u9650\u5217\u8868\n */\n resolveFlags(value) {\n return [ImageryDocPermissionFlag.switchPage, ImageryDocPermissionFlag.sideBar, ImageryDocPermissionFlag.camera].filter(v => (v & value) !== 0);\n }\n\n /**\n * \u83B7\u53D6\u6743\u9650\u5217\u8868\u7EC4\u5408\u5BF9\u5E94\u7684\u6570\u503C\n * @param { string } userId \u4E0D\u4F20\u8868\u793A\u83B7\u53D6\u81EA\u5DF1\n */\n getPermissionValue(userId) {\n return this.requestUserMap(userId ?? this.userManager.selfId).get(\"permission\") ?? 0;\n }\n\n /**\n * \u83B7\u53D6\u6743\u9650\u5217\u8868\n * @param {string=} userId \u53EF\u9009, \u4E0D\u4F20\u8868\u793A\u83B7\u53D6\u81EA\u5DF1\n */\n getPermissionFlags(userId) {\n const value = this.requestUserMap(userId ?? this.userManager.selfId).get(\"permission\") ?? 0;\n return this.resolveFlags(value);\n }\n\n /**\n * \u8FD4\u56DE\u5BF9\u5E94 userId \u662F\u5426\u6709\u76F8\u5E94\u6743\u9650\n * @param {string=} userId \u53EF\u9009, \u4E0D\u4F20\u8868\u793A\u8FD4\u56DE\u81EA\u5DF1\u662F\u5426\u6709\u76F8\u5E94\u6743\u9650\n * @param {WhiteboardPermissionFlag} flag\n */\n hasPermission(flag, userId) {\n return ((this.requestUserMap(userId ?? this.userManager.selfId).get(\"permission\") ?? 0) & flag) !== 0;\n }\n\n /**\n * \u6DFB\u52A0\u6743\u9650\n * @param {WhiteboardPermissionFlag} flag \u6743\u9650\u6807\u8BB0\n * @param {string=} userId \u53EF\u9009, \u4E3A userId \u6DFB\u52A0\u6743\u9650, \u4E0D\u4F20\u8868\u793A\u4E3A\u81EA\u5DF1\u6DFB\u52A0\u6743\u9650\n */\n addPermission(flag, userId) {\n const userMap = this.requestUserMap(userId ?? this.userManager.selfId);\n const oldValue = userMap.get(\"permission\") ?? 0;\n this.requestUserMap(userId ?? this.userManager.selfId).set(\"permission\", oldValue | flag);\n }\n\n /**\n * \u79FB\u9664\u6743\u9650\n * @param {WhiteboardPermissionFlag} flag \u6743\u9650\u6807\u8BB0\n * @param {string=} userId \u53EF\u9009, \u4E3A userId \u79FB\u9664\u6743\u9650, \u4E0D\u4F20\u8868\u793A\u4E3A\u81EA\u5DF1\u79FB\u9664\u6743\u9650\n */\n removePermission(flag, userId) {\n const userMap = this.requestUserMap(userId ?? this.userManager.selfId);\n const oldValue = userMap.get(\"permission\") ?? 0;\n this.requestUserMap(userId ?? this.userManager.selfId).set(\"permission\", oldValue & ~flag);\n }\n}", "const chevronLeft = color => `<svg style=\"width:100%;height:100%;padding:2px;box-sizing:border-box;\" viewBox=\"0 0 12.3926 16.9629\"><g><rect height=\"16.9629\" opacity=\"0\" width=\"12.3926\" x=\"0\" y=\"0\"/><path d=\"M0 8.47656C0 8.7207 0.0878906 8.93555 0.273438 9.12109L8.01758 16.6895C8.18359 16.8652 8.39844 16.9531 8.65234 16.9531C9.16016 16.9531 9.55078 16.5723 9.55078 16.0645C9.55078 15.8105 9.44336 15.5957 9.28711 15.4297L2.17773 8.47656L9.28711 1.52344C9.44336 1.35742 9.55078 1.13281 9.55078 0.888672C9.55078 0.380859 9.16016 0 8.65234 0C8.39844 0 8.18359 0.0878906 8.01758 0.253906L0.273438 7.83203C0.0878906 8.00781 0 8.23242 0 8.47656Z\" fill=\"${color}\"/></g></svg>`;\nconst chevronRight = color => `<svg style=\"width:100%;height:100%;padding:2px;box-sizing:border-box;\" viewBox=\"0 0 11.6895 16.9629\"><g><rect height=\"16.9629\" opacity=\"0\" width=\"11.6895\" x=\"0\" y=\"0\"/><path d=\"M11.6895 8.47656C11.6895 8.23242 11.5918 8.00781 11.4062 7.83203L3.67188 0.253906C3.49609 0.0878906 3.28125 0 3.02734 0C2.5293 0 2.13867 0.380859 2.13867 0.888672C2.13867 1.13281 2.23633 1.35742 2.39258 1.52344L9.50195 8.47656L2.39258 15.4297C2.23633 15.5957 2.13867 15.8105 2.13867 16.0645C2.13867 16.5723 2.5293 16.9531 3.02734 16.9531C3.28125 16.9531 3.49609 16.8652 3.67188 16.6895L11.4062 9.12109C11.5918 8.93555 11.6895 8.7207 11.6895 8.47656Z\" fill=\"${color}\"/></g></svg>`;\nconst sideBar = color => `<svg style=\"width:100%;height:100%;padding:2px;box-sizing:border-box;\" viewBox=\"0 0 23.3887 17.998\"><g><rect height=\"17.998\" opacity=\"0\" width=\"23.3887\" x=\"0\" y=\"0\"/><path d=\"M3.06641 17.998L19.9609 17.998C22.0117 17.998 23.0273 16.9824 23.0273 14.9707L23.0273 3.04688C23.0273 1.03516 22.0117 0.0195312 19.9609 0.0195312L3.06641 0.0195312C1.02539 0.0195312 0 1.02539 0 3.04688L0 14.9707C0 16.9922 1.02539 17.998 3.06641 17.998ZM3.08594 16.4258C2.10938 16.4258 1.57227 15.9082 1.57227 14.8926L1.57227 3.125C1.57227 2.10938 2.10938 1.5918 3.08594 1.5918L19.9414 1.5918C20.9082 1.5918 21.4551 2.10938 21.4551 3.125L21.4551 14.8926C21.4551 15.9082 20.9082 16.4258 19.9414 16.4258ZM7.44141 16.7285L8.97461 16.7285L8.97461 1.29883L7.44141 1.29883ZM5.56641 5.21484C5.85938 5.21484 6.12305 4.95117 6.12305 4.66797C6.12305 4.375 5.85938 4.12109 5.56641 4.12109L3.4668 4.12109C3.17383 4.12109 2.91992 4.375 2.91992 4.66797C2.91992 4.95117 3.17383 5.21484 3.4668 5.21484ZM5.56641 7.74414C5.85938 7.74414 6.12305 7.48047 6.12305 7.1875C6.12305 6.89453 5.85938 6.65039 5.56641 6.65039L3.4668 6.65039C3.17383 6.65039 2.91992 6.89453 2.91992 7.1875C2.91992 7.48047 3.17383 7.74414 3.4668 7.74414ZM5.56641 10.2637C5.85938 10.2637 6.12305 10.0195 6.12305 9.72656C6.12305 9.43359 5.85938 9.17969 5.56641 9.17969L3.4668 9.17969C3.17383 9.17969 2.91992 9.43359 2.91992 9.72656C2.91992 10.0195 3.17383 10.2637 3.4668 10.2637Z\" fill=\"${color}\"/></g></svg>`;\nexport const Icons = {\n chevronLeft,\n chevronRight,\n sideBar\n};", "function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { Icons } from \"./icons\";\nconst EM_COLOR = \"#8C8C8C\";\nexport class FooterView {\n constructor(imageryDoc) {\n _defineProperty(this, \"root\", void 0);\n _defineProperty(this, \"prevPage\", void 0);\n _defineProperty(this, \"nextPage\", void 0);\n _defineProperty(this, \"sideBarToggle\", void 0);\n _defineProperty(this, \"sideBarContainer\", document.createElement(\"div\"));\n _defineProperty(this, \"isSlideBarVisible\", false);\n _defineProperty(this, \"imageryDoc\", void 0);\n _defineProperty(this, \"handleSideBarClick\", evt => {\n const target = evt.target;\n const targetIndex = target.getAttribute(\"data-doc-index\");\n if (targetIndex) {\n this.imageryDoc.goto(parseInt(targetIndex, 10));\n }\n });\n this.imageryDoc = imageryDoc;\n this.root = document.createElement(\"div\");\n this.root.style.height = \"24px\";\n this.root.style.zIndex = \"2\";\n this.root.style.display = \"flex\";\n this.root.style.alignItems = \"center\";\n this.root.style.backgroundColor = \"#fff\";\n this.root.style.borderTop = \"1px solid #f0f0f0\";\n this.prevPage = this.createIcon(Icons.chevronLeft(EM_COLOR), \"18px\", () => {\n this.imageryDoc.goto(this.imageryDoc.pageIndex - 1);\n });\n this.nextPage = this.createIcon(Icons.chevronRight(EM_COLOR), \"18px\", () => {\n this.imageryDoc.goto(this.imageryDoc.pageIndex + 1);\n });\n this.sideBarToggle = this.createIcon(Icons.sideBar(EM_COLOR), \"20px\", () => {\n this.createSideBar();\n this.isSlideBarVisible = !this.isSlideBarVisible;\n if (this.isSlideBarVisible) {\n this.sideBarContainer.style.display = \"block\";\n } else {\n this.sideBarContainer.style.display = \"none\";\n }\n });\n this.root.appendChild(this.sideBarToggle);\n this.root.appendChild(this.createSpacer());\n this.root.appendChild(this.prevPage);\n this.root.appendChild(this.nextPage);\n this.root.appendChild(this.createSpacer());\n }\n prevPageState(enable) {\n if (enable) {\n this.prevPage.style.pointerEvents = \"all\";\n this.prevPage.style.opacity = \"1\";\n } else {\n this.prevPage.style.pointerEvents = \"none\";\n this.prevPage.style.opacity = \"0.5\";\n }\n }\n nextPageState(enable) {\n if (enable) {\n this.nextPage.style.pointerEvents = \"all\";\n this.nextPage.style.opacity = \"1\";\n } else {\n this.nextPage.style.pointerEvents = \"none\";\n this.nextPage.style.opacity = \"0.5\";\n }\n }\n createSpacer() {\n const div = document.createElement(\"div\");\n div.style.flex = \"1 1 auto\";\n return div;\n }\n createIcon(svgContent, size, action) {\n const icon = document.createElement(\"div\");\n icon.style.width = size;\n icon.style.height = size;\n icon.style.borderRadius = \"2px\";\n icon.style.margin = \"6px\";\n icon.innerHTML = svgContent;\n icon.addEventListener(\"click\", () => {\n action();\n });\n icon.addEventListener(\"mouseover\", () => {\n icon.style.backgroundColor = \"#f0f0f0\";\n });\n icon.addEventListener(\"mouseout\", () => {\n icon.style.backgroundColor = \"transparent\";\n });\n return icon;\n }\n createSideBar() {\n if (this.imageryDoc.pageCount === 0) {\n return;\n }\n if (this.root.contains(this.sideBarContainer)) {\n return;\n }\n this.sideBarContainer.style.width = \"24%\";\n this.sideBarContainer.style.maxWidth = \"180px\";\n this.sideBarContainer.style.height = \"calc(100% - 24px)\";\n this.sideBarContainer.style.position = \"absolute\";\n this.sideBarContainer.style.bottom = \"24px\";\n this.sideBarContainer.style.left = \"0\";\n this.sideBarContainer.style.fontSize = \"0px\";\n this.sideBarContainer.style.overflow = \"auto\";\n this.sideBarContainer.style.backgroundColor = \"#EFEFEF\";\n this.root.appendChild(this.sideBarContainer);\n for (let i = 0, l = this.imageryDoc.pageCount; i < l; i++) {\n const reviewPage = document.createElement(\"div\");\n reviewPage.style.width = \"100%\";\n reviewPage.style.marginTop = \"12px\";\n const reviewIndex = document.createElement(\"div\");\n reviewIndex.style.cssText = \"font-size:12px;width:100%;text-align:center;height:24px;line-height:24px;color:#585858\";\n reviewIndex.textContent = `${i + 1}`;\n const reviewImg = document.createElement(\"img\");\n reviewImg.setAttribute(\"data-doc-index\", `${i}`);\n reviewImg.style.cssText = \"width:80%;margin:0 10%;box-shadow:1px 1px 5px #9e9e9e\";\n this.imageryDoc.imgContent(i).then(base64Data => {\n reviewImg.src = base64Data;\n });\n reviewPage.appendChild(reviewImg);\n reviewPage.appendChild(reviewIndex);\n this.sideBarContainer.appendChild(reviewPage);\n }\n this.sideBarContainer.addEventListener(\"click\", this.handleSideBarClick);\n }\n}", "function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport EventEmitter from \"eventemitter3\";\nexport class InfinityScroll extends EventEmitter {\n constructor(view) {\n super();\n _defineProperty(this, \"view\", void 0);\n _defineProperty(this, \"lastDelta\", {\n x: 0,\n y: 0\n });\n _defineProperty(this, \"lastTriggerTime\", 0);\n _defineProperty(this, \"handleWheel\", evt => {\n evt.preventDefault();\n evt.stopImmediatePropagation();\n evt.stopPropagation();\n if (Date.now() - this.lastTriggerTime < 32) {\n this.lastDelta.y += evt.deltaY;\n this.lastDelta.x += evt.deltaX;\n return;\n }\n if (evt.ctrlKey) {\n // \u53CC\u6307\u634F\u5408\n // @ts-ignore\n const wheelDelta = Math.sign(evt.wheelDelta || 100) * 120;\n const deltaY = evt.deltaY + this.lastDelta.y;\n let scale;\n if (deltaY > 0) {\n scale = Math.max(1 - Math.abs(deltaY / wheelDelta), 0.00000001);\n } else {\n // \u653E\u5927\n scale = 1 + Math.abs(deltaY / wheelDelta);\n }\n scale = Math.max(0.9, scale);\n scale = Math.min(1.1, scale);\n this.emit(\"scale\", scale);\n } else {\n // \u62D6\u52A8\n const deltaX = this.lastDelta.x + evt.deltaX;\n const deltaY = this.lastDelta.y + evt.deltaY;\n this.emit(\"translate\", deltaX, deltaY);\n }\n this.lastTriggerTime = Date.now();\n this.lastDelta = {\n x: 0,\n y: 0\n };\n });\n this.view = view;\n this.view.addEventListener(\"wheel\", this.handleWheel, {\n passive: false,\n capture: true\n });\n }\n dispose() {\n this.view.removeEventListener(\"wheel\", this.handleWheel);\n }\n}", "export const ContainerKeys = {\n scale: \"scale\",\n translateX: \"translateX\",\n translateY: \"translateY\",\n pageIndex: \"pageIndex\"\n};", "function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { InfinityScroll } from \"./InfinityScroll\";\nimport { ContainerKeys } from \"./Container\";\nexport class ContinuousContainer {\n get translateY() {\n return this.map.get(ContainerKeys.translateY);\n }\n set translateY(value) {\n this.map.set(ContainerKeys.translateY, value);\n }\n get pageIndex() {\n const step = 1 / this.images.length;\n for (let i = 0; i < this.images.length; i++) {\n if (this.translateY < step * i && Math.abs(this.translateY - step * i) >= 0.0001) {\n return i - 1;\n }\n }\n return this.images.length - 1;\n }\n constructor(map, whiteboardApp, parentView, imageDoc) {\n _defineProperty(this, \"view\", void 0);\n _defineProperty(this, \"parentView\", void 0);\n _defineProperty(this, \"resizeObserver\", void 0);\n _defineProperty(this, \"images\", []);\n _defineProperty(this, \"scroll\", void 0);\n _defineProperty(this, \"map\", void 0);\n _defineProperty(this, \"whiteboardApp\", void 0);\n _defineProperty(this, \"imageDoc\", void 0);\n _defineProperty(this, \"totalHeight\", 0);\n _defineProperty(this, \"localScale\", 1);\n _defineProperty(this, \"handleMapChange\", event => {\n if (event.keysChanged.has(ContainerKeys.translateY)) {\n this.updateSyncedTransform();\n }\n });\n _defineProperty(this, \"handleResize\", () => {\n const bound = this.view.getBoundingClientRect();\n let scaledHeight = 0;\n for (const image of this.images) {\n let scale = bound.width / image.width;\n image.scale(scale);\n scaledHeight += image.height * scale;\n }\n this.localScale = scaledHeight / this.totalHeight;\n this.whiteboardApp.updateOptionSize(bound.width, bound.height);\n this.whiteboardApp.adjustByOutFrame(bound.width, bound.height);\n this.updateSyncedTransform();\n });\n _defineProperty(this, \"updateSyncedTransform\", () => {\n const bounds = this.view.getBoundingClientRect();\n const maxTy = this.totalHeight * this.localScale - bounds.height;\n let ty = this.translateY * this.totalHeight * this.localScale;\n ty = Math.min(ty, maxTy);\n ty = Math.max(ty, 0);\n this.view.style.transform = `translate(0, ${-ty}px)`;\n this.whiteboardApp.emitter.resetCamera();\n this.whiteboardApp.emitter.translateCamera(0, -ty);\n this.whiteboardApp.emitter.scaleCamera(this.localScale, \"top-left\");\n console.log(\"localScale: \", this.localScale, this.translateY);\n this.handleGoto(this.pageIndex);\n });\n this.imageDoc = imageDoc;\n this.parentView = parentView;\n this.map = map;\n this.scroll = new InfinityScroll(this.parentView);\n this.whiteboardApp = whiteboardApp;\n this.view = document.createElement(\"div\");\n this.view.style.width = \"100%\";\n this.view.style.height = \"100%\";\n this.view.style.position = \"absolute\";\n this.view.style.top = \"0\";\n this.view.style.left = \"0\";\n this.view.style.transformOrigin = \"0, 0\";\n this.view.setAttribute(\"data-imagery-container\", \"continuous\");\n this.resizeObserver = new ResizeObserver(this.handleResize);\n this.resizeObserver.observe(this.view);\n this.whiteboardApp.updateInternalResizeObserverStatus(false);\n this.map.observe(this.handleMapChange);\n if (!this.map.has(ContainerKeys.scale)) {\n this.map.set(ContainerKeys.scale, 1);\n }\n if (!this.map.has(ContainerKeys.translateX)) {\n this.map.set(ContainerKeys.translateX, 0);\n }\n if (!this.map.has(ContainerKeys.translateY)) {\n this.map.set(ContainerKeys.translateY, 0);\n }\n this.scroll.on(\"translate\", (dx, dy) => {\n this.handleTranslate(dx, dy);\n });\n }\n init() {\n this.updateSyncedTransform();\n this.totalHeight = this.images.reduce((prev, curr) => prev + curr.height, 0);\n }\n handleTranslate(dx, dy) {\n const dyNormalized = dy / this.totalHeight;\n let nextTy = this.translateY + dyNormalized;\n nextTy = Math.max(0, nextTy);\n nextTy = Math.min(1, nextTy);\n this.translateY = nextTy;\n }\n goto(index) {\n let nextIndex = Math.max(0, index);\n nextIndex = Math.min(this.images.length - 1, nextIndex);\n this.translateY = nextIndex / this.images.length;\n }\n append(image) {\n this.images.push(image);\n this.view.appendChild(image.view);\n }\n async handleGoto(index) {\n if (index < 0 || index >= this.images.length) {\n return;\n }\n this.imageDoc.emit(\"renderStart\", index);\n const target = this.images[index];\n if (target) {\n await target.prepare();\n }\n this.imageDoc.emit(\"renderEnd\", index);\n for (let i = index - 3; i <= index + 3; i++) {\n const img = this.images[i];\n if (img) {\n img.prepare();\n }\n }\n }\n dispose() {\n this.resizeObserver.disconnect();\n this.scroll.dispose();\n }\n}", "function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { InfinityScroll } from \"./InfinityScroll\";\nimport { ContainerKeys } from \"./Container\";\nexport const delay = value => new Promise(resolve => setTimeout(resolve, value));\nasync function waitUntil(fn, timeout) {\n let start = Date.now();\n while (!fn() && Date.now() - start < timeout) {\n await delay(50);\n start = Date.now();\n }\n}\nexport class SingleContainer {\n get scale() {\n return this.map.get(ContainerKeys.scale);\n }\n set scale(value) {\n this.map.set(ContainerKeys.scale, value);\n }\n get translateX() {\n return this.map.get(ContainerKeys.translateX);\n }\n set translateX(value) {\n this.map.set(ContainerKeys.translateX, value);\n }\n get translateY() {\n return this.map.get(ContainerKeys.translateY);\n }\n set translateY(value) {\n this.map.set(ContainerKeys.translateY, value);\n }\n get pageIndex() {\n return this.map.get(ContainerKeys.pageIndex);\n }\n constructor(map, whiteboardApp, parentView, imageDoc) {\n _defineProperty(this, \"view\", void 0);\n _defineProperty(this, \"parentView\", void 0);\n _defineProperty(this, \"resizeObserver\", void 0);\n _defineProperty(this, \"images\", []);\n _defineProperty(this, \"currentImage\", null);\n _defineProperty(this, \"scroll\", void 0);\n _defineProperty(this, \"map\", void 0);\n _defineProperty(this, \"whiteboardApp\", void 0);\n _defineProperty(this, \"timeoutId\", null);\n _defineProperty(this, \"imageDoc\", void 0);\n _defineProperty(this, \"handleMapChange\", event => {\n if (event.keysChanged.has(ContainerKeys.scale) || event.keysChanged.has(ContainerKeys.translateX) || event.keysChanged.has(ContainerKeys.translateY)) {\n this.updateSyncedTransform();\n }\n if (event.keysChanged.has(ContainerKeys.pageIndex)) {\n this.handleGoto(this.pageIndex).catch(error => {\n // todo error\n });\n }\n });\n _defineProperty(this, \"handleResize\", () => {\n const bound = this.parentView.getBoundingClientRect();\n if (this.currentImage) {\n let scale = bound.width / this.currentImage.width;\n if (this.currentImage.height * scale > bound.height) {\n scale = bound.height / this.currentImage.height;\n }\n const tx = Math.round((bound.width - this.currentImage.width * scale) / 2 / scale);\n const ty = Math.round((bound.height - this.currentImage.height * scale) / 2 / scale);\n this.currentImage.view.style.transform = `scale(${scale}) translate(${tx}px, ${ty}px)`;\n this.updateSyncedTransform();\n }\n });\n _defineProperty(this, \"updateSyncedTransform\", () => {\n if (!this.currentImage) {\n return;\n }\n const parentBounds = this.parentView.getBoundingClientRect();\n const tx = -this.translateX * parentBounds.width / this.scale;\n const ty = -this.translateY * parentBounds.height / this.scale;\n this.view.style.transform = `scale(${this.scale}) translate(${tx}px, ${ty}px)`;\n const whiteboardView = this.whiteboardApp.emitter.view;\n whiteboardView.style.width = `${parentBounds.width}px`;\n whiteboardView.style.height = `${parentBounds.height}px`;\n whiteboardView.style.top = \"0\";\n whiteboardView.style.left = \"0\";\n whiteboardView.style.transform = `scale(${this.scale}) translate(${tx}px, ${ty}px)`;\n this.whiteboardApp.adjustByOutFrame(parentBounds.width, parentBounds.height);\n window.clearTimeout(this.timeoutId);\n this.timeoutId = window.setTimeout(() => {\n whiteboardView.style.width = `${parentBounds.width * this.scale}px`;\n whiteboardView.style.height = `${parentBounds.height * this.scale}px`;\n whiteboardView.style.top = `${-(this.scale - 1) * parentBounds.height / 2 + ty * this.scale}px`;\n whiteboardView.style.left = `${-(this.scale - 1) * parentBounds.width / 2 + tx * this.scale}px`;\n whiteboardView.style.transform = `scale(1) translate(0px, 0px)`;\n this.whiteboardApp.adjustByOutFrame(parentBounds.width * this.scale, parentBounds.height * this.scale);\n }, 200);\n });\n this.imageDoc = imageDoc;\n this.parentView = parentView;\n this.map = map;\n this.scroll = new InfinityScroll(this.parentView);\n this.whiteboardApp = whiteboardApp;\n this.view = document.createElement(\"div\");\n this.view.style.width = \"100%\";\n this.view.style.height = \"100%\";\n this.view.style.position = \"absolute\";\n this.view.style.top = \"0\";\n this.view.style.left = \"0\";\n this.view.style.transformOrigin = \"center\";\n this.view.setAttribute(\"data-imagery-container\", \"single\");\n this.resizeObserver = new ResizeObserver(this.handleResize);\n this.resizeObserver.observe(this.view);\n window.imageWhiteboard = this.whiteboardApp;\n this.whiteboardApp.updateInternalResizeObserverStatus(false);\n this.map.observe(this.handleMapChange);\n if (!this.map.has(ContainerKeys.scale)) {\n this.map.set(ContainerKeys.scale, 1);\n }\n if (!this.map.has(ContainerKeys.translateX)) {\n this.map.set(ContainerKeys.translateX, 0);\n }\n if (!this.map.has(ContainerKeys.translateY)) {\n this.map.set(ContainerKeys.translateY, 0);\n }\n if (!this.map.has(ContainerKeys.pageIndex)) {\n this.map.set(ContainerKeys.pageIndex, 0);\n }\n this.scroll.on(\"translate\", (dx, dy) => {\n this.handleTranslate(dx, dy);\n });\n this.scroll.on(\"scale\", scale => {\n let nextScale = this.scale * scale;\n nextScale = Math.max(1, nextScale);\n nextScale = Math.min(2, nextScale);\n this.scale = nextScale;\n this.handleTranslate(0, 0);\n });\n }\n init() {\n this.handleGoto(this.pageIndex).catch(error => {\n // todo error\n });\n this.updateSyncedTransform();\n }\n handleTranslate(dx, dy) {\n const image = this.view.children[0];\n if (!image) {\n return;\n }\n const imageBounds = image.getBoundingClientRect();\n const parentBounds = this.parentView.getBoundingClientRect();\n const maxDx = (imageBounds.width - parentBounds.width) / 2;\n const maxDy = (imageBounds.height - parentBounds.height) / 2;\n if (maxDx > 0) {\n let nextDx = this.translateX * parentBounds.width + dx;\n if (nextDx >= 0) {\n nextDx = Math.min(nextDx, maxDx);\n } else {\n nextDx = Math.max(nextDx, -maxDx);\n }\n this.translateX = nextDx / parentBounds.width;\n } else {\n this.translateX = 0;\n }\n if (maxDy > 0) {\n let nextDy = this.translateY * parentBounds.height + dy;\n if (nextDy >= 0) {\n nextDy = Math.min(nextDy, maxDy);\n } else {\n nextDy = Math.max(nextDy, -maxDy);\n }\n this.translateY = nextDy / parentBounds.height;\n } else {\n this.translateY = 0;\n }\n }\n goto(index) {\n let nextIndex = Math.max(0, index);\n nextIndex = Math.min(this.images.length - 1, nextIndex);\n this.map.set(ContainerKeys.pageIndex, nextIndex);\n }\n append(image) {\n this.images.push(image);\n }\n async handleGoto(index) {\n await waitUntil(() => this.images.length > 0, 3000);\n if (index < 0 || index >= this.images.length) {\n return;\n }\n this.imageDoc.emit(\"renderStart\", index);\n if (this.view.children[0]) {\n this.view.removeChild(this.view.children[0]);\n }\n this.whiteboardApp.emitter.view.style.opacity = \"0\";\n const target = this.images[index];\n if (target) {\n await target.prepare();\n this.view.appendChild(target.view);\n this.currentImage = target;\n this.whiteboardApp.emitter.gotoPage(`doc_${index}`);\n this.whiteboardApp.updateOptionSize(this.currentImage.width, this.currentImage.height);\n this.whiteboardApp.emitter.view.style.opacity = \"1\";\n this.handleResize();\n }\n this.imageDoc.emit(\"renderEnd\", index);\n for (let i = index - 3; i <= index + 3; i++) {\n const img = this.images[i];\n if (img) {\n img.prepare();\n }\n }\n }\n dispose() {\n this.resizeObserver.disconnect();\n this.scroll.dispose();\n window.clearTimeout(this.timeoutId);\n }\n}"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["EventEmitter", "import_forge_room", "_defineProperty", "_toPropertyKey", "_toPrimitive", "import_eventemitter3", "_defineProperty", "_toPropertyKey", "_toPrimitive", "ImageryDocPermissionFlag", "EventEmitter", "_defineProperty", "_toPropertyKey", "_toPrimitive", "import_eventemitter3", "_defineProperty", "_toPropertyKey", "_toPrimitive", "EventEmitter", "_defineProperty", "_toPropertyKey", "_toPrimitive", "_defineProperty", "_toPropertyKey", "_toPrimitive", "_defineProperty", "_toPropertyKey", "_toPrimitive"]
|
|
7
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { ImageryDoc } from "./ImageryDoc";
|
|
2
|
+
export { ImageryDocApplication } from "./ImageryDocApplication";
|
|
3
|
+
export { ImageryDocPermissionFlag } from "./ImageryDocPermissions";
|
|
4
|
+
export type { ImageryDocOption } from "./ImageryDocApplication";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InfinityScrollor.d.ts","sourceRoot":"","sources":["../src/InfinityScrollor.ts"],"names":[],"mappings":"AAAA,qBAAa,cAAc;IAEvB,SAAgB,IAAI,EAAE,cAAc,CAAC;;CAKxC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@netless/forge-imagery-doc",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "",
|
|
5
|
+
"main": "dist/imagery-doc.js",
|
|
6
|
+
"module": "dist/imagery-doc.esm.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"type": "module",
|
|
9
|
+
"keywords": [],
|
|
10
|
+
"author": "",
|
|
11
|
+
"license": "ISC",
|
|
12
|
+
"peerDependencies": {
|
|
13
|
+
"eventemitter3": "^5.0.1",
|
|
14
|
+
"yjs": "^13.6.18",
|
|
15
|
+
"localforage": "^1.10.0",
|
|
16
|
+
"@netless/forge-room": "0.1.8",
|
|
17
|
+
"@netless/forge-whiteboard": "0.1.14"
|
|
18
|
+
},
|
|
19
|
+
"scripts": {
|
|
20
|
+
"dev": "onChange 'src/**/*' -- npm run build",
|
|
21
|
+
"build": "tsc --emitDeclarationOnly && node build.mjs"
|
|
22
|
+
}
|
|
23
|
+
}
|
package/src/Container.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type {LazyImage} from "./LazyImage";
|
|
2
|
+
|
|
3
|
+
export interface Container {
|
|
4
|
+
readonly view: HTMLDivElement;
|
|
5
|
+
readonly pageIndex: number;
|
|
6
|
+
append(image: LazyImage): void;
|
|
7
|
+
goto(index: number): void;
|
|
8
|
+
init(): void;
|
|
9
|
+
dispose(): void;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export const ContainerKeys = {
|
|
13
|
+
scale: "scale",
|
|
14
|
+
translateX: "translateX",
|
|
15
|
+
translateY: "translateY",
|
|
16
|
+
pageIndex: "pageIndex"
|
|
17
|
+
}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import {LazyImage} from "./LazyImage";
|
|
2
|
+
import {InfinityScroll} from "./InfinityScroll";
|
|
3
|
+
import * as Y from "yjs";
|
|
4
|
+
import {WhiteboardApplication} from "@netless/forge-whiteboard";
|
|
5
|
+
import type {ImageryDoc} from "./ImageryDoc";
|
|
6
|
+
import {Container, ContainerKeys} from "./Container";
|
|
7
|
+
|
|
8
|
+
export class ContinuousContainer implements Container {
|
|
9
|
+
public readonly view: HTMLDivElement;
|
|
10
|
+
private parentView: HTMLDivElement;
|
|
11
|
+
private resizeObserver!: ResizeObserver;
|
|
12
|
+
private images: LazyImage[] = [];
|
|
13
|
+
private scroll: InfinityScroll;
|
|
14
|
+
private map: Y.Map<any>;
|
|
15
|
+
private whiteboardApp: WhiteboardApplication;
|
|
16
|
+
private imageDoc: ImageryDoc;
|
|
17
|
+
private totalHeight: number = 0;
|
|
18
|
+
private localScale: number = 1;
|
|
19
|
+
|
|
20
|
+
private get translateY(): number {
|
|
21
|
+
return this.map.get(ContainerKeys.translateY);
|
|
22
|
+
}
|
|
23
|
+
private set translateY(value: number) {
|
|
24
|
+
this.map.set(ContainerKeys.translateY, value);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
public get pageIndex(): number {
|
|
28
|
+
const step = 1 / this.images.length;
|
|
29
|
+
for (let i = 0; i < this.images.length; i++) {
|
|
30
|
+
if (this.translateY < step * i && Math.abs(this.translateY - step * i) >= 0.0001) {
|
|
31
|
+
return i - 1;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return this.images.length - 1;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
public constructor(
|
|
38
|
+
map: Y.Map<any>,
|
|
39
|
+
whiteboardApp: WhiteboardApplication,
|
|
40
|
+
parentView: HTMLDivElement,
|
|
41
|
+
imageDoc: ImageryDoc,
|
|
42
|
+
) {
|
|
43
|
+
this.imageDoc = imageDoc;
|
|
44
|
+
this.parentView = parentView;
|
|
45
|
+
this.map = map;
|
|
46
|
+
this.scroll = new InfinityScroll(this.parentView);
|
|
47
|
+
this.whiteboardApp = whiteboardApp;
|
|
48
|
+
this.view = document.createElement("div");
|
|
49
|
+
this.view.style.width = "100%";
|
|
50
|
+
this.view.style.height = "100%";
|
|
51
|
+
this.view.style.position = "absolute";
|
|
52
|
+
this.view.style.top = "0";
|
|
53
|
+
this.view.style.left = "0";
|
|
54
|
+
this.view.style.transformOrigin = "0, 0";
|
|
55
|
+
this.view.setAttribute("data-imagery-container", "continuous");
|
|
56
|
+
|
|
57
|
+
this.resizeObserver = new ResizeObserver(this.handleResize);
|
|
58
|
+
this.resizeObserver.observe(this.view);
|
|
59
|
+
|
|
60
|
+
this.whiteboardApp.updateInternalResizeObserverStatus(false);
|
|
61
|
+
this.map.observe(this.handleMapChange);
|
|
62
|
+
if (!this.map.has(ContainerKeys.scale)) {
|
|
63
|
+
this.map.set(ContainerKeys.scale, 1);
|
|
64
|
+
}
|
|
65
|
+
if (!this.map.has(ContainerKeys.translateX)) {
|
|
66
|
+
this.map.set(ContainerKeys.translateX, 0);
|
|
67
|
+
}
|
|
68
|
+
if (!this.map.has(ContainerKeys.translateY)) {
|
|
69
|
+
this.map.set(ContainerKeys.translateY, 0);
|
|
70
|
+
}
|
|
71
|
+
this.scroll.on("translate", (dx, dy) => {
|
|
72
|
+
this.handleTranslate(dx, dy);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
public init() {
|
|
77
|
+
this.updateSyncedTransform();
|
|
78
|
+
this.totalHeight = this.images.reduce((prev, curr) => prev + curr.height, 0);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
private handleTranslate(dx: number, dy: number) {
|
|
82
|
+
const dyNormalized = dy / this.totalHeight;
|
|
83
|
+
let nextTy = this.translateY + dyNormalized;
|
|
84
|
+
nextTy = Math.max(0, nextTy);
|
|
85
|
+
nextTy = Math.min(1, nextTy);
|
|
86
|
+
this.translateY = nextTy;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
private handleMapChange = (event: Y.YMapEvent<any>) => {
|
|
90
|
+
if (event.keysChanged.has(ContainerKeys.translateY)
|
|
91
|
+
) {
|
|
92
|
+
this.updateSyncedTransform();
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
public goto(index: number) {
|
|
97
|
+
let nextIndex = Math.max(0, index);
|
|
98
|
+
nextIndex = Math.min(this.images.length - 1, nextIndex);
|
|
99
|
+
this.translateY = nextIndex / this.images.length;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
public append(image: LazyImage) {
|
|
103
|
+
this.images.push(image);
|
|
104
|
+
this.view.appendChild(image.view);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
private async handleGoto(index: number): Promise<void> {
|
|
108
|
+
if (index < 0 || index >= this.images.length) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
this.imageDoc.emit("renderStart", index);
|
|
112
|
+
const target = this.images[index];
|
|
113
|
+
if (target) {
|
|
114
|
+
await target.prepare();
|
|
115
|
+
}
|
|
116
|
+
this.imageDoc.emit("renderEnd", index);
|
|
117
|
+
for (let i = index - 3; i <= index + 3; i++) {
|
|
118
|
+
const img = this.images[i];
|
|
119
|
+
if (img) {
|
|
120
|
+
img.prepare();
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
private handleResize = () => {
|
|
126
|
+
const bound = this.view.getBoundingClientRect();
|
|
127
|
+
let scaledHeight = 0;
|
|
128
|
+
for (const image of this.images) {
|
|
129
|
+
let scale = bound.width / image.width;
|
|
130
|
+
image.scale(scale);
|
|
131
|
+
scaledHeight += image.height * scale;
|
|
132
|
+
}
|
|
133
|
+
this.localScale = scaledHeight / this.totalHeight;
|
|
134
|
+
this.whiteboardApp.updateOptionSize(bound.width, bound.height);
|
|
135
|
+
this.whiteboardApp.adjustByOutFrame(bound.width, bound.height);
|
|
136
|
+
this.updateSyncedTransform();
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
private updateSyncedTransform = () => {
|
|
140
|
+
const bounds = this.view.getBoundingClientRect();
|
|
141
|
+
const maxTy = this.totalHeight * this.localScale - bounds.height;
|
|
142
|
+
let ty = this.translateY * this.totalHeight * this.localScale;
|
|
143
|
+
ty = Math.min(ty, maxTy);
|
|
144
|
+
ty = Math.max(ty, 0);
|
|
145
|
+
this.view.style.transform = `translate(0, ${-ty}px)`;
|
|
146
|
+
this.whiteboardApp.emitter.resetCamera();
|
|
147
|
+
this.whiteboardApp.emitter.translateCamera(0, -ty);
|
|
148
|
+
this.whiteboardApp.emitter.scaleCamera(this.localScale, "top-left");
|
|
149
|
+
console.log("localScale: ", this.localScale, this.translateY);
|
|
150
|
+
this.handleGoto(this.pageIndex);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
public dispose() {
|
|
154
|
+
this.resizeObserver.disconnect();
|
|
155
|
+
this.scroll.dispose();
|
|
156
|
+
}
|
|
157
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { Icons } from "./icons";
|
|
2
|
+
import {ImageryDoc} from "./ImageryDoc";
|
|
3
|
+
|
|
4
|
+
const EM_COLOR = "#8C8C8C";
|
|
5
|
+
|
|
6
|
+
export class FooterView {
|
|
7
|
+
|
|
8
|
+
public readonly root: HTMLDivElement;
|
|
9
|
+
|
|
10
|
+
private prevPage: HTMLDivElement;
|
|
11
|
+
private nextPage: HTMLDivElement;
|
|
12
|
+
private sideBarToggle: HTMLDivElement;
|
|
13
|
+
private sideBarContainer: HTMLDivElement = document.createElement("div");
|
|
14
|
+
|
|
15
|
+
private isSlideBarVisible: boolean = false;
|
|
16
|
+
private imageryDoc: ImageryDoc;
|
|
17
|
+
|
|
18
|
+
public constructor(imageryDoc: ImageryDoc) {
|
|
19
|
+
this.imageryDoc = imageryDoc;
|
|
20
|
+
this.root = document.createElement("div");
|
|
21
|
+
this.root.style.height = "24px";
|
|
22
|
+
this.root.style.zIndex = "2";
|
|
23
|
+
this.root.style.display = "flex";
|
|
24
|
+
this.root.style.alignItems = "center";
|
|
25
|
+
this.root.style.backgroundColor = "#fff";
|
|
26
|
+
this.root.style.borderTop = "1px solid #f0f0f0";
|
|
27
|
+
|
|
28
|
+
this.prevPage = this.createIcon(Icons.chevronLeft(EM_COLOR), "18px", () => {
|
|
29
|
+
this.imageryDoc.goto(this.imageryDoc.pageIndex - 1);
|
|
30
|
+
});
|
|
31
|
+
this.nextPage = this.createIcon(Icons.chevronRight(EM_COLOR), "18px", () => {
|
|
32
|
+
this.imageryDoc.goto(this.imageryDoc.pageIndex + 1);
|
|
33
|
+
});
|
|
34
|
+
this.sideBarToggle = this.createIcon(Icons.sideBar(EM_COLOR), "20px", () => {
|
|
35
|
+
this.createSideBar();
|
|
36
|
+
this.isSlideBarVisible = !this.isSlideBarVisible;
|
|
37
|
+
if (this.isSlideBarVisible) {
|
|
38
|
+
this.sideBarContainer.style.display = "block";
|
|
39
|
+
} else {
|
|
40
|
+
this.sideBarContainer.style.display = "none";
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
this.root.appendChild(this.sideBarToggle);
|
|
44
|
+
this.root.appendChild(this.createSpacer());
|
|
45
|
+
this.root.appendChild(this.prevPage);
|
|
46
|
+
this.root.appendChild(this.nextPage);
|
|
47
|
+
this.root.appendChild(this.createSpacer());
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
public prevPageState(enable: boolean): void {
|
|
51
|
+
if (enable) {
|
|
52
|
+
this.prevPage.style.pointerEvents = "all";
|
|
53
|
+
this.prevPage.style.opacity = "1";
|
|
54
|
+
} else {
|
|
55
|
+
this.prevPage.style.pointerEvents = "none";
|
|
56
|
+
this.prevPage.style.opacity = "0.5";
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
public nextPageState(enable: boolean): void {
|
|
61
|
+
if (enable) {
|
|
62
|
+
this.nextPage.style.pointerEvents = "all";
|
|
63
|
+
this.nextPage.style.opacity = "1";
|
|
64
|
+
} else {
|
|
65
|
+
this.nextPage.style.pointerEvents = "none";
|
|
66
|
+
this.nextPage.style.opacity = "0.5";
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
private createSpacer(): HTMLDivElement {
|
|
71
|
+
const div = document.createElement("div");
|
|
72
|
+
div.style.flex = "1 1 auto";
|
|
73
|
+
return div;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
private createIcon(svgContent: string, size: string, action: () => void): HTMLDivElement {
|
|
77
|
+
const icon = document.createElement("div");
|
|
78
|
+
icon.style.width = size;
|
|
79
|
+
icon.style.height = size;
|
|
80
|
+
icon.style.borderRadius = "2px";
|
|
81
|
+
icon.style.margin = "6px";
|
|
82
|
+
icon.innerHTML = svgContent;
|
|
83
|
+
icon.addEventListener("click", () => {
|
|
84
|
+
action();
|
|
85
|
+
});
|
|
86
|
+
icon.addEventListener("mouseover", () => {
|
|
87
|
+
icon.style.backgroundColor = "#f0f0f0";
|
|
88
|
+
});
|
|
89
|
+
icon.addEventListener("mouseout", () => {
|
|
90
|
+
icon.style.backgroundColor = "transparent";
|
|
91
|
+
});
|
|
92
|
+
return icon;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
private createSideBar() {
|
|
96
|
+
if (this.imageryDoc.pageCount === 0) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
if (this.root.contains(this.sideBarContainer)) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
this.sideBarContainer.style.width = "24%";
|
|
103
|
+
this.sideBarContainer.style.maxWidth = "180px";
|
|
104
|
+
this.sideBarContainer.style.height = "calc(100% - 24px)";
|
|
105
|
+
this.sideBarContainer.style.position = "absolute";
|
|
106
|
+
this.sideBarContainer.style.bottom = "24px";
|
|
107
|
+
this.sideBarContainer.style.left = "0";
|
|
108
|
+
this.sideBarContainer.style.fontSize = "0px";
|
|
109
|
+
this.sideBarContainer.style.overflow = "auto";
|
|
110
|
+
this.sideBarContainer.style.backgroundColor = "#EFEFEF";
|
|
111
|
+
this.root.appendChild(this.sideBarContainer);
|
|
112
|
+
for (let i = 0, l = this.imageryDoc.pageCount; i < l; i++) {
|
|
113
|
+
const reviewPage = document.createElement("div");
|
|
114
|
+
reviewPage.style.width = "100%";
|
|
115
|
+
reviewPage.style.marginTop = "12px";
|
|
116
|
+
const reviewIndex = document.createElement("div");
|
|
117
|
+
reviewIndex.style.cssText = "font-size:12px;width:100%;text-align:center;height:24px;line-height:24px;color:#585858";
|
|
118
|
+
reviewIndex.textContent = `${i + 1}`;
|
|
119
|
+
const reviewImg = document.createElement("img");
|
|
120
|
+
reviewImg.setAttribute("data-doc-index", `${i}`);
|
|
121
|
+
reviewImg.style.cssText = "width:80%;margin:0 10%;box-shadow:1px 1px 5px #9e9e9e";
|
|
122
|
+
this.imageryDoc.imgContent(i).then((base64Data) => {
|
|
123
|
+
reviewImg.src = base64Data;
|
|
124
|
+
});
|
|
125
|
+
reviewPage.appendChild(reviewImg);
|
|
126
|
+
reviewPage.appendChild(reviewIndex);
|
|
127
|
+
this.sideBarContainer.appendChild(reviewPage);
|
|
128
|
+
}
|
|
129
|
+
this.sideBarContainer.addEventListener("click", this.handleSideBarClick);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
private handleSideBarClick = (evt: MouseEvent) => {
|
|
133
|
+
const target = evt.target as HTMLElement;
|
|
134
|
+
const targetIndex = target.getAttribute("data-doc-index");
|
|
135
|
+
if (targetIndex) {
|
|
136
|
+
this.imageryDoc.goto(parseInt(targetIndex, 10));
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import EventEmitter from "eventemitter3";
|
|
2
|
+
import {ApplicationInstanceType} from "@netless/forge-room";
|
|
3
|
+
|
|
4
|
+
import {ImageryDocPermissionFlag, ImageryDocPermissions} from "./ImageryDocPermissions";
|
|
5
|
+
|
|
6
|
+
export interface ImageryDocEvents {
|
|
7
|
+
/**
|
|
8
|
+
* 当用户权限变更时触发
|
|
9
|
+
* @param { string } userId 对应 userId
|
|
10
|
+
* @param { ImageryDocPermissionFlag[] } flags 当前权限列表
|
|
11
|
+
* @param { number } value 权限值
|
|
12
|
+
*/
|
|
13
|
+
permissionChange: (userId: string, flags: ImageryDocPermissionFlag[], value: number) => void;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* 开始渲染页面时触发
|
|
17
|
+
* @param {number} pageIndex 页面索引
|
|
18
|
+
*/
|
|
19
|
+
renderStart: (pageIndex: number) => void;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* 页面渲染完成时触发
|
|
23
|
+
* @param {number} pageIndex 页面索引
|
|
24
|
+
*/
|
|
25
|
+
renderEnd: (pageIndex: number) => void;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
export class ImageryDoc extends EventEmitter<ImageryDocEvents> implements ApplicationInstanceType {
|
|
30
|
+
|
|
31
|
+
public readonly view!: HTMLDivElement;
|
|
32
|
+
/**
|
|
33
|
+
* 底部操作栏
|
|
34
|
+
*/
|
|
35
|
+
public readonly footView!: HTMLDivElement;
|
|
36
|
+
public readonly permissions!: ImageryDocPermissions;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* 当前页面索引, 从 0 开始
|
|
40
|
+
*/
|
|
41
|
+
public readonly pageIndex!: number;
|
|
42
|
+
/**
|
|
43
|
+
* 总页数
|
|
44
|
+
*/
|
|
45
|
+
public readonly pageCount!: number;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* 切换到参数指定页面, index 从 0 开始
|
|
49
|
+
* @param {number} index 页面索引
|
|
50
|
+
*/
|
|
51
|
+
public goto!: (index: number) => void;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* 获取图片内容, base64 编码
|
|
55
|
+
* @param {number} index 页面索引
|
|
56
|
+
*/
|
|
57
|
+
public imgContent!: (index: number) => Promise<string>;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* 获取图片尺寸
|
|
61
|
+
* @param {number} index 页面索引
|
|
62
|
+
*/
|
|
63
|
+
public imgSize!: (index: number) => {width: number, height: number};
|
|
64
|
+
}
|