@fiduswriter/document 0.1.0-alpha.4 → 0.1.0-alpha.5

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.
Files changed (550) hide show
  1. package/dist/bibliography/common.d.ts +9 -91
  2. package/dist/bibliography/common.d.ts.map +1 -1
  3. package/dist/bibliography/common.js +3 -2
  4. package/dist/bibliography/common.js.map +1 -1
  5. package/dist/bibliography/csl_bib.d.ts +1 -1
  6. package/dist/bibliography/csl_bib.d.ts.map +1 -1
  7. package/dist/bibliography/csl_bib.js +7 -7
  8. package/dist/bibliography/csl_bib.js.map +1 -1
  9. package/dist/citations/citeproc_sys.d.ts +9 -10
  10. package/dist/citations/citeproc_sys.d.ts.map +1 -1
  11. package/dist/citations/citeproc_sys.js +6 -1
  12. package/dist/citations/citeproc_sys.js.map +1 -1
  13. package/dist/citations/format.d.ts +33 -16
  14. package/dist/citations/format.d.ts.map +1 -1
  15. package/dist/citations/format.js +29 -4
  16. package/dist/citations/format.js.map +1 -1
  17. package/dist/editor/e2ee/encryptor.d.ts +35 -35
  18. package/dist/editor/e2ee/encryptor.d.ts.map +1 -1
  19. package/dist/editor/e2ee/encryptor.js +31 -31
  20. package/dist/editor/e2ee/encryptor.js.map +1 -1
  21. package/dist/exporter/docx/citations.d.ts +27 -17
  22. package/dist/exporter/docx/citations.d.ts.map +1 -1
  23. package/dist/exporter/docx/citations.js +24 -7
  24. package/dist/exporter/docx/citations.js.map +1 -1
  25. package/dist/exporter/docx/comments.d.ts +15 -11
  26. package/dist/exporter/docx/comments.d.ts.map +1 -1
  27. package/dist/exporter/docx/comments.js +47 -14
  28. package/dist/exporter/docx/comments.js.map +1 -1
  29. package/dist/exporter/docx/footnotes.d.ts +36 -31
  30. package/dist/exporter/docx/footnotes.d.ts.map +1 -1
  31. package/dist/exporter/docx/footnotes.js +46 -12
  32. package/dist/exporter/docx/footnotes.js.map +1 -1
  33. package/dist/exporter/docx/images.d.ts +23 -12
  34. package/dist/exporter/docx/images.d.ts.map +1 -1
  35. package/dist/exporter/docx/images.js +35 -20
  36. package/dist/exporter/docx/images.js.map +1 -1
  37. package/dist/exporter/docx/index.d.ts +11 -17
  38. package/dist/exporter/docx/index.d.ts.map +1 -1
  39. package/dist/exporter/docx/index.js +15 -7
  40. package/dist/exporter/docx/index.js.map +1 -1
  41. package/dist/exporter/docx/lists.d.ts +27 -22
  42. package/dist/exporter/docx/lists.d.ts.map +1 -1
  43. package/dist/exporter/docx/lists.js +77 -30
  44. package/dist/exporter/docx/lists.js.map +1 -1
  45. package/dist/exporter/docx/math.d.ts +9 -9
  46. package/dist/exporter/docx/math.d.ts.map +1 -1
  47. package/dist/exporter/docx/math.js +22 -5
  48. package/dist/exporter/docx/math.js.map +1 -1
  49. package/dist/exporter/docx/metadata.d.ts +12 -9
  50. package/dist/exporter/docx/metadata.d.ts.map +1 -1
  51. package/dist/exporter/docx/metadata.js +59 -26
  52. package/dist/exporter/docx/metadata.js.map +1 -1
  53. package/dist/exporter/docx/rels.d.ts +14 -12
  54. package/dist/exporter/docx/rels.d.ts.map +1 -1
  55. package/dist/exporter/docx/rels.js +37 -22
  56. package/dist/exporter/docx/rels.js.map +1 -1
  57. package/dist/exporter/docx/render.d.ts +17 -15
  58. package/dist/exporter/docx/render.d.ts.map +1 -1
  59. package/dist/exporter/docx/render.js +37 -31
  60. package/dist/exporter/docx/render.js.map +1 -1
  61. package/dist/exporter/docx/richtext.d.ts +8 -8
  62. package/dist/exporter/docx/richtext.d.ts.map +1 -1
  63. package/dist/exporter/docx/richtext.js +61 -43
  64. package/dist/exporter/docx/richtext.js.map +1 -1
  65. package/dist/exporter/docx/tables.d.ts +11 -9
  66. package/dist/exporter/docx/tables.d.ts.map +1 -1
  67. package/dist/exporter/docx/tables.js +16 -10
  68. package/dist/exporter/docx/tables.js.map +1 -1
  69. package/dist/exporter/docx/tools.d.ts +3 -2
  70. package/dist/exporter/docx/tools.d.ts.map +1 -1
  71. package/dist/exporter/docx/tools.js +3 -3
  72. package/dist/exporter/docx/tools.js.map +1 -1
  73. package/dist/exporter/epub/index.d.ts +11 -3
  74. package/dist/exporter/epub/index.d.ts.map +1 -1
  75. package/dist/exporter/epub/index.js +10 -3
  76. package/dist/exporter/epub/index.js.map +1 -1
  77. package/dist/exporter/epub/templates.d.ts +62 -31
  78. package/dist/exporter/epub/templates.d.ts.map +1 -1
  79. package/dist/exporter/epub/templates.js +1 -1
  80. package/dist/exporter/epub/templates.js.map +1 -1
  81. package/dist/exporter/epub/tools.d.ts +12 -4
  82. package/dist/exporter/epub/tools.d.ts.map +1 -1
  83. package/dist/exporter/epub/tools.js +14 -13
  84. package/dist/exporter/epub/tools.js.map +1 -1
  85. package/dist/exporter/html/citations.d.ts +17 -15
  86. package/dist/exporter/html/citations.d.ts.map +1 -1
  87. package/dist/exporter/html/citations.js +37 -18
  88. package/dist/exporter/html/citations.js.map +1 -1
  89. package/dist/exporter/html/convert.d.ts +20 -70
  90. package/dist/exporter/html/convert.d.ts.map +1 -1
  91. package/dist/exporter/html/convert.js +74 -42
  92. package/dist/exporter/html/convert.js.map +1 -1
  93. package/dist/exporter/html/index.d.ts +55 -52
  94. package/dist/exporter/html/index.d.ts.map +1 -1
  95. package/dist/exporter/html/index.js +23 -3
  96. package/dist/exporter/html/index.js.map +1 -1
  97. package/dist/exporter/html/templates.d.ts +23 -9
  98. package/dist/exporter/html/templates.d.ts.map +1 -1
  99. package/dist/exporter/html/templates.js +1 -1
  100. package/dist/exporter/html/templates.js.map +1 -1
  101. package/dist/exporter/html/tools.d.ts +1 -1
  102. package/dist/exporter/html/tools.d.ts.map +1 -1
  103. package/dist/exporter/html/tools.js +2 -2
  104. package/dist/exporter/html/tools.js.map +1 -1
  105. package/dist/exporter/jats/bibliography.d.ts +2 -1
  106. package/dist/exporter/jats/bibliography.d.ts.map +1 -1
  107. package/dist/exporter/jats/bibliography.js +57 -52
  108. package/dist/exporter/jats/bibliography.js.map +1 -1
  109. package/dist/exporter/jats/citations.d.ts +13 -11
  110. package/dist/exporter/jats/citations.d.ts.map +1 -1
  111. package/dist/exporter/jats/citations.js +28 -6
  112. package/dist/exporter/jats/citations.js.map +1 -1
  113. package/dist/exporter/jats/convert.d.ts +24 -28
  114. package/dist/exporter/jats/convert.d.ts.map +1 -1
  115. package/dist/exporter/jats/convert.js +53 -36
  116. package/dist/exporter/jats/convert.js.map +1 -1
  117. package/dist/exporter/jats/index.d.ts +21 -15
  118. package/dist/exporter/jats/index.d.ts.map +1 -1
  119. package/dist/exporter/jats/index.js +21 -5
  120. package/dist/exporter/jats/index.js.map +1 -1
  121. package/dist/exporter/jats/templates.d.ts +17 -15
  122. package/dist/exporter/jats/templates.d.ts.map +1 -1
  123. package/dist/exporter/jats/templates.js.map +1 -1
  124. package/dist/exporter/jats/text.d.ts +3 -2
  125. package/dist/exporter/jats/text.d.ts.map +1 -1
  126. package/dist/exporter/jats/text.js +4 -4
  127. package/dist/exporter/jats/text.js.map +1 -1
  128. package/dist/exporter/latex/convert.d.ts +12 -15
  129. package/dist/exporter/latex/convert.d.ts.map +1 -1
  130. package/dist/exporter/latex/convert.js +70 -54
  131. package/dist/exporter/latex/convert.js.map +1 -1
  132. package/dist/exporter/latex/escape_latex.d.ts +1 -1
  133. package/dist/exporter/latex/escape_latex.d.ts.map +1 -1
  134. package/dist/exporter/latex/escape_latex.js +1 -1
  135. package/dist/exporter/latex/escape_latex.js.map +1 -1
  136. package/dist/exporter/latex/index.d.ts +20 -19
  137. package/dist/exporter/latex/index.d.ts.map +1 -1
  138. package/dist/exporter/latex/index.js +15 -5
  139. package/dist/exporter/latex/index.js.map +1 -1
  140. package/dist/exporter/latex/readme.d.ts +1 -1
  141. package/dist/exporter/latex/readme.d.ts.map +1 -1
  142. package/dist/exporter/latex/readme.js +2 -2
  143. package/dist/exporter/latex/readme.js.map +1 -1
  144. package/dist/exporter/native/copy.d.ts +30 -0
  145. package/dist/exporter/native/copy.d.ts.map +1 -0
  146. package/dist/exporter/native/copy.js +151 -0
  147. package/dist/exporter/native/copy.js.map +1 -0
  148. package/dist/exporter/native/file.d.ts +12 -0
  149. package/dist/exporter/native/file.d.ts.map +1 -0
  150. package/dist/exporter/native/file.js +38 -0
  151. package/dist/exporter/native/file.js.map +1 -0
  152. package/dist/exporter/native/index.d.ts +5 -0
  153. package/dist/exporter/native/index.d.ts.map +1 -0
  154. package/dist/exporter/native/index.js +5 -0
  155. package/dist/exporter/native/index.js.map +1 -0
  156. package/dist/exporter/native/revision.d.ts +18 -0
  157. package/dist/exporter/native/revision.d.ts.map +1 -0
  158. package/dist/exporter/native/revision.js +39 -0
  159. package/dist/exporter/native/revision.js.map +1 -0
  160. package/dist/exporter/native/shrink.d.ts +29 -14
  161. package/dist/exporter/native/shrink.d.ts.map +1 -1
  162. package/dist/exporter/native/shrink.js +27 -18
  163. package/dist/exporter/native/shrink.js.map +1 -1
  164. package/dist/exporter/native/zip.d.ts +25 -0
  165. package/dist/exporter/native/zip.d.ts.map +1 -0
  166. package/dist/exporter/native/zip.js +56 -0
  167. package/dist/exporter/native/zip.js.map +1 -0
  168. package/dist/exporter/odt/citations.d.ts +18 -15
  169. package/dist/exporter/odt/citations.d.ts.map +1 -1
  170. package/dist/exporter/odt/citations.js +21 -4
  171. package/dist/exporter/odt/citations.js.map +1 -1
  172. package/dist/exporter/odt/footnotes.d.ts +25 -19
  173. package/dist/exporter/odt/footnotes.d.ts.map +1 -1
  174. package/dist/exporter/odt/footnotes.js +23 -6
  175. package/dist/exporter/odt/footnotes.js.map +1 -1
  176. package/dist/exporter/odt/images.d.ts +23 -11
  177. package/dist/exporter/odt/images.d.ts.map +1 -1
  178. package/dist/exporter/odt/images.js +34 -26
  179. package/dist/exporter/odt/images.js.map +1 -1
  180. package/dist/exporter/odt/index.d.ts +12 -18
  181. package/dist/exporter/odt/index.d.ts.map +1 -1
  182. package/dist/exporter/odt/index.js +16 -7
  183. package/dist/exporter/odt/index.js.map +1 -1
  184. package/dist/exporter/odt/math.d.ts +10 -8
  185. package/dist/exporter/odt/math.d.ts.map +1 -1
  186. package/dist/exporter/odt/math.js +27 -4
  187. package/dist/exporter/odt/math.js.map +1 -1
  188. package/dist/exporter/odt/metadata.d.ts +13 -9
  189. package/dist/exporter/odt/metadata.d.ts.map +1 -1
  190. package/dist/exporter/odt/metadata.js +36 -15
  191. package/dist/exporter/odt/metadata.js.map +1 -1
  192. package/dist/exporter/odt/render.d.ts +17 -15
  193. package/dist/exporter/odt/render.d.ts.map +1 -1
  194. package/dist/exporter/odt/render.js +25 -18
  195. package/dist/exporter/odt/render.js.map +1 -1
  196. package/dist/exporter/odt/richtext.d.ts +9 -9
  197. package/dist/exporter/odt/richtext.d.ts.map +1 -1
  198. package/dist/exporter/odt/richtext.js +55 -40
  199. package/dist/exporter/odt/richtext.js.map +1 -1
  200. package/dist/exporter/odt/styles.d.ts +29 -21
  201. package/dist/exporter/odt/styles.d.ts.map +1 -1
  202. package/dist/exporter/odt/styles.js +44 -22
  203. package/dist/exporter/odt/styles.js.map +1 -1
  204. package/dist/exporter/odt/track.d.ts +14 -7
  205. package/dist/exporter/odt/track.d.ts.map +1 -1
  206. package/dist/exporter/odt/track.js +7 -0
  207. package/dist/exporter/odt/track.js.map +1 -1
  208. package/dist/exporter/pandoc/citations.d.ts +20 -14
  209. package/dist/exporter/pandoc/citations.d.ts.map +1 -1
  210. package/dist/exporter/pandoc/citations.js +18 -4
  211. package/dist/exporter/pandoc/citations.js.map +1 -1
  212. package/dist/exporter/pandoc/convert.d.ts +10 -29
  213. package/dist/exporter/pandoc/convert.d.ts.map +1 -1
  214. package/dist/exporter/pandoc/convert.js +45 -40
  215. package/dist/exporter/pandoc/convert.js.map +1 -1
  216. package/dist/exporter/pandoc/index.d.ts +20 -33
  217. package/dist/exporter/pandoc/index.d.ts.map +1 -1
  218. package/dist/exporter/pandoc/index.js +20 -8
  219. package/dist/exporter/pandoc/index.js.map +1 -1
  220. package/dist/exporter/pandoc/readme.d.ts +1 -1
  221. package/dist/exporter/pandoc/readme.d.ts.map +1 -1
  222. package/dist/exporter/pandoc/readme.js +0 -1
  223. package/dist/exporter/pandoc/readme.js.map +1 -1
  224. package/dist/exporter/pandoc/tools.d.ts +21 -5
  225. package/dist/exporter/pandoc/tools.d.ts.map +1 -1
  226. package/dist/exporter/pandoc/tools.js +2 -2
  227. package/dist/exporter/pandoc/tools.js.map +1 -1
  228. package/dist/exporter/print/index.d.ts +18 -7
  229. package/dist/exporter/print/index.d.ts.map +1 -1
  230. package/dist/exporter/print/index.js +12 -10
  231. package/dist/exporter/print/index.js.map +1 -1
  232. package/dist/exporter/tools/doc_content.d.ts +5 -6
  233. package/dist/exporter/tools/doc_content.d.ts.map +1 -1
  234. package/dist/exporter/tools/doc_content.js +17 -16
  235. package/dist/exporter/tools/doc_content.js.map +1 -1
  236. package/dist/exporter/tools/svg.d.ts +7 -1
  237. package/dist/exporter/tools/svg.d.ts.map +1 -1
  238. package/dist/exporter/tools/svg.js.map +1 -1
  239. package/dist/exporter/tools/xml.d.ts +39 -38
  240. package/dist/exporter/tools/xml.d.ts.map +1 -1
  241. package/dist/exporter/tools/xml.js +82 -55
  242. package/dist/exporter/tools/xml.js.map +1 -1
  243. package/dist/exporter/tools/xml_zip.d.ts +15 -14
  244. package/dist/exporter/tools/xml_zip.d.ts.map +1 -1
  245. package/dist/exporter/tools/xml_zip.js +8 -2
  246. package/dist/exporter/tools/xml_zip.js.map +1 -1
  247. package/dist/exporter/tools/zip.d.ts +28 -14
  248. package/dist/exporter/tools/zip.d.ts.map +1 -1
  249. package/dist/exporter/tools/zip.js +13 -6
  250. package/dist/exporter/tools/zip.js.map +1 -1
  251. package/dist/exporter/tools/zotero_csl.d.ts +19 -6
  252. package/dist/exporter/tools/zotero_csl.d.ts.map +1 -1
  253. package/dist/exporter/tools/zotero_csl.js +9 -9
  254. package/dist/exporter/tools/zotero_csl.js.map +1 -1
  255. package/dist/importer/citations.d.ts +25 -22
  256. package/dist/importer/citations.d.ts.map +1 -1
  257. package/dist/importer/citations.js +1 -49
  258. package/dist/importer/citations.js.map +1 -1
  259. package/dist/importer/docx/citations.d.ts +8 -30
  260. package/dist/importer/docx/citations.d.ts.map +1 -1
  261. package/dist/importer/docx/citations.js +1 -26
  262. package/dist/importer/docx/citations.js.map +1 -1
  263. package/dist/importer/docx/convert.d.ts +38 -116
  264. package/dist/importer/docx/convert.d.ts.map +1 -1
  265. package/dist/importer/docx/convert.js +99 -82
  266. package/dist/importer/docx/convert.js.map +1 -1
  267. package/dist/importer/docx/helpers.d.ts +1 -1
  268. package/dist/importer/docx/helpers.d.ts.map +1 -1
  269. package/dist/importer/docx/helpers.js +1 -1
  270. package/dist/importer/docx/helpers.js.map +1 -1
  271. package/dist/importer/docx/index.d.ts +27 -0
  272. package/dist/importer/docx/index.d.ts.map +1 -0
  273. package/dist/importer/docx/index.js +77 -0
  274. package/dist/importer/docx/index.js.map +1 -0
  275. package/dist/importer/docx/omml2mathml.d.ts +2 -3
  276. package/dist/importer/docx/omml2mathml.d.ts.map +1 -1
  277. package/dist/importer/docx/omml2mathml.js +23 -116
  278. package/dist/importer/docx/omml2mathml.js.map +1 -1
  279. package/dist/importer/docx/parse.d.ts +22 -131
  280. package/dist/importer/docx/parse.d.ts.map +1 -1
  281. package/dist/importer/docx/parse.js +73 -55
  282. package/dist/importer/docx/parse.js.map +1 -1
  283. package/dist/importer/native/extract_template.d.ts +6 -0
  284. package/dist/importer/native/extract_template.d.ts.map +1 -0
  285. package/dist/importer/native/extract_template.js +80 -0
  286. package/dist/importer/native/extract_template.js.map +1 -0
  287. package/dist/importer/native/file.d.ts +37 -0
  288. package/dist/importer/native/file.d.ts.map +1 -0
  289. package/dist/importer/native/file.js +162 -0
  290. package/dist/importer/native/file.js.map +1 -0
  291. package/dist/importer/native/get_images.d.ts +18 -8
  292. package/dist/importer/native/get_images.d.ts.map +1 -1
  293. package/dist/importer/native/get_images.js +39 -45
  294. package/dist/importer/native/get_images.js.map +1 -1
  295. package/dist/importer/native/importer.d.ts +41 -0
  296. package/dist/importer/native/importer.d.ts.map +1 -0
  297. package/dist/importer/native/importer.js +170 -0
  298. package/dist/importer/native/importer.js.map +1 -0
  299. package/dist/importer/native/index.d.ts +7 -0
  300. package/dist/importer/native/index.d.ts.map +1 -0
  301. package/dist/importer/native/index.js +7 -0
  302. package/dist/importer/native/index.js.map +1 -0
  303. package/dist/importer/native/update.d.ts +5 -4
  304. package/dist/importer/native/update.d.ts.map +1 -1
  305. package/dist/importer/native/update.js +4 -3
  306. package/dist/importer/native/update.js.map +1 -1
  307. package/dist/importer/native/update_template.d.ts +12 -0
  308. package/dist/importer/native/update_template.d.ts.map +1 -0
  309. package/dist/importer/native/update_template.js +19 -0
  310. package/dist/importer/native/update_template.js.map +1 -0
  311. package/dist/importer/odt/citations.d.ts +7 -27
  312. package/dist/importer/odt/citations.d.ts.map +1 -1
  313. package/dist/importer/odt/citations.js +0 -22
  314. package/dist/importer/odt/citations.js.map +1 -1
  315. package/dist/importer/odt/convert.d.ts +53 -237
  316. package/dist/importer/odt/convert.d.ts.map +1 -1
  317. package/dist/importer/odt/convert.js +162 -138
  318. package/dist/importer/odt/convert.js.map +1 -1
  319. package/dist/importer/odt/index.d.ts +30 -0
  320. package/dist/importer/odt/index.d.ts.map +1 -0
  321. package/dist/importer/odt/index.js +124 -0
  322. package/dist/importer/odt/index.js.map +1 -0
  323. package/dist/importer/pandoc/convert.d.ts +25 -77
  324. package/dist/importer/pandoc/convert.d.ts.map +1 -1
  325. package/dist/importer/pandoc/convert.js +65 -52
  326. package/dist/importer/pandoc/convert.js.map +1 -1
  327. package/dist/importer/pandoc/helpers.d.ts +4 -3
  328. package/dist/importer/pandoc/helpers.d.ts.map +1 -1
  329. package/dist/importer/pandoc/helpers.js +24 -26
  330. package/dist/importer/pandoc/helpers.js.map +1 -1
  331. package/dist/importer/pandoc/index.d.ts +31 -0
  332. package/dist/importer/pandoc/index.d.ts.map +1 -0
  333. package/dist/importer/pandoc/index.js +114 -0
  334. package/dist/importer/pandoc/index.js.map +1 -0
  335. package/dist/importer/registry.d.ts +21 -0
  336. package/dist/importer/registry.d.ts.map +1 -0
  337. package/dist/importer/registry.js +41 -0
  338. package/dist/importer/registry.js.map +1 -0
  339. package/dist/importer/zip_analyzer.d.ts +27 -21
  340. package/dist/importer/zip_analyzer.d.ts.map +1 -1
  341. package/dist/importer/zip_analyzer.js +10 -5
  342. package/dist/importer/zip_analyzer.js.map +1 -1
  343. package/dist/mathlive/opf_includes.d.ts +1 -1
  344. package/dist/mathlive/opf_includes.d.ts.map +1 -1
  345. package/dist/mathlive/opf_includes.js.map +1 -1
  346. package/dist/schema/common/annotate.d.ts +37 -49
  347. package/dist/schema/common/annotate.d.ts.map +1 -1
  348. package/dist/schema/common/annotate.js +2 -2
  349. package/dist/schema/common/annotate.js.map +1 -1
  350. package/dist/schema/common/base.d.ts +63 -81
  351. package/dist/schema/common/base.d.ts.map +1 -1
  352. package/dist/schema/common/base.js.map +1 -1
  353. package/dist/schema/common/citation.d.ts +23 -22
  354. package/dist/schema/common/citation.d.ts.map +1 -1
  355. package/dist/schema/common/citation.js +4 -5
  356. package/dist/schema/common/citation.js.map +1 -1
  357. package/dist/schema/common/equation.d.ts +13 -14
  358. package/dist/schema/common/equation.d.ts.map +1 -1
  359. package/dist/schema/common/equation.js +1 -1
  360. package/dist/schema/common/equation.js.map +1 -1
  361. package/dist/schema/common/figure.d.ts +72 -93
  362. package/dist/schema/common/figure.d.ts.map +1 -1
  363. package/dist/schema/common/figure.js +11 -9
  364. package/dist/schema/common/figure.js.map +1 -1
  365. package/dist/schema/common/heading.d.ts +8 -32
  366. package/dist/schema/common/heading.d.ts.map +1 -1
  367. package/dist/schema/common/heading.js +2 -2
  368. package/dist/schema/common/heading.js.map +1 -1
  369. package/dist/schema/common/index.d.ts +2 -2
  370. package/dist/schema/common/index.d.ts.map +1 -1
  371. package/dist/schema/common/index.js.map +1 -1
  372. package/dist/schema/common/list.d.ts +52 -72
  373. package/dist/schema/common/list.d.ts.map +1 -1
  374. package/dist/schema/common/list.js +3 -3
  375. package/dist/schema/common/list.js.map +1 -1
  376. package/dist/schema/common/reference.d.ts +51 -59
  377. package/dist/schema/common/reference.d.ts.map +1 -1
  378. package/dist/schema/common/reference.js +5 -5
  379. package/dist/schema/common/reference.js.map +1 -1
  380. package/dist/schema/common/table.d.ts +59 -75
  381. package/dist/schema/common/table.d.ts.map +1 -1
  382. package/dist/schema/common/table.js +3 -2
  383. package/dist/schema/common/table.js.map +1 -1
  384. package/dist/schema/common/track.d.ts +83 -97
  385. package/dist/schema/common/track.d.ts.map +1 -1
  386. package/dist/schema/common/track.js +18 -17
  387. package/dist/schema/common/track.js.map +1 -1
  388. package/dist/schema/convert.d.ts +2 -2
  389. package/dist/schema/convert.d.ts.map +1 -1
  390. package/dist/schema/convert.js +2 -2
  391. package/dist/schema/convert.js.map +1 -1
  392. package/dist/schema/document/content.d.ts +95 -122
  393. package/dist/schema/document/content.d.ts.map +1 -1
  394. package/dist/schema/document/content.js +9 -9
  395. package/dist/schema/document/content.js.map +1 -1
  396. package/dist/schema/document/index.d.ts +173 -257
  397. package/dist/schema/document/index.d.ts.map +1 -1
  398. package/dist/schema/document/index.js.map +1 -1
  399. package/dist/schema/document/structure.d.ts +149 -258
  400. package/dist/schema/document/structure.d.ts.map +1 -1
  401. package/dist/schema/document/structure.js +2 -2
  402. package/dist/schema/document/structure.js.map +1 -1
  403. package/dist/schema/export.d.ts +4 -877
  404. package/dist/schema/export.d.ts.map +1 -1
  405. package/dist/schema/export.js +1 -0
  406. package/dist/schema/export.js.map +1 -1
  407. package/dist/schema/footnotes.d.ts +110 -155
  408. package/dist/schema/footnotes.d.ts.map +1 -1
  409. package/dist/schema/footnotes.js +4 -2
  410. package/dist/schema/footnotes.js.map +1 -1
  411. package/dist/schema/footnotes_convert.d.ts +3 -3
  412. package/dist/schema/footnotes_convert.d.ts.map +1 -1
  413. package/dist/schema/footnotes_convert.js +10 -6
  414. package/dist/schema/footnotes_convert.js.map +1 -1
  415. package/dist/schema/i18n.d.ts +3 -534
  416. package/dist/schema/i18n.d.ts.map +1 -1
  417. package/dist/schema/i18n.js +1 -0
  418. package/dist/schema/i18n.js.map +1 -1
  419. package/dist/schema/index.d.ts +1 -1
  420. package/dist/schema/index.d.ts.map +1 -1
  421. package/dist/schema/index.js.map +1 -1
  422. package/dist/schema/mini_json.d.ts +3 -4
  423. package/dist/schema/mini_json.d.ts.map +1 -1
  424. package/dist/schema/mini_json.js +2 -0
  425. package/dist/schema/mini_json.js.map +1 -1
  426. package/dist/schema/text.d.ts +2 -1
  427. package/dist/schema/text.d.ts.map +1 -1
  428. package/dist/schema/text.js +1 -1
  429. package/dist/schema/text.js.map +1 -1
  430. package/dist/types.d.ts +167 -8
  431. package/dist/types.d.ts.map +1 -1
  432. package/package.json +4 -1
  433. package/src/bibliography/{common.js → common.ts} +15 -12
  434. package/src/bibliography/{csl_bib.js → csl_bib.ts} +16 -15
  435. package/src/citations/{citeproc_sys.js → citeproc_sys.ts} +26 -6
  436. package/src/citations/{format.js → format.ts} +80 -24
  437. package/src/editor/e2ee/{encryptor.js → encryptor.ts} +76 -44
  438. package/src/exporter/docx/{citations.js → citations.ts} +51 -23
  439. package/src/exporter/docx/{comments.js → comments.ts} +69 -26
  440. package/src/exporter/docx/{footnotes.js → footnotes.ts} +81 -42
  441. package/src/exporter/docx/images.ts +128 -0
  442. package/src/exporter/docx/{index.js → index.ts} +48 -25
  443. package/src/exporter/docx/{lists.js → lists.ts} +89 -46
  444. package/src/exporter/docx/{math.js → math.ts} +29 -9
  445. package/src/exporter/docx/{metadata.js → metadata.ts} +78 -42
  446. package/src/exporter/docx/{rels.js → rels.ts} +71 -50
  447. package/src/exporter/docx/{render.js → render.ts} +124 -87
  448. package/src/exporter/docx/{richtext.js → richtext.ts} +107 -84
  449. package/src/exporter/docx/{tables.js → tables.ts} +33 -23
  450. package/src/exporter/docx/{tools.js → tools.ts} +4 -3
  451. package/src/exporter/epub/{index.js → index.ts} +44 -15
  452. package/src/exporter/epub/{templates.js → templates.ts} +71 -7
  453. package/src/exporter/epub/{tools.js → tools.ts} +31 -25
  454. package/src/exporter/html/{citations.js → citations.ts} +79 -31
  455. package/src/exporter/html/{convert.js → convert.ts} +118 -71
  456. package/src/exporter/html/{index.js → index.ts} +63 -29
  457. package/src/exporter/html/{templates.js → templates.ts} +22 -2
  458. package/src/exporter/html/{tools.js → tools.ts} +9 -6
  459. package/src/exporter/jats/bibliography.ts +199 -0
  460. package/src/exporter/jats/{citations.js → citations.ts} +56 -20
  461. package/src/exporter/jats/{convert.js → convert.ts} +72 -53
  462. package/src/exporter/jats/index.ts +132 -0
  463. package/src/exporter/jats/{templates.js → templates.ts} +19 -3
  464. package/src/exporter/jats/{text.js → text.ts} +8 -6
  465. package/src/exporter/latex/{convert.js → convert.ts} +160 -125
  466. package/src/exporter/latex/{escape_latex.js → escape_latex.ts} +1 -1
  467. package/src/exporter/latex/{index.js → index.ts} +27 -12
  468. package/src/exporter/latex/{readme.js → readme.ts} +2 -2
  469. package/src/exporter/native/copy.ts +231 -0
  470. package/src/exporter/native/file.ts +65 -0
  471. package/src/exporter/native/index.ts +4 -0
  472. package/src/exporter/native/revision.ts +76 -0
  473. package/src/exporter/native/{shrink.js → shrink.ts} +64 -29
  474. package/src/exporter/native/zip.ts +85 -0
  475. package/src/exporter/odt/{citations.js → citations.ts} +35 -15
  476. package/src/exporter/odt/{footnotes.js → footnotes.ts} +53 -30
  477. package/src/exporter/odt/images.ts +135 -0
  478. package/src/exporter/odt/{index.js → index.ts} +49 -27
  479. package/src/exporter/odt/{math.js → math.ts} +38 -9
  480. package/src/exporter/odt/{metadata.js → metadata.ts} +54 -29
  481. package/src/exporter/odt/{render.js → render.ts} +89 -60
  482. package/src/exporter/odt/{richtext.js → richtext.ts} +102 -72
  483. package/src/exporter/odt/{styles.js → styles.ts} +98 -66
  484. package/src/exporter/odt/{track.js → track.ts} +22 -6
  485. package/src/exporter/pandoc/{citations.js → citations.ts} +31 -15
  486. package/src/exporter/pandoc/{convert.js → convert.ts} +98 -79
  487. package/src/exporter/pandoc/{index.js → index.ts} +36 -13
  488. package/src/exporter/pandoc/{readme.js → readme.ts} +0 -1
  489. package/src/exporter/pandoc/{tools.js → tools.ts} +28 -5
  490. package/src/exporter/print/{index.js → index.ts} +38 -19
  491. package/src/exporter/tools/{doc_content.js → doc_content.ts} +34 -24
  492. package/src/exporter/tools/{svg.js → svg.ts} +9 -3
  493. package/src/exporter/tools/{xml.js → xml.ts} +187 -138
  494. package/src/exporter/tools/{xml_zip.js → xml_zip.ts} +19 -11
  495. package/src/exporter/tools/{zip.js → zip.ts} +35 -11
  496. package/src/exporter/tools/{zotero_csl.js → zotero_csl.ts} +35 -18
  497. package/src/global.d.ts +2 -0
  498. package/src/importer/citations.ts +116 -0
  499. package/src/importer/docx/{citations.js → citations.ts} +22 -37
  500. package/src/importer/docx/{convert.js → convert.ts} +176 -141
  501. package/src/importer/docx/{helpers.js → helpers.ts} +1 -1
  502. package/src/importer/docx/index.ts +124 -0
  503. package/src/importer/docx/{omml2mathml.js → omml2mathml.ts} +154 -176
  504. package/src/importer/docx/{parse.js → parse.ts} +103 -81
  505. package/src/importer/native/extract_template.ts +83 -0
  506. package/src/importer/native/file.ts +282 -0
  507. package/src/importer/native/get_images.ts +82 -0
  508. package/src/importer/native/importer.ts +244 -0
  509. package/src/importer/native/index.ts +6 -0
  510. package/src/importer/native/{update.js → update.ts} +13 -5
  511. package/src/importer/native/update_template.ts +32 -0
  512. package/src/importer/odt/{citations.js → citations.ts} +17 -29
  513. package/src/importer/odt/{convert.js → convert.ts} +261 -237
  514. package/src/importer/odt/index.ts +202 -0
  515. package/src/importer/pandoc/{convert.js → convert.ts} +116 -94
  516. package/src/importer/pandoc/{helpers.js → helpers.ts} +24 -12
  517. package/src/importer/pandoc/index.ts +171 -0
  518. package/src/importer/registry.ts +69 -0
  519. package/src/importer/{zip_analyzer.js → zip_analyzer.ts} +44 -18
  520. package/src/mathlive/{opf_includes.js → opf_includes.ts} +1 -1
  521. package/src/modules.d.ts +40 -0
  522. package/src/schema/common/{annotate.js → annotate.ts} +10 -8
  523. package/src/schema/common/{base.js → base.ts} +12 -10
  524. package/src/schema/common/{citation.js → citation.ts} +17 -8
  525. package/src/schema/common/{equation.js → equation.ts} +6 -4
  526. package/src/schema/common/{figure.js → figure.ts} +43 -23
  527. package/src/schema/common/{heading.js → heading.ts} +7 -5
  528. package/src/schema/common/{list.js → list.ts} +15 -13
  529. package/src/schema/common/{reference.js → reference.ts} +14 -12
  530. package/src/schema/common/{table.js → table.ts} +16 -14
  531. package/src/schema/common/{track.js → track.ts} +42 -31
  532. package/src/schema/{convert.js → convert.ts} +6 -2
  533. package/src/schema/document/{content.js → content.ts} +22 -20
  534. package/src/schema/document/{structure.js → structure.ts} +15 -9
  535. package/src/schema/{export.js → export.ts} +4 -2
  536. package/src/schema/{footnotes.js → footnotes.ts} +11 -8
  537. package/src/schema/{footnotes_convert.js → footnotes_convert.ts} +11 -8
  538. package/src/schema/{i18n.js → i18n.ts} +7 -1
  539. package/src/schema/{mini_json.js → mini_json.ts} +11 -12
  540. package/src/schema/{text.js → text.ts} +6 -2
  541. package/src/types.ts +185 -7
  542. package/src/exporter/docx/images.js +0 -101
  543. package/src/exporter/jats/bibliography.js +0 -183
  544. package/src/exporter/jats/index.js +0 -92
  545. package/src/exporter/odt/images.js +0 -115
  546. package/src/importer/citations.js +0 -129
  547. package/src/importer/native/get_images.js +0 -76
  548. /package/src/schema/common/{index.js → index.ts} +0 -0
  549. /package/src/schema/document/{index.js → index.ts} +0 -0
  550. /package/src/schema/{index.js → index.ts} +0 -0
@@ -3,7 +3,29 @@ import { xmlDOM } from "../../exporter/tools/xml.js";
3
3
  import { randomCommentId, randomFigureId, randomHeadingId, randomListId, randomTableId } from "../../schema/common/index.js";
4
4
  import { parseTracks } from "../../schema/common/track.js";
5
5
  import { isOdtBibliographyReferenceMark, isOdtBibliographySection, isOdtCitationMark, parseOdtBibliographyMark, parseOdtReferenceMark } from "./citations.js";
6
+ import { gettext } from "fwtoolkit";
7
+ function attr(node, name) {
8
+ if (node && typeof node === "object" && "getAttribute" in node) {
9
+ return String(node.getAttribute(name) || "");
10
+ }
11
+ return "";
12
+ }
6
13
  export class OdtConvert {
14
+ importId;
15
+ template;
16
+ bibliography;
17
+ bibDB;
18
+ images;
19
+ styles;
20
+ contentDoc;
21
+ stylesDoc;
22
+ metaDoc;
23
+ manifestDoc;
24
+ tracks;
25
+ comments;
26
+ currentCommentIds;
27
+ currentTracks;
28
+ referenceableObjects;
7
29
  constructor(contentXml, stylesXml, metaXml, manifestXml, importId, template, bibliography, bibDb) {
8
30
  this.importId = importId;
9
31
  this.template = template;
@@ -38,6 +60,9 @@ export class OdtConvert {
38
60
  };
39
61
  }
40
62
  parseTrackedChanges() {
63
+ if (!this.contentDoc) {
64
+ return;
65
+ }
41
66
  const trackedChangesEl = this.contentDoc.query("text:tracked-changes");
42
67
  if (!trackedChangesEl) {
43
68
  return;
@@ -53,8 +78,8 @@ export class OdtConvert {
53
78
  // and is more easily converted.
54
79
  const deletions = {};
55
80
  const changedRegions = trackedChangesEl.queryAll("text:changed-region");
56
- changedRegions.forEach(region => {
57
- const id = region.getAttribute("text:id");
81
+ changedRegions.forEach((region) => {
82
+ const id = attr(region, "text:id");
58
83
  const insertion = region.query("text:insertion");
59
84
  const deletion = region.query("text:deletion");
60
85
  if (!insertion && !deletion) {
@@ -67,7 +92,7 @@ export class OdtConvert {
67
92
  type: insertion ? "insertion" : "deletion",
68
93
  user: 1,
69
94
  username: changeInfo.query("dc:creator")?.textContent || "",
70
- date: parseInt(new Date(changeInfo.query("dc:date")?.textContent || "").getTime() / 60000)
95
+ date: Math.floor(new Date(changeInfo.query("dc:date")?.textContent || "").getTime() / 60000)
71
96
  };
72
97
  if (insertion) {
73
98
  track.approved = false;
@@ -75,14 +100,14 @@ export class OdtConvert {
75
100
  this.tracks[id] = track;
76
101
  if (deletion) {
77
102
  // Store deletion content for later use
78
- deletions[id] = deletion.children.filter(child => child.tagName !== "office:change-info");
103
+ deletions[id] = deletion.children.filter((child) => child.tagName !== "office:change-info");
79
104
  }
80
105
  }
81
106
  });
82
107
  // Then find and replace all deletion change markers
83
108
  const changeMarkers = this.contentDoc.queryAll("text:change");
84
- changeMarkers.forEach(marker => {
85
- const changeId = marker.getAttribute("text:change-id");
109
+ changeMarkers.forEach((marker) => {
110
+ const changeId = attr(marker, "text:change-id");
86
111
  const deletion = deletions[changeId];
87
112
  if (deletion) {
88
113
  if (deletion.length > 0) {
@@ -92,7 +117,7 @@ export class OdtConvert {
92
117
  marker.parentElement.insertXMLAt(`<text:change-end text:change-id="${changeId}"/>`, markerIndex + 2);
93
118
  if (deletion.length === 1) {
94
119
  // Single block - just insert the content
95
- deletion[0].children.forEach(content => {
120
+ deletion[0].children.forEach((content) => {
96
121
  marker.parentElement.insertBefore(content, marker);
97
122
  });
98
123
  }
@@ -100,11 +125,11 @@ export class OdtConvert {
100
125
  // Multiple blocks - need to split the paragraph/headline
101
126
  const parentElement = marker.parentElement;
102
127
  parentElement.splitAtChildElement(marker, deletion[0].children
103
- ?.map(node => node.toString())
128
+ ?.map((node) => node.toString())
104
129
  .join("") || "", // First block content to be added to current node
105
130
  deletion
106
131
  .slice(1, -1)
107
- .map(node => node.toString())
132
+ .map((node) => node.toString())
108
133
  .join(""), // Middle blocks
109
134
  deletion[deletion.length - 1].toString() // Last block
110
135
  );
@@ -120,37 +145,35 @@ export class OdtConvert {
120
145
  return;
121
146
  }
122
147
  const styleNodes = this.stylesDoc.queryAll("style:style");
123
- styleNodes.forEach(node => {
124
- const styleName = node.getAttribute("style:name");
148
+ styleNodes.forEach((node) => {
149
+ const styleName = attr(node, "style:name");
125
150
  this.styles[styleName] = this.parseStyle(node);
126
151
  });
127
152
  const contentStyleNodes = this.contentDoc.queryAll("style:style");
128
- contentStyleNodes.forEach(node => {
129
- const styleName = node.getAttribute("style:name");
153
+ contentStyleNodes.forEach((node) => {
154
+ const styleName = attr(node, "style:name");
130
155
  this.styles[styleName] = this.parseStyle(node);
131
156
  });
132
157
  }
133
158
  parseStyle(styleNode) {
134
159
  const properties = {
135
160
  // Basic style information
136
- parentStyleName: styleNode.getAttribute("style:parent-style-name"),
137
- isSection: styleNode.getAttribute("style:family") === "section" ||
161
+ parentStyleName: attr(styleNode, "style:parent-style-name"),
162
+ isSection: attr(styleNode, "style:family") === "section" ||
138
163
  Boolean(styleNode.query("style:section-properties")),
139
- title: styleNode.getAttribute("style:display-name"),
164
+ title: attr(styleNode, "style:display-name"),
140
165
  // Family and name info
141
- family: styleNode.getAttribute("style:family"),
142
- name: styleNode.getAttribute("style:name"),
166
+ family: attr(styleNode, "style:family"),
167
+ name: attr(styleNode, "style:name"),
143
168
  // Heading related
144
- isHeading: styleNode.getAttribute("style:family") === "paragraph" &&
145
- (styleNode
146
- .getAttribute("style:name")
169
+ isHeading: attr(styleNode, "style:family") === "paragraph" &&
170
+ (attr(styleNode, "style:name")
147
171
  .toLowerCase()
148
172
  .includes("heading") ||
149
- styleNode
150
- .getAttribute("style:parent-style-name")
173
+ attr(styleNode, "style:parent-style-name")
151
174
  ?.toLowerCase()
152
175
  .includes("heading")),
153
- outlineLevel: styleNode.getAttribute("text:outline-level"),
176
+ outlineLevel: attr(styleNode, "text:outline-level"),
154
177
  // Text properties
155
178
  textProperties: {},
156
179
  // Paragraph properties
@@ -162,53 +185,53 @@ export class OdtConvert {
162
185
  const textProperties = styleNode.query("style:text-properties");
163
186
  if (textProperties) {
164
187
  properties.textProperties = {
165
- bold: textProperties.getAttribute("fo:font-weight") === "bold",
166
- italic: textProperties.getAttribute("fo:font-style") === "italic",
167
- fontSize: this.convertLength(textProperties.getAttribute("fo:font-size")),
168
- fontFamily: textProperties.getAttribute("fo:font-family"),
169
- color: textProperties.getAttribute("fo:color"),
170
- backgroundColor: textProperties.getAttribute("fo:background-color"),
171
- textDecoration: textProperties.getAttribute("style:text-underline-style") ||
172
- textProperties.getAttribute("style:text-line-through-style"),
173
- textPosition: textProperties.getAttribute("style:text-position")
188
+ bold: attr(textProperties, "fo:font-weight") === "bold",
189
+ italic: attr(textProperties, "fo:font-style") === "italic",
190
+ fontSize: this.convertLength(attr(textProperties, "fo:font-size")),
191
+ fontFamily: attr(textProperties, "fo:font-family"),
192
+ color: attr(textProperties, "fo:color"),
193
+ backgroundColor: attr(textProperties, "fo:background-color"),
194
+ textDecoration: attr(textProperties, "style:text-underline-style") ||
195
+ attr(textProperties, "style:text-line-through-style"),
196
+ textPosition: attr(textProperties, "style:text-position")
174
197
  };
175
198
  }
176
199
  // Parse paragraph properties
177
200
  const paragraphProperties = styleNode.query("style:paragraph-properties");
178
201
  if (paragraphProperties) {
179
202
  properties.paragraphProperties = {
180
- marginTop: this.convertLength(paragraphProperties.getAttribute("fo:margin-top")),
181
- marginBottom: this.convertLength(paragraphProperties.getAttribute("fo:margin-bottom")),
182
- marginLeft: this.convertLength(paragraphProperties.getAttribute("fo:margin-left")),
183
- marginRight: this.convertLength(paragraphProperties.getAttribute("fo:margin-right")),
184
- textAlign: paragraphProperties.getAttribute("fo:text-align"),
185
- lineHeight: paragraphProperties.getAttribute("fo:line-height"),
186
- backgroundColor: paragraphProperties.getAttribute("fo:background-color"),
187
- padding: this.convertLength(paragraphProperties.getAttribute("fo:padding")),
188
- borderStyle: paragraphProperties.getAttribute("fo:border-style")
203
+ marginTop: this.convertLength(attr(paragraphProperties, "fo:margin-top")),
204
+ marginBottom: this.convertLength(attr(paragraphProperties, "fo:margin-bottom")),
205
+ marginLeft: this.convertLength(attr(paragraphProperties, "fo:margin-left")),
206
+ marginRight: this.convertLength(attr(paragraphProperties, "fo:margin-right")),
207
+ textAlign: attr(paragraphProperties, "fo:text-align"),
208
+ lineHeight: attr(paragraphProperties, "fo:line-height"),
209
+ backgroundColor: attr(paragraphProperties, "fo:background-color"),
210
+ padding: this.convertLength(attr(paragraphProperties, "fo:padding")),
211
+ borderStyle: attr(paragraphProperties, "fo:border-style")
189
212
  };
190
213
  }
191
214
  // Parse section properties
192
215
  const sectionProperties = styleNode.query("style:section-properties");
193
216
  if (sectionProperties) {
194
217
  properties.sectionProperties = {
195
- columnCount: sectionProperties.getAttribute("fo:column-count"),
196
- columnGap: this.convertLength(sectionProperties.getAttribute("fo:column-gap")),
197
- backgroundColor: sectionProperties.getAttribute("fo:background-color"),
218
+ columnCount: attr(sectionProperties, "fo:column-count"),
219
+ columnGap: this.convertLength(attr(sectionProperties, "fo:column-gap")),
220
+ backgroundColor: attr(sectionProperties, "fo:background-color"),
198
221
  margins: {
199
- top: this.convertLength(sectionProperties.getAttribute("fo:margin-top")),
200
- bottom: this.convertLength(sectionProperties.getAttribute("fo:margin-bottom")),
201
- left: this.convertLength(sectionProperties.getAttribute("fo:margin-left")),
202
- right: this.convertLength(sectionProperties.getAttribute("fo:margin-right"))
222
+ top: this.convertLength(attr(sectionProperties, "fo:margin-top")),
223
+ bottom: this.convertLength(attr(sectionProperties, "fo:margin-bottom")),
224
+ left: this.convertLength(attr(sectionProperties, "fo:margin-left")),
225
+ right: this.convertLength(attr(sectionProperties, "fo:margin-right"))
203
226
  }
204
227
  };
205
228
  }
206
229
  // Additional table-specific properties
207
- if (styleNode.getAttribute("style:family") === "table") {
230
+ if (attr(styleNode, "style:family") === "table") {
208
231
  properties.tableProperties = {
209
- align: styleNode.getAttribute("table:align"),
210
- width: this.convertLength(styleNode.getAttribute("style:width")),
211
- relWidth: styleNode.getAttribute("style:rel-width")
232
+ align: attr(styleNode, "table:align"),
233
+ width: this.convertLength(attr(styleNode, "style:width")),
234
+ relWidth: attr(styleNode, "style:rel-width")
212
235
  };
213
236
  }
214
237
  return properties;
@@ -227,11 +250,14 @@ export class OdtConvert {
227
250
  return null;
228
251
  }
229
252
  parseComments() {
253
+ if (!this.contentDoc) {
254
+ return;
255
+ }
230
256
  const annotations = this.contentDoc.queryAll("office:annotation");
231
- annotations.forEach(annotation => {
257
+ annotations.forEach((annotation) => {
232
258
  const username = annotation.query("dc:creator")?.textContent || "";
233
259
  const date = new Date(annotation.query("dc:date")?.textContent || "").getTime();
234
- const id = (annotation.getAttribute("office:name") || "")
260
+ const id = (attr(annotation, "office:name") || "")
235
261
  .replace(/\D/g, "")
236
262
  .slice(0, 9);
237
263
  if (id) {
@@ -242,15 +268,15 @@ export class OdtConvert {
242
268
  date,
243
269
  comment: annotation
244
270
  .queryAll("text:p")
245
- .map(par => this.convertBlockNode(par))
246
- .filter(par => par)
271
+ .map((par) => this.convertBlockNode(par))
272
+ .filter((par) => par)
247
273
  .flat(),
248
274
  answers: [],
249
- resolved: annotation.getAttribute("loext:resolved") === "true"
275
+ resolved: attr(annotation, "loext:resolved") === "true"
250
276
  };
251
277
  }
252
278
  else {
253
- const parentId = (annotation.getAttribute("loext:parent-name") || "")
279
+ const parentId = (attr(annotation, "loext:parent-name") || "")
254
280
  .replace(/\D/g, "")
255
281
  .slice(0, 9);
256
282
  if (parentId && this.comments[parentId]) {
@@ -263,8 +289,8 @@ export class OdtConvert {
263
289
  answer: annotation
264
290
  .queryAll("text:p")
265
291
  .slice(1)
266
- .map(par => this.convertBlockNode(par))
267
- .filter(par => par)
292
+ .map((par) => this.convertBlockNode(par))
293
+ .filter((par) => par)
268
294
  .flat()
269
295
  });
270
296
  }
@@ -274,8 +300,8 @@ export class OdtConvert {
274
300
  collectReferenceableObjects(node) {
275
301
  // Handle heading bookmarks
276
302
  const bookmarkStarts = node.queryAll("text:bookmark-start");
277
- bookmarkStarts.forEach(mark => {
278
- const refName = mark.getAttribute("text:name");
303
+ bookmarkStarts.forEach((mark) => {
304
+ const refName = attr(mark, "text:name");
279
305
  if (!refName) {
280
306
  return;
281
307
  }
@@ -296,8 +322,8 @@ export class OdtConvert {
296
322
  });
297
323
  // Handle figure sequences
298
324
  const sequences = node.queryAll("text:sequence");
299
- sequences.forEach(sequence => {
300
- const refName = sequence.getAttribute("text:ref-name");
325
+ sequences.forEach((sequence) => {
326
+ const refName = attr(sequence, "text:ref-name");
301
327
  if (!refName) {
302
328
  return;
303
329
  }
@@ -347,11 +373,11 @@ export class OdtConvert {
347
373
  ]
348
374
  });
349
375
  }
350
- title.containerNodes.forEach(node => {
376
+ title.containerNodes.forEach((node) => {
351
377
  node.parentElement.removeChild(node);
352
378
  });
353
379
  document.attrs.title =
354
- title.content.map(node => node.textContent).join("") ||
380
+ title.content.map((node) => node.textContent).join("") ||
355
381
  gettext("Untitled");
356
382
  // Get all content sections from the ODT
357
383
  const body = this.contentDoc.query("office:text");
@@ -361,7 +387,7 @@ export class OdtConvert {
361
387
  // Look for metadata sections first (author, abstract, etc.)
362
388
  const metadataContent = this.extractMetadata();
363
389
  metadataContent.forEach(({ type, attrs, content }) => {
364
- const templatePart = templateParts.find(part => part.attrs.metadata === type);
390
+ const templatePart = templateParts.find((part) => part.attrs.metadata === type);
365
391
  if (templatePart) {
366
392
  document.content.push({
367
393
  type: templatePart.type,
@@ -372,7 +398,7 @@ export class OdtConvert {
372
398
  content: content.content
373
399
  });
374
400
  // Remove paragraphs from content so they are not added to body
375
- content.containerNodes.forEach(node => {
401
+ content.containerNodes.forEach((node) => {
376
402
  node.parentElement.removeChild(node);
377
403
  });
378
404
  }
@@ -380,7 +406,7 @@ export class OdtConvert {
380
406
  // Group remaining content by sections based on style names/titles
381
407
  const sections = this.groupContentIntoSections(body);
382
408
  // Map ODT sections to template parts
383
- sections.forEach(section => {
409
+ sections.forEach((section) => {
384
410
  // Find matching template part
385
411
  const templatePart = this.findMatchingTemplatePart(section.title, templateParts);
386
412
  if (templatePart) {
@@ -403,18 +429,16 @@ export class OdtConvert {
403
429
  });
404
430
  // Add remaining content to body section
405
431
  const unassignedContent = sections
406
- .filter(section => !this.findMatchingTemplatePart(section.title, templateParts))
407
- .flatMap(section => section.content);
432
+ .filter((section) => !this.findMatchingTemplatePart(section.title, templateParts))
433
+ .flatMap((section) => section.content);
408
434
  if (unassignedContent.length) {
409
435
  // Find default body template part
410
- const bodyTemplatePart = templateParts.find(part => !part.attrs.metadata && part.type === "richtext_part");
436
+ const bodyTemplatePart = templateParts.find((part) => !part.attrs.metadata && part.type === "richtext_part");
411
437
  document.content.push({
412
438
  type: "richtext_part",
413
439
  attrs: {
414
- title: bodyTemplatePart
415
- ? bodyTemplatePart.attrs.title
416
- : "Body",
417
- id: bodyTemplatePart ? bodyTemplatePart.attrs.id : "body",
440
+ title: bodyTemplatePart?.attrs?.title || "Body",
441
+ id: bodyTemplatePart?.attrs?.id || "body",
418
442
  marks: ["strong", "em", "link"]
419
443
  },
420
444
  content: unassignedContent
@@ -468,8 +492,8 @@ export class OdtConvert {
468
492
  }
469
493
  const userDefined = this.metaDoc.queryAll("meta:user-defined");
470
494
  const contributors = [];
471
- userDefined.forEach(prop => {
472
- const name = prop.getAttribute("meta:name");
495
+ userDefined.forEach((prop) => {
496
+ const name = attr(prop, "meta:name");
473
497
  if (!name || !name.startsWith("fidus_contributor_")) {
474
498
  return;
475
499
  }
@@ -509,7 +533,7 @@ export class OdtConvert {
509
533
  }
510
534
  });
511
535
  const byRole = {};
512
- contributors.forEach(contributor => {
536
+ contributors.forEach((contributor) => {
513
537
  if (!contributor) {
514
538
  return;
515
539
  }
@@ -527,7 +551,7 @@ export class OdtConvert {
527
551
  const metaAuthors = this.contentDoc.queryAll("meta:user-defined", {
528
552
  "meta:name": "author"
529
553
  });
530
- metaAuthors.forEach(authorMeta => {
554
+ metaAuthors.forEach((authorMeta) => {
531
555
  const authorText = authorMeta.textContent;
532
556
  const [firstname = "", lastname = ""] = authorText.split(" ", 2);
533
557
  authors.push({
@@ -576,7 +600,7 @@ export class OdtConvert {
576
600
  "text:outline-level": "1"
577
601
  }); // Then check content for "Abstract"
578
602
  if (abstractSection &&
579
- (abstractSection.getAttribute("text:style-name") === "Abstract" ||
603
+ (attr(abstractSection, "text:style-name") === "Abstract" ||
580
604
  abstractSection.textContent.includes("Abstract"))) {
581
605
  return {
582
606
  content: this.convertContainer(abstractSection),
@@ -607,12 +631,12 @@ export class OdtConvert {
607
631
  return null;
608
632
  }
609
633
  // Try exact match first
610
- let matchingPart = templateParts.find(part => part.type === "richtext_part" &&
634
+ let matchingPart = templateParts.find((part) => part.type === "richtext_part" &&
611
635
  !part.attrs.metadata &&
612
636
  part.attrs.title.toLowerCase() === sectionTitle.toLowerCase());
613
637
  if (!matchingPart) {
614
638
  // Try fuzzy matching if exact match fails
615
- matchingPart = templateParts.find(part => part.type === "richtext_part" &&
639
+ matchingPart = templateParts.find((part) => part.type === "richtext_part" &&
616
640
  !part.attrs.metadata &&
617
641
  this.isSimilarTitle(part.attrs.title, sectionTitle));
618
642
  }
@@ -620,7 +644,7 @@ export class OdtConvert {
620
644
  }
621
645
  isSimilarTitle(title1, title2) {
622
646
  // Remove special characters and extra spaces
623
- const normalize = str => str
647
+ const normalize = (str) => str
624
648
  .toLowerCase()
625
649
  .replace(/[^a-z0-9]/g, "")
626
650
  .trim();
@@ -672,7 +696,7 @@ export class OdtConvert {
672
696
  // Check style properties for title-like formatting
673
697
  const firstParagraph = this.contentDoc.query("text:p");
674
698
  if (firstParagraph) {
675
- const styleName = firstParagraph.getAttribute("text:style-name");
699
+ const styleName = attr(firstParagraph, "text:style-name");
676
700
  const style = this.styles[styleName];
677
701
  if (style && this.isTitleStyle(style)) {
678
702
  // Remove this node from the document so it's not processed again
@@ -727,7 +751,7 @@ export class OdtConvert {
727
751
  // For headings, use the text content as section title
728
752
  if (node.tagName === "text:h") {
729
753
  // Get the heading level
730
- const level = parseInt(node.getAttribute("text:outline-level")) || 1;
754
+ const level = parseInt(attr(node, "text:outline-level")) || 1;
731
755
  // Only use level 1 and 2 headings as section titles
732
756
  if (level <= 2) {
733
757
  return node.textContent.trim();
@@ -755,7 +779,7 @@ export class OdtConvert {
755
779
  }
756
780
  // For text:section elements, check for section-name attribute
757
781
  if (node.tagName === "text:section") {
758
- const sectionName = node.getAttribute("text:name");
782
+ const sectionName = attr(node, "text:name");
759
783
  if (sectionName) {
760
784
  return this.formatSectionName(sectionName);
761
785
  }
@@ -769,7 +793,7 @@ export class OdtConvert {
769
793
  const words = name.split(/[_-]/);
770
794
  // Capitalize first letter of each word and join
771
795
  return words
772
- .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
796
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
773
797
  .join(" ")
774
798
  .trim();
775
799
  }
@@ -779,8 +803,8 @@ export class OdtConvert {
779
803
  title: null,
780
804
  content: []
781
805
  };
782
- body.children.forEach(node => {
783
- const styleName = node.getAttribute("text:style-name");
806
+ body.children.forEach((node) => {
807
+ const styleName = attr(node, "text:style-name");
784
808
  const title = this.getSectionTitle(node, styleName);
785
809
  if (title && this.isHeadingStyle(styleName)) {
786
810
  // Start new section
@@ -793,9 +817,9 @@ export class OdtConvert {
793
817
  };
794
818
  }
795
819
  const converted = [this.convertBlockNode(node)]
796
- .filter(node => node)
820
+ .filter((node) => node)
797
821
  .flat();
798
- converted.forEach(node => currentSection.content.push(node));
822
+ converted.forEach((node) => currentSection.content.push(node));
799
823
  });
800
824
  // Add final section
801
825
  if (currentSection.content.length) {
@@ -834,7 +858,7 @@ export class OdtConvert {
834
858
  "source code pro",
835
859
  "fira code"
836
860
  ];
837
- return monospacePatterns.some(pattern => fontFamily.includes(pattern));
861
+ return monospacePatterns.some((pattern) => fontFamily.includes(pattern));
838
862
  }
839
863
  return false;
840
864
  }
@@ -875,12 +899,12 @@ export class OdtConvert {
875
899
  }
876
900
  convertContainer(container) {
877
901
  return container.children
878
- .map(node => this.convertBlockNode(node))
879
- .filter(node => node)
902
+ .map((node) => this.convertBlockNode(node))
903
+ .filter((node) => node)
880
904
  .flat();
881
905
  }
882
906
  convertBlockNode(node) {
883
- const track = this.currentTracks.map(track => ({
907
+ const track = this.currentTracks.map((track) => ({
884
908
  type: track.type,
885
909
  user: track.attrs.user,
886
910
  username: track.attrs.username,
@@ -917,7 +941,7 @@ export class OdtConvert {
917
941
  // Skip bibliography sections inserted by citation managers
918
942
  // (Zotero: name contains "ZOTERO_BIBL"/"CSL_BIBLIOGRAPHY",
919
943
  // JabRef: name is "JR_bib" / "JR_BIB").
920
- const sectionName = node.getAttribute("text:name") || "";
944
+ const sectionName = attr(node, "text:name") || "";
921
945
  if (isOdtBibliographySection(sectionName)) {
922
946
  return null;
923
947
  }
@@ -931,7 +955,7 @@ export class OdtConvert {
931
955
  }
932
956
  }
933
957
  convertParagraph(node, attrs = {}) {
934
- const styleName = node.getAttribute("text:style-name");
958
+ const styleName = attr(node, "text:style-name");
935
959
  const style = this.styles[styleName];
936
960
  // Check if this is a code block (preformatted text)
937
961
  if (this.isCodeBlockStyle(styleName, style)) {
@@ -969,12 +993,12 @@ export class OdtConvert {
969
993
  };
970
994
  }
971
995
  convertHeading(node, attrs = {}) {
972
- const level = parseInt(node.getAttribute("text:outline-level") || 1) || 1;
996
+ const level = parseInt(attr(node, "text:outline-level") || "1") || 1;
973
997
  // Check for bookmark
974
998
  let id = null;
975
999
  const bookmarkStart = node.query("text:bookmark-start");
976
1000
  if (bookmarkStart) {
977
- const refName = bookmarkStart.getAttribute("text:name");
1001
+ const refName = attr(bookmarkStart, "text:name");
978
1002
  if (refName && this.referenceableObjects[refName]) {
979
1003
  id = this.referenceableObjects[refName].id;
980
1004
  }
@@ -992,12 +1016,12 @@ export class OdtConvert {
992
1016
  let insideCitationReferenceMark = false;
993
1017
  let insideBibliographyReferenceMark = false;
994
1018
  return node.children
995
- .map(child => {
1019
+ .map((child) => {
996
1020
  if (insideBibliographyReferenceMark) {
997
1021
  // Swallow all rendered bibliography content until the
998
1022
  // closing mark — we have our own bibliography system.
999
1023
  if (child.tagName === "text:reference-mark-end") {
1000
- const name = child.getAttribute("text:name");
1024
+ const name = attr(child, "text:name");
1001
1025
  if (name && isOdtBibliographyReferenceMark(name)) {
1002
1026
  insideBibliographyReferenceMark = false;
1003
1027
  }
@@ -1007,7 +1031,7 @@ export class OdtConvert {
1007
1031
  if (insideCitationReferenceMark) {
1008
1032
  if (child.tagName === "text:reference-mark-end") {
1009
1033
  // Process citation when we hit the end mark
1010
- const name = child.getAttribute("text:name");
1034
+ const name = attr(child, "text:name");
1011
1035
  if (name && isOdtCitationMark(name)) {
1012
1036
  insideCitationReferenceMark = false;
1013
1037
  return this.convertCitation(name, currentStyleMarks);
@@ -1017,7 +1041,7 @@ export class OdtConvert {
1017
1041
  }
1018
1042
  switch (child.tagName) {
1019
1043
  case "text:change-start": {
1020
- const changeId = child.getAttribute("text:change-id");
1044
+ const changeId = attr(child, "text:change-id");
1021
1045
  const track = this.tracks[changeId];
1022
1046
  if (track) {
1023
1047
  const trackMark = {
@@ -1036,10 +1060,10 @@ export class OdtConvert {
1036
1060
  return null;
1037
1061
  }
1038
1062
  case "text:change-end": {
1039
- const changeId = child.getAttribute("text:change-id");
1063
+ const changeId = attr(child, "text:change-id");
1040
1064
  const track = this.tracks[changeId];
1041
1065
  if (track) {
1042
- this.currentTracks = this.currentTracks.filter(mark => mark.type !== track.type);
1066
+ this.currentTracks = this.currentTracks.filter((mark) => mark.type !== track.type);
1043
1067
  }
1044
1068
  return null;
1045
1069
  }
@@ -1059,7 +1083,7 @@ export class OdtConvert {
1059
1083
  case "office:annotation-end":
1060
1084
  return this.convertAnnotationEnd(child);
1061
1085
  case "text:reference-mark-start": {
1062
- const name = child.getAttribute("text:name");
1086
+ const name = attr(child, "text:name");
1063
1087
  if (name && isOdtCitationMark(name)) {
1064
1088
  insideCitationReferenceMark = true;
1065
1089
  }
@@ -1081,13 +1105,13 @@ export class OdtConvert {
1081
1105
  console.warn(`Unsupported inline node: ${child.tagName}`);
1082
1106
  }
1083
1107
  })
1084
- .filter(node => node)
1108
+ .filter((node) => node)
1085
1109
  .flat();
1086
1110
  }
1087
1111
  getCurrentMarks(currentStyleMarks = []) {
1088
1112
  const commentMarks = [];
1089
1113
  // Add comment marks for any active comment IDs
1090
- this.currentCommentIds.forEach(commentId => {
1114
+ this.currentCommentIds.forEach((commentId) => {
1091
1115
  commentMarks.push({
1092
1116
  type: "comment",
1093
1117
  attrs: {
@@ -1109,7 +1133,7 @@ export class OdtConvert {
1109
1133
  return textNode;
1110
1134
  }
1111
1135
  convertSpan(node, currentStyleMarks) {
1112
- const styleName = node.getAttribute("text:style-name");
1136
+ const styleName = attr(node, "text:style-name");
1113
1137
  const style = this.styles[styleName];
1114
1138
  if (style?.textProperties?.bold) {
1115
1139
  currentStyleMarks = [...currentStyleMarks, { type: "strong" }];
@@ -1145,7 +1169,7 @@ export class OdtConvert {
1145
1169
  "droid sans mono",
1146
1170
  "monospace"
1147
1171
  ];
1148
- const isMonospace = monospacePatterns.some(pattern => fontFamily.includes(pattern));
1172
+ const isMonospace = monospacePatterns.some((pattern) => fontFamily.includes(pattern));
1149
1173
  if (isMonospace) {
1150
1174
  currentStyleMarks = [...currentStyleMarks, { type: "code" }];
1151
1175
  }
@@ -1165,13 +1189,13 @@ export class OdtConvert {
1165
1189
  // Check if this is a citation-only footnote
1166
1190
  const referenceMarkStart = firstParagraph.query("text:reference-mark-start");
1167
1191
  const referenceMarkEnd = firstParagraph.query("text:reference-mark-end");
1168
- const markName = referenceMarkStart?.getAttribute("text:name");
1192
+ const markName = attr(referenceMarkStart, "text:name");
1169
1193
  if (referenceMarkStart &&
1170
1194
  referenceMarkEnd &&
1171
1195
  markName &&
1172
1196
  isOdtCitationMark(markName) &&
1173
1197
  // Check that there's no content outside the reference marks
1174
- firstParagraph.children.every(child => child.tagName === "text:reference-mark-start" ||
1198
+ firstParagraph.children.every((child) => child.tagName === "text:reference-mark-start" ||
1175
1199
  child.tagName === "text:reference-mark-end" ||
1176
1200
  (child.tagName === "text:span" &&
1177
1201
  child.previousSibling?.tagName ===
@@ -1207,7 +1231,7 @@ export class OdtConvert {
1207
1231
  return null;
1208
1232
  }
1209
1233
  convertList(node, attrs) {
1210
- const listStyle = node.getAttribute("text:style-name");
1234
+ const listStyle = attr(node, "text:style-name");
1211
1235
  const isOrdered = this.isOrderedList(listStyle);
1212
1236
  attrs = Object.assign({
1213
1237
  id: randomListId()
@@ -1218,14 +1242,14 @@ export class OdtConvert {
1218
1242
  return {
1219
1243
  type: isOrdered ? "ordered_list" : "bullet_list",
1220
1244
  attrs,
1221
- content: node.queryAll("text:list-item").map(item => ({
1245
+ content: node.queryAll("text:list-item").map((item) => ({
1222
1246
  type: "list_item",
1223
1247
  content: this.convertContainer(item)
1224
1248
  }))
1225
1249
  };
1226
1250
  }
1227
1251
  convertAnnotationStart(node) {
1228
- const commentId = (node.getAttribute("office:name") || "")
1252
+ const commentId = (attr(node, "office:name") || "")
1229
1253
  .replace(/\D/g, "")
1230
1254
  .slice(0, 9);
1231
1255
  if (commentId && this.comments[commentId]) {
@@ -1234,7 +1258,7 @@ export class OdtConvert {
1234
1258
  return null;
1235
1259
  }
1236
1260
  convertAnnotationEnd(node) {
1237
- const commentId = (node.getAttribute("office:name") || "")
1261
+ const commentId = (attr(node, "office:name") || "")
1238
1262
  .replace(/\D/g, "")
1239
1263
  .slice(0, 9);
1240
1264
  if (commentId) {
@@ -1246,7 +1270,7 @@ export class OdtConvert {
1246
1270
  return null;
1247
1271
  }
1248
1272
  convertHeadingReference(node) {
1249
- const refName = node.getAttribute("text:ref-name");
1273
+ const refName = attr(node, "text:ref-name");
1250
1274
  if (!refName || !this.referenceableObjects[refName]) {
1251
1275
  return null;
1252
1276
  }
@@ -1263,7 +1287,7 @@ export class OdtConvert {
1263
1287
  };
1264
1288
  }
1265
1289
  convertFigureReference(node) {
1266
- const refName = node.getAttribute("text:ref-name");
1290
+ const refName = attr(node, "text:ref-name");
1267
1291
  if (!refName || !this.referenceableObjects[refName]) {
1268
1292
  return null;
1269
1293
  }
@@ -1299,13 +1323,13 @@ export class OdtConvert {
1299
1323
  if (!frame) {
1300
1324
  return null;
1301
1325
  }
1302
- const href = imageElement.getAttribute("xlink:href");
1326
+ const href = attr(imageElement, "xlink:href");
1303
1327
  if (!href || !href.startsWith("Pictures/")) {
1304
1328
  return null;
1305
1329
  }
1306
1330
  const imageId = Math.floor(Math.random() * 1000000);
1307
- const width = this.convertLength(node.getAttribute("svg:width"));
1308
- const height = this.convertLength(node.getAttribute("svg:height"));
1331
+ const width = this.convertLength(attr(node, "svg:width"));
1332
+ const height = this.convertLength(attr(node, "svg:height"));
1309
1333
  const title = href.split("/").pop();
1310
1334
  this.images[imageId] = {
1311
1335
  id: imageId,
@@ -1327,7 +1351,7 @@ export class OdtConvert {
1327
1351
  const sequence = frame.query("text:sequence");
1328
1352
  let figureId = null;
1329
1353
  if (sequence) {
1330
- const refName = sequence.getAttribute("text:ref-name");
1354
+ const refName = attr(sequence, "text:ref-name");
1331
1355
  if (refName && this.referenceableObjects[refName]) {
1332
1356
  figureId = this.referenceableObjects[refName].id;
1333
1357
  }
@@ -1411,13 +1435,13 @@ export class OdtConvert {
1411
1435
  }
1412
1436
  }
1413
1437
  convertTable(node, attrs) {
1414
- const width = node.getAttribute("style:rel-width")?.replace("%", "") || "100";
1415
- const styleName = node.getAttribute("table:style-name");
1438
+ const width = attr(node, "style:rel-width")?.replace("%", "") || "100";
1439
+ const styleName = attr(node, "table:style-name");
1416
1440
  const style = this.styles[styleName];
1417
1441
  const aligned = style?.tableProperties.align || "center";
1418
1442
  attrs = Object.assign({
1419
1443
  id: randomTableId(),
1420
- track: parseTracks(node.getAttribute("text:change-id")),
1444
+ track: parseTracks(attr(node, "text:change-id")),
1421
1445
  width,
1422
1446
  aligned,
1423
1447
  layout: "fixed",
@@ -1433,7 +1457,7 @@ export class OdtConvert {
1433
1457
  type: "table_body",
1434
1458
  content: node
1435
1459
  .queryAll("table:table-row")
1436
- .map(row => this.convertTableRow(row))
1460
+ .map((row) => this.convertTableRow(row))
1437
1461
  }
1438
1462
  ]
1439
1463
  };
@@ -1443,7 +1467,7 @@ export class OdtConvert {
1443
1467
  type: "table_row",
1444
1468
  content: row
1445
1469
  .queryAll(["table:table-cell", "table:covered-table-cell"])
1446
- .map(cell => this.convertTableCell(cell))
1470
+ .map((cell) => this.convertTableCell(cell))
1447
1471
  };
1448
1472
  }
1449
1473
  convertTableCell(node) {
@@ -1453,16 +1477,16 @@ export class OdtConvert {
1453
1477
  return {
1454
1478
  type: "table_cell",
1455
1479
  attrs: {
1456
- colspan: parseInt(node.getAttribute("table:number-columns-spanned")) || 1,
1457
- rowspan: parseInt(node.getAttribute("table:number-rows-spanned")) ||
1480
+ colspan: parseInt(attr(node, "table:number-columns-spanned")) || 1,
1481
+ rowspan: parseInt(attr(node, "table:number-rows-spanned")) ||
1458
1482
  1,
1459
- track: parseTracks(node.getAttribute("text:change-id"))
1483
+ track: parseTracks(attr(node, "text:change-id"))
1460
1484
  },
1461
1485
  content: this.convertContainer(node)
1462
1486
  };
1463
1487
  }
1464
1488
  convertLink(node, currentStyleMarks) {
1465
- const href = node.getAttribute("xlink:href");
1489
+ const href = attr(node, "xlink:href");
1466
1490
  currentStyleMarks = currentStyleMarks.concat([
1467
1491
  { type: "link", attrs: { href } }
1468
1492
  ]);
@@ -1475,14 +1499,14 @@ export class OdtConvert {
1475
1499
  // 3. Default to "en-US"
1476
1500
  // Check content language
1477
1501
  if (this.contentDoc) {
1478
- const langAttr = this.contentDoc.getAttribute("office:default-language") ||
1479
- this.contentDoc.getAttribute("dc:language");
1502
+ const langAttr = attr(this.contentDoc, "office:default-language") ||
1503
+ attr(this.contentDoc, "dc:language");
1480
1504
  if (langAttr) {
1481
1505
  return langAttr;
1482
1506
  }
1483
1507
  const firstParagraph = this.contentDoc.query("text:p");
1484
1508
  if (firstParagraph) {
1485
- const paraLang = firstParagraph.getAttribute("xml:lang");
1509
+ const paraLang = attr(firstParagraph, "xml:lang");
1486
1510
  if (paraLang) {
1487
1511
  return paraLang;
1488
1512
  }
@@ -1492,8 +1516,8 @@ export class OdtConvert {
1492
1516
  if (this.stylesDoc) {
1493
1517
  const defaultStyle = this.stylesDoc.query("style:default-style");
1494
1518
  if (defaultStyle) {
1495
- const styleLang = defaultStyle.getAttribute("fo:language") ||
1496
- defaultStyle.getAttribute("style:language-complex");
1519
+ const styleLang = attr(defaultStyle, "fo:language") ||
1520
+ attr(defaultStyle, "style:language-complex");
1497
1521
  if (styleLang) {
1498
1522
  return styleLang;
1499
1523
  }