pul_uv_rails 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (588) hide show
  1. checksums.yaml +7 -0
  2. data/.bowerrc +3 -0
  3. data/.gitignore +9 -0
  4. data/.rspec +2 -0
  5. data/.travis.yml +5 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE +202 -0
  8. data/README.md +44 -0
  9. data/Rakefile +6 -0
  10. data/bower.json +27 -0
  11. data/lib/pul_uv_rails.rb +12 -0
  12. data/lib/pul_uv_rails/universal_viewer.rb +34 -0
  13. data/lib/pul_uv_rails/version.rb +3 -0
  14. data/public/universalviewer/.bower.json +32 -0
  15. data/public/universalviewer/.bowerrc +6 -0
  16. data/public/universalviewer/.gitattributes +4 -0
  17. data/public/universalviewer/.gitignore +88 -0
  18. data/public/universalviewer/.gitmodules +6 -0
  19. data/public/universalviewer/.npmignore +19 -0
  20. data/public/universalviewer/.travis.yml +21 -0
  21. data/public/universalviewer/.vscode/settings.json +13 -0
  22. data/public/universalviewer/.vscode/tasks.json +25 -0
  23. data/public/universalviewer/CHANGELOG.md +11 -0
  24. data/public/universalviewer/Gruntfile.js +490 -0
  25. data/public/universalviewer/LICENSE.txt +16 -0
  26. data/public/universalviewer/README.md +98 -0
  27. data/public/universalviewer/app.build.js +14 -0
  28. data/public/universalviewer/bower.json +23 -0
  29. data/public/universalviewer/config.js +56 -0
  30. data/public/universalviewer/dist/uv-2.0.1/app.html +61 -0
  31. data/public/universalviewer/dist/uv-2.0.1/html/uv-pdfcenterpanel-module/viewer.html +363 -0
  32. data/public/universalviewer/dist/uv-2.0.1/l10n/ach/chrome.properties +18 -0
  33. data/public/universalviewer/dist/uv-2.0.1/l10n/ach/viewer.properties +97 -0
  34. data/public/universalviewer/dist/uv-2.0.1/l10n/af/chrome.properties +18 -0
  35. data/public/universalviewer/dist/uv-2.0.1/l10n/af/viewer.properties +140 -0
  36. data/public/universalviewer/dist/uv-2.0.1/l10n/ak/chrome.properties +18 -0
  37. data/public/universalviewer/dist/uv-2.0.1/l10n/ak/viewer.properties +123 -0
  38. data/public/universalviewer/dist/uv-2.0.1/l10n/an/chrome.properties +19 -0
  39. data/public/universalviewer/dist/uv-2.0.1/l10n/an/viewer.properties +161 -0
  40. data/public/universalviewer/dist/uv-2.0.1/l10n/ar/chrome.properties +19 -0
  41. data/public/universalviewer/dist/uv-2.0.1/l10n/ar/viewer.properties +161 -0
  42. data/public/universalviewer/dist/uv-2.0.1/l10n/as/chrome.properties +19 -0
  43. data/public/universalviewer/dist/uv-2.0.1/l10n/as/viewer.properties +161 -0
  44. data/public/universalviewer/dist/uv-2.0.1/l10n/ast/chrome.properties +7 -0
  45. data/public/universalviewer/dist/uv-2.0.1/l10n/ast/viewer.properties +73 -0
  46. data/public/universalviewer/dist/uv-2.0.1/l10n/az/chrome.properties +18 -0
  47. data/public/universalviewer/dist/uv-2.0.1/l10n/az/viewer.properties +139 -0
  48. data/public/universalviewer/dist/uv-2.0.1/l10n/be/chrome.properties +4 -0
  49. data/public/universalviewer/dist/uv-2.0.1/l10n/be/viewer.properties +103 -0
  50. data/public/universalviewer/dist/uv-2.0.1/l10n/bg/chrome.properties +18 -0
  51. data/public/universalviewer/dist/uv-2.0.1/l10n/bg/viewer.properties +124 -0
  52. data/public/universalviewer/dist/uv-2.0.1/l10n/bn-BD/chrome.properties +18 -0
  53. data/public/universalviewer/dist/uv-2.0.1/l10n/bn-BD/viewer.properties +139 -0
  54. data/public/universalviewer/dist/uv-2.0.1/l10n/bn-IN/chrome.properties +18 -0
  55. data/public/universalviewer/dist/uv-2.0.1/l10n/bn-IN/viewer.properties +139 -0
  56. data/public/universalviewer/dist/uv-2.0.1/l10n/br/chrome.properties +19 -0
  57. data/public/universalviewer/dist/uv-2.0.1/l10n/br/viewer.properties +161 -0
  58. data/public/universalviewer/dist/uv-2.0.1/l10n/bs/chrome.properties +8 -0
  59. data/public/universalviewer/dist/uv-2.0.1/l10n/bs/viewer.properties +125 -0
  60. data/public/universalviewer/dist/uv-2.0.1/l10n/ca/chrome.properties +19 -0
  61. data/public/universalviewer/dist/uv-2.0.1/l10n/ca/viewer.properties +161 -0
  62. data/public/universalviewer/dist/uv-2.0.1/l10n/cs/chrome.properties +19 -0
  63. data/public/universalviewer/dist/uv-2.0.1/l10n/cs/viewer.properties +161 -0
  64. data/public/universalviewer/dist/uv-2.0.1/l10n/csb/chrome.properties +8 -0
  65. data/public/universalviewer/dist/uv-2.0.1/l10n/csb/viewer.properties +134 -0
  66. data/public/universalviewer/dist/uv-2.0.1/l10n/cy/chrome.properties +19 -0
  67. data/public/universalviewer/dist/uv-2.0.1/l10n/cy/viewer.properties +161 -0
  68. data/public/universalviewer/dist/uv-2.0.1/l10n/da/chrome.properties +9 -0
  69. data/public/universalviewer/dist/uv-2.0.1/l10n/da/viewer.properties +161 -0
  70. data/public/universalviewer/dist/uv-2.0.1/l10n/de/chrome.properties +19 -0
  71. data/public/universalviewer/dist/uv-2.0.1/l10n/de/viewer.properties +161 -0
  72. data/public/universalviewer/dist/uv-2.0.1/l10n/el/chrome.properties +9 -0
  73. data/public/universalviewer/dist/uv-2.0.1/l10n/el/viewer.properties +131 -0
  74. data/public/universalviewer/dist/uv-2.0.1/l10n/en-GB/chrome.properties +19 -0
  75. data/public/universalviewer/dist/uv-2.0.1/l10n/en-GB/viewer.properties +161 -0
  76. data/public/universalviewer/dist/uv-2.0.1/l10n/en-US/chrome.properties +19 -0
  77. data/public/universalviewer/dist/uv-2.0.1/l10n/en-US/viewer.properties +161 -0
  78. data/public/universalviewer/dist/uv-2.0.1/l10n/en-ZA/chrome.properties +19 -0
  79. data/public/universalviewer/dist/uv-2.0.1/l10n/en-ZA/viewer.properties +161 -0
  80. data/public/universalviewer/dist/uv-2.0.1/l10n/eo/chrome.properties +19 -0
  81. data/public/universalviewer/dist/uv-2.0.1/l10n/eo/viewer.properties +161 -0
  82. data/public/universalviewer/dist/uv-2.0.1/l10n/es-AR/chrome.properties +19 -0
  83. data/public/universalviewer/dist/uv-2.0.1/l10n/es-AR/viewer.properties +167 -0
  84. data/public/universalviewer/dist/uv-2.0.1/l10n/es-CL/chrome.properties +19 -0
  85. data/public/universalviewer/dist/uv-2.0.1/l10n/es-CL/viewer.properties +126 -0
  86. data/public/universalviewer/dist/uv-2.0.1/l10n/es-ES/chrome.properties +8 -0
  87. data/public/universalviewer/dist/uv-2.0.1/l10n/es-ES/viewer.properties +107 -0
  88. data/public/universalviewer/dist/uv-2.0.1/l10n/es-MX/chrome.properties +19 -0
  89. data/public/universalviewer/dist/uv-2.0.1/l10n/es-MX/viewer.properties +161 -0
  90. data/public/universalviewer/dist/uv-2.0.1/l10n/et/chrome.properties +19 -0
  91. data/public/universalviewer/dist/uv-2.0.1/l10n/et/viewer.properties +161 -0
  92. data/public/universalviewer/dist/uv-2.0.1/l10n/eu/chrome.properties +18 -0
  93. data/public/universalviewer/dist/uv-2.0.1/l10n/eu/viewer.properties +136 -0
  94. data/public/universalviewer/dist/uv-2.0.1/l10n/fa/chrome.properties +18 -0
  95. data/public/universalviewer/dist/uv-2.0.1/l10n/fa/viewer.properties +102 -0
  96. data/public/universalviewer/dist/uv-2.0.1/l10n/ff/chrome.properties +18 -0
  97. data/public/universalviewer/dist/uv-2.0.1/l10n/ff/viewer.properties +123 -0
  98. data/public/universalviewer/dist/uv-2.0.1/l10n/fi/chrome.properties +19 -0
  99. data/public/universalviewer/dist/uv-2.0.1/l10n/fi/viewer.properties +161 -0
  100. data/public/universalviewer/dist/uv-2.0.1/l10n/fr/chrome.properties +18 -0
  101. data/public/universalviewer/dist/uv-2.0.1/l10n/fr/viewer.properties +161 -0
  102. data/public/universalviewer/dist/uv-2.0.1/l10n/fy-NL/chrome.properties +9 -0
  103. data/public/universalviewer/dist/uv-2.0.1/l10n/fy-NL/viewer.properties +167 -0
  104. data/public/universalviewer/dist/uv-2.0.1/l10n/ga-IE/chrome.properties +19 -0
  105. data/public/universalviewer/dist/uv-2.0.1/l10n/ga-IE/viewer.properties +161 -0
  106. data/public/universalviewer/dist/uv-2.0.1/l10n/gd/chrome.properties +19 -0
  107. data/public/universalviewer/dist/uv-2.0.1/l10n/gd/viewer.properties +161 -0
  108. data/public/universalviewer/dist/uv-2.0.1/l10n/gl/chrome.properties +8 -0
  109. data/public/universalviewer/dist/uv-2.0.1/l10n/gl/viewer.properties +124 -0
  110. data/public/universalviewer/dist/uv-2.0.1/l10n/gu-IN/chrome.properties +10 -0
  111. data/public/universalviewer/dist/uv-2.0.1/l10n/gu-IN/viewer.properties +108 -0
  112. data/public/universalviewer/dist/uv-2.0.1/l10n/he/chrome.properties +20 -0
  113. data/public/universalviewer/dist/uv-2.0.1/l10n/he/viewer.properties +150 -0
  114. data/public/universalviewer/dist/uv-2.0.1/l10n/hi-IN/chrome.properties +18 -0
  115. data/public/universalviewer/dist/uv-2.0.1/l10n/hi-IN/viewer.properties +136 -0
  116. data/public/universalviewer/dist/uv-2.0.1/l10n/hr/chrome.properties +18 -0
  117. data/public/universalviewer/dist/uv-2.0.1/l10n/hr/viewer.properties +139 -0
  118. data/public/universalviewer/dist/uv-2.0.1/l10n/hu/chrome.properties +19 -0
  119. data/public/universalviewer/dist/uv-2.0.1/l10n/hu/viewer.properties +161 -0
  120. data/public/universalviewer/dist/uv-2.0.1/l10n/hy-AM/chrome.properties +19 -0
  121. data/public/universalviewer/dist/uv-2.0.1/l10n/hy-AM/viewer.properties +161 -0
  122. data/public/universalviewer/dist/uv-2.0.1/l10n/id/chrome.properties +19 -0
  123. data/public/universalviewer/dist/uv-2.0.1/l10n/id/viewer.properties +167 -0
  124. data/public/universalviewer/dist/uv-2.0.1/l10n/is/chrome.properties +19 -0
  125. data/public/universalviewer/dist/uv-2.0.1/l10n/is/viewer.properties +161 -0
  126. data/public/universalviewer/dist/uv-2.0.1/l10n/it/chrome.properties +8 -0
  127. data/public/universalviewer/dist/uv-2.0.1/l10n/it/viewer.properties +107 -0
  128. data/public/universalviewer/dist/uv-2.0.1/l10n/ja/chrome.properties +19 -0
  129. data/public/universalviewer/dist/uv-2.0.1/l10n/ja/viewer.properties +161 -0
  130. data/public/universalviewer/dist/uv-2.0.1/l10n/ka/chrome.properties +18 -0
  131. data/public/universalviewer/dist/uv-2.0.1/l10n/ka/viewer.properties +124 -0
  132. data/public/universalviewer/dist/uv-2.0.1/l10n/kk/chrome.properties +19 -0
  133. data/public/universalviewer/dist/uv-2.0.1/l10n/kk/viewer.properties +161 -0
  134. data/public/universalviewer/dist/uv-2.0.1/l10n/km/chrome.properties +19 -0
  135. data/public/universalviewer/dist/uv-2.0.1/l10n/km/viewer.properties +161 -0
  136. data/public/universalviewer/dist/uv-2.0.1/l10n/kn/chrome.properties +18 -0
  137. data/public/universalviewer/dist/uv-2.0.1/l10n/kn/viewer.properties +123 -0
  138. data/public/universalviewer/dist/uv-2.0.1/l10n/ko/chrome.properties +19 -0
  139. data/public/universalviewer/dist/uv-2.0.1/l10n/ko/viewer.properties +161 -0
  140. data/public/universalviewer/dist/uv-2.0.1/l10n/ku/chrome.properties +18 -0
  141. data/public/universalviewer/dist/uv-2.0.1/l10n/ku/viewer.properties +136 -0
  142. data/public/universalviewer/dist/uv-2.0.1/l10n/lg/chrome.properties +18 -0
  143. data/public/universalviewer/dist/uv-2.0.1/l10n/lg/viewer.properties +100 -0
  144. data/public/universalviewer/dist/uv-2.0.1/l10n/lij/chrome.properties +7 -0
  145. data/public/universalviewer/dist/uv-2.0.1/l10n/lij/viewer.properties +94 -0
  146. data/public/universalviewer/dist/uv-2.0.1/l10n/locale.properties +312 -0
  147. data/public/universalviewer/dist/uv-2.0.1/l10n/lt/chrome.properties +19 -0
  148. data/public/universalviewer/dist/uv-2.0.1/l10n/lt/viewer.properties +161 -0
  149. data/public/universalviewer/dist/uv-2.0.1/l10n/lv/chrome.properties +9 -0
  150. data/public/universalviewer/dist/uv-2.0.1/l10n/lv/viewer.properties +157 -0
  151. data/public/universalviewer/dist/uv-2.0.1/l10n/mai/chrome.properties +18 -0
  152. data/public/universalviewer/dist/uv-2.0.1/l10n/mai/viewer.properties +123 -0
  153. data/public/universalviewer/dist/uv-2.0.1/l10n/mk/chrome.properties +9 -0
  154. data/public/universalviewer/dist/uv-2.0.1/l10n/mk/viewer.properties +126 -0
  155. data/public/universalviewer/dist/uv-2.0.1/l10n/ml/chrome.properties +18 -0
  156. data/public/universalviewer/dist/uv-2.0.1/l10n/ml/viewer.properties +136 -0
  157. data/public/universalviewer/dist/uv-2.0.1/l10n/mn/chrome.properties +15 -0
  158. data/public/universalviewer/dist/uv-2.0.1/l10n/mn/viewer.properties +65 -0
  159. data/public/universalviewer/dist/uv-2.0.1/l10n/mr/chrome.properties +18 -0
  160. data/public/universalviewer/dist/uv-2.0.1/l10n/mr/viewer.properties +119 -0
  161. data/public/universalviewer/dist/uv-2.0.1/l10n/ms/chrome.properties +19 -0
  162. data/public/universalviewer/dist/uv-2.0.1/l10n/ms/viewer.properties +161 -0
  163. data/public/universalviewer/dist/uv-2.0.1/l10n/my/chrome.properties +18 -0
  164. data/public/universalviewer/dist/uv-2.0.1/l10n/my/viewer.properties +123 -0
  165. data/public/universalviewer/dist/uv-2.0.1/l10n/nb-NO/chrome.properties +19 -0
  166. data/public/universalviewer/dist/uv-2.0.1/l10n/nb-NO/viewer.properties +161 -0
  167. data/public/universalviewer/dist/uv-2.0.1/l10n/nl/chrome.properties +19 -0
  168. data/public/universalviewer/dist/uv-2.0.1/l10n/nl/viewer.properties +161 -0
  169. data/public/universalviewer/dist/uv-2.0.1/l10n/nn-NO/chrome.properties +8 -0
  170. data/public/universalviewer/dist/uv-2.0.1/l10n/nn-NO/viewer.properties +136 -0
  171. data/public/universalviewer/dist/uv-2.0.1/l10n/nso/chrome.properties +18 -0
  172. data/public/universalviewer/dist/uv-2.0.1/l10n/nso/viewer.properties +123 -0
  173. data/public/universalviewer/dist/uv-2.0.1/l10n/oc/chrome.properties +19 -0
  174. data/public/universalviewer/dist/uv-2.0.1/l10n/oc/viewer.properties +161 -0
  175. data/public/universalviewer/dist/uv-2.0.1/l10n/or/chrome.properties +18 -0
  176. data/public/universalviewer/dist/uv-2.0.1/l10n/or/viewer.properties +139 -0
  177. data/public/universalviewer/dist/uv-2.0.1/l10n/pa-IN/chrome.properties +10 -0
  178. data/public/universalviewer/dist/uv-2.0.1/l10n/pa-IN/viewer.properties +175 -0
  179. data/public/universalviewer/dist/uv-2.0.1/l10n/pl/chrome.properties +9 -0
  180. data/public/universalviewer/dist/uv-2.0.1/l10n/pl/viewer.properties +149 -0
  181. data/public/universalviewer/dist/uv-2.0.1/l10n/pt-BR/chrome.properties +19 -0
  182. data/public/universalviewer/dist/uv-2.0.1/l10n/pt-BR/viewer.properties +161 -0
  183. data/public/universalviewer/dist/uv-2.0.1/l10n/pt-PT/chrome.properties +19 -0
  184. data/public/universalviewer/dist/uv-2.0.1/l10n/pt-PT/viewer.properties +166 -0
  185. data/public/universalviewer/dist/uv-2.0.1/l10n/rm/chrome.properties +8 -0
  186. data/public/universalviewer/dist/uv-2.0.1/l10n/rm/viewer.properties +127 -0
  187. data/public/universalviewer/dist/uv-2.0.1/l10n/ro/chrome.properties +27 -0
  188. data/public/universalviewer/dist/uv-2.0.1/l10n/ro/viewer.properties +156 -0
  189. data/public/universalviewer/dist/uv-2.0.1/l10n/ru/chrome.properties +8 -0
  190. data/public/universalviewer/dist/uv-2.0.1/l10n/ru/viewer.properties +107 -0
  191. data/public/universalviewer/dist/uv-2.0.1/l10n/rw/chrome.properties +18 -0
  192. data/public/universalviewer/dist/uv-2.0.1/l10n/rw/viewer.properties +123 -0
  193. data/public/universalviewer/dist/uv-2.0.1/l10n/sah/chrome.properties +18 -0
  194. data/public/universalviewer/dist/uv-2.0.1/l10n/sah/viewer.properties +122 -0
  195. data/public/universalviewer/dist/uv-2.0.1/l10n/si/chrome.properties +17 -0
  196. data/public/universalviewer/dist/uv-2.0.1/l10n/si/viewer.properties +98 -0
  197. data/public/universalviewer/dist/uv-2.0.1/l10n/sk/chrome.properties +19 -0
  198. data/public/universalviewer/dist/uv-2.0.1/l10n/sk/viewer.properties +161 -0
  199. data/public/universalviewer/dist/uv-2.0.1/l10n/sl/chrome.properties +8 -0
  200. data/public/universalviewer/dist/uv-2.0.1/l10n/sl/viewer.properties +136 -0
  201. data/public/universalviewer/dist/uv-2.0.1/l10n/son/chrome.properties +18 -0
  202. data/public/universalviewer/dist/uv-2.0.1/l10n/son/viewer.properties +120 -0
  203. data/public/universalviewer/dist/uv-2.0.1/l10n/sq/chrome.properties +19 -0
  204. data/public/universalviewer/dist/uv-2.0.1/l10n/sq/viewer.properties +160 -0
  205. data/public/universalviewer/dist/uv-2.0.1/l10n/sr/chrome.properties +18 -0
  206. data/public/universalviewer/dist/uv-2.0.1/l10n/sr/viewer.properties +123 -0
  207. data/public/universalviewer/dist/uv-2.0.1/l10n/sv-SE/chrome.properties +19 -0
  208. data/public/universalviewer/dist/uv-2.0.1/l10n/sv-SE/viewer.properties +161 -0
  209. data/public/universalviewer/dist/uv-2.0.1/l10n/sw/chrome.properties +18 -0
  210. data/public/universalviewer/dist/uv-2.0.1/l10n/sw/viewer.properties +121 -0
  211. data/public/universalviewer/dist/uv-2.0.1/l10n/ta-LK/chrome.properties +3 -0
  212. data/public/universalviewer/dist/uv-2.0.1/l10n/ta-LK/viewer.properties +50 -0
  213. data/public/universalviewer/dist/uv-2.0.1/l10n/ta/chrome.properties +19 -0
  214. data/public/universalviewer/dist/uv-2.0.1/l10n/ta/viewer.properties +161 -0
  215. data/public/universalviewer/dist/uv-2.0.1/l10n/te/chrome.properties +18 -0
  216. data/public/universalviewer/dist/uv-2.0.1/l10n/te/viewer.properties +145 -0
  217. data/public/universalviewer/dist/uv-2.0.1/l10n/th/chrome.properties +19 -0
  218. data/public/universalviewer/dist/uv-2.0.1/l10n/th/viewer.properties +161 -0
  219. data/public/universalviewer/dist/uv-2.0.1/l10n/tl/chrome.properties +17 -0
  220. data/public/universalviewer/dist/uv-2.0.1/l10n/tl/viewer.properties +83 -0
  221. data/public/universalviewer/dist/uv-2.0.1/l10n/tn/chrome.properties +15 -0
  222. data/public/universalviewer/dist/uv-2.0.1/l10n/tn/viewer.properties +68 -0
  223. data/public/universalviewer/dist/uv-2.0.1/l10n/tr/chrome.properties +19 -0
  224. data/public/universalviewer/dist/uv-2.0.1/l10n/tr/viewer.properties +161 -0
  225. data/public/universalviewer/dist/uv-2.0.1/l10n/uk/chrome.properties +18 -0
  226. data/public/universalviewer/dist/uv-2.0.1/l10n/uk/viewer.properties +136 -0
  227. data/public/universalviewer/dist/uv-2.0.1/l10n/ur/chrome.properties +19 -0
  228. data/public/universalviewer/dist/uv-2.0.1/l10n/ur/viewer.properties +161 -0
  229. data/public/universalviewer/dist/uv-2.0.1/l10n/vi/chrome.properties +18 -0
  230. data/public/universalviewer/dist/uv-2.0.1/l10n/vi/viewer.properties +120 -0
  231. data/public/universalviewer/dist/uv-2.0.1/l10n/wo/chrome.properties +18 -0
  232. data/public/universalviewer/dist/uv-2.0.1/l10n/wo/viewer.properties +116 -0
  233. data/public/universalviewer/dist/uv-2.0.1/l10n/xh/chrome.properties +19 -0
  234. data/public/universalviewer/dist/uv-2.0.1/l10n/xh/viewer.properties +161 -0
  235. data/public/universalviewer/dist/uv-2.0.1/l10n/zh-CN/chrome.properties +19 -0
  236. data/public/universalviewer/dist/uv-2.0.1/l10n/zh-CN/viewer.properties +161 -0
  237. data/public/universalviewer/dist/uv-2.0.1/l10n/zh-TW/chrome.properties +20 -0
  238. data/public/universalviewer/dist/uv-2.0.1/l10n/zh-TW/viewer.properties +162 -0
  239. data/public/universalviewer/dist/uv-2.0.1/l10n/zu/chrome.properties +18 -0
  240. data/public/universalviewer/dist/uv-2.0.1/l10n/zu/viewer.properties +124 -0
  241. data/public/universalviewer/dist/uv-2.0.1/lib/Detector.js +67 -0
  242. data/public/universalviewer/dist/uv-2.0.1/lib/README.md +9 -0
  243. data/public/universalviewer/dist/uv-2.0.1/lib/app.js +9 -0
  244. data/public/universalviewer/dist/uv-2.0.1/lib/bundle.min.js +11 -0
  245. data/public/universalviewer/dist/uv-2.0.1/lib/compatibility.js +559 -0
  246. data/public/universalviewer/dist/uv-2.0.1/lib/embed.js +553 -0
  247. data/public/universalviewer/dist/uv-2.0.1/lib/flashmediaelement.swf +0 -0
  248. data/public/universalviewer/dist/uv-2.0.1/lib/iiif-gallery-component.js +475 -0
  249. data/public/universalviewer/dist/uv-2.0.1/lib/iiif-metadata-component.js +458 -0
  250. data/public/universalviewer/dist/uv-2.0.1/lib/iiif-tree-component.js +293 -0
  251. data/public/universalviewer/dist/uv-2.0.1/lib/l10n.js +1007 -0
  252. data/public/universalviewer/dist/uv-2.0.1/lib/mediaelement-and-player.js +4288 -0
  253. data/public/universalviewer/dist/uv-2.0.1/lib/openseadragon.min.js +15 -0
  254. data/public/universalviewer/dist/uv-2.0.1/lib/pdf.js +8568 -0
  255. data/public/universalviewer/dist/uv-2.0.1/lib/pdf.min.js +197 -0
  256. data/public/universalviewer/dist/uv-2.0.1/lib/pdf.worker.js +42400 -0
  257. data/public/universalviewer/dist/uv-2.0.1/lib/pdf.worker.min.js +891 -0
  258. data/public/universalviewer/dist/uv-2.0.1/lib/pdf_combined.js +937 -0
  259. data/public/universalviewer/dist/uv-2.0.1/lib/pdfobject.js +250 -0
  260. data/public/universalviewer/dist/uv-2.0.1/lib/stats.min.js +7 -0
  261. data/public/universalviewer/dist/uv-2.0.1/lib/three.min.js +870 -0
  262. data/public/universalviewer/dist/uv-2.0.1/lib/uv-mediaelement-extension-dependencies.js +5 -0
  263. data/public/universalviewer/dist/uv-2.0.1/lib/uv-mediaelement-extension.cy-GB.config.json +1 -0
  264. data/public/universalviewer/dist/uv-2.0.1/lib/uv-mediaelement-extension.en-GB.config.json +1 -0
  265. data/public/universalviewer/dist/uv-2.0.1/lib/uv-pdf-extension-dependencies.js +5 -0
  266. data/public/universalviewer/dist/uv-2.0.1/lib/uv-pdf-extension.cy-GB.config.json +1 -0
  267. data/public/universalviewer/dist/uv-2.0.1/lib/uv-pdf-extension.en-GB.config.json +1 -0
  268. data/public/universalviewer/dist/uv-2.0.1/lib/uv-seadragon-extension-dependencies.js +5 -0
  269. data/public/universalviewer/dist/uv-2.0.1/lib/uv-seadragon-extension.cy-GB.config.json +1 -0
  270. data/public/universalviewer/dist/uv-2.0.1/lib/uv-seadragon-extension.en-GB.config.json +1 -0
  271. data/public/universalviewer/dist/uv-2.0.1/lib/uv-virtex-extension-dependencies.js +5 -0
  272. data/public/universalviewer/dist/uv-2.0.1/lib/uv-virtex-extension.cy-GB.config.json +1 -0
  273. data/public/universalviewer/dist/uv-2.0.1/lib/uv-virtex-extension.en-GB.config.json +1 -0
  274. data/public/universalviewer/dist/uv-2.0.1/lib/viewer.js +5861 -0
  275. data/public/universalviewer/dist/uv-2.0.1/lib/viewer.min.js +178 -0
  276. data/public/universalviewer/dist/uv-2.0.1/lib/virtex.js +343 -0
  277. data/public/universalviewer/dist/uv-2.0.1/package.json +70 -0
  278. data/public/universalviewer/dist/uv-2.0.1/schema/uv-mediaelement-extension.cy-GB.schema.json +1 -0
  279. data/public/universalviewer/dist/uv-2.0.1/schema/uv-mediaelement-extension.en-GB.schema.json +1 -0
  280. data/public/universalviewer/dist/uv-2.0.1/schema/uv-pdf-extension.cy-GB.schema.json +1 -0
  281. data/public/universalviewer/dist/uv-2.0.1/schema/uv-pdf-extension.en-GB.schema.json +1 -0
  282. data/public/universalviewer/dist/uv-2.0.1/schema/uv-seadragon-extension.cy-GB.schema.json +1 -0
  283. data/public/universalviewer/dist/uv-2.0.1/schema/uv-seadragon-extension.en-GB.schema.json +1 -0
  284. data/public/universalviewer/dist/uv-2.0.1/schema/uv-virtex-extension.cy-GB.schema.json +1 -0
  285. data/public/universalviewer/dist/uv-2.0.1/schema/uv-virtex-extension.en-GB.schema.json +1 -0
  286. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/css/uv-mediaelement-extension/theme.css +3178 -0
  287. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/css/uv-pdf-extension/theme.css +4044 -0
  288. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/css/uv-seadragon-extension/theme.css +3185 -0
  289. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/css/uv-virtex-extension/theme.css +2455 -0
  290. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-contentleftpanel-module/padlock.png +0 -0
  291. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-contentleftpanel-module/thumb_placeholder.png +0 -0
  292. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-mediaelementcenterpanel-module/bigplay.png +0 -0
  293. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-mediaelementcenterpanel-module/controls-wellcome-bg.png +0 -0
  294. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-mediaelementcenterpanel-module/controls-wellcome.png +0 -0
  295. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-mediaelementcenterpanel-module/loading.gif +0 -0
  296. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-moreinforightpanel-module/copy.png +0 -0
  297. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-osdmobilefooterpanel-module/rotate_right.png +0 -0
  298. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-osdmobilefooterpanel-module/zoom_in.png +0 -0
  299. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-osdmobilefooterpanel-module/zoom_out.png +0 -0
  300. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pagingheaderpanel-module/first.png +0 -0
  301. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pagingheaderpanel-module/grid.png +0 -0
  302. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pagingheaderpanel-module/last.png +0 -0
  303. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pagingheaderpanel-module/next.png +0 -0
  304. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pagingheaderpanel-module/one_up.png +0 -0
  305. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pagingheaderpanel-module/prev.png +0 -0
  306. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pagingheaderpanel-module/settings.png +0 -0
  307. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pagingheaderpanel-module/two_up.png +0 -0
  308. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/annotation-check.svg +11 -0
  309. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/annotation-comment.svg +16 -0
  310. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/annotation-help.svg +26 -0
  311. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/annotation-insert.svg +10 -0
  312. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/annotation-key.svg +11 -0
  313. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/annotation-newparagraph.svg +11 -0
  314. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/annotation-noicon.svg +7 -0
  315. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/annotation-note.svg +42 -0
  316. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/annotation-paragraph.svg +16 -0
  317. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/findbarButton-next-rtl.png +0 -0
  318. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/findbarButton-next-rtl@2x.png +0 -0
  319. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/findbarButton-next.png +0 -0
  320. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/findbarButton-next@2x.png +0 -0
  321. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/findbarButton-previous-rtl.png +0 -0
  322. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/findbarButton-previous-rtl@2x.png +0 -0
  323. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/findbarButton-previous.png +0 -0
  324. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/findbarButton-previous@2x.png +0 -0
  325. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/grab.cur +0 -0
  326. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/grabbing.cur +0 -0
  327. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/loading-icon.gif +0 -0
  328. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/loading-small.png +0 -0
  329. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/secondaryToolbarButton-documentProperties.png +0 -0
  330. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/secondaryToolbarButton-documentProperties@2x.png +0 -0
  331. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/secondaryToolbarButton-firstPage.png +0 -0
  332. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/secondaryToolbarButton-firstPage@2x.png +0 -0
  333. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/secondaryToolbarButton-handTool.png +0 -0
  334. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/secondaryToolbarButton-handTool@2x.png +0 -0
  335. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/secondaryToolbarButton-lastPage.png +0 -0
  336. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/secondaryToolbarButton-lastPage@2x.png +0 -0
  337. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/secondaryToolbarButton-rotateCcw.png +0 -0
  338. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/secondaryToolbarButton-rotateCcw@2x.png +0 -0
  339. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/secondaryToolbarButton-rotateCw.png +0 -0
  340. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/secondaryToolbarButton-rotateCw@2x.png +0 -0
  341. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/shadow.png +0 -0
  342. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/texture.png +0 -0
  343. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-bookmark.png +0 -0
  344. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-bookmark@2x.png +0 -0
  345. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-download.png +0 -0
  346. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-download@2x.png +0 -0
  347. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-menuArrows.png +0 -0
  348. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-menuArrows@2x.png +0 -0
  349. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-openFile.png +0 -0
  350. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-openFile@2x.png +0 -0
  351. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-pageDown-rtl.png +0 -0
  352. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-pageDown-rtl@2x.png +0 -0
  353. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-pageDown.png +0 -0
  354. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-pageDown@2x.png +0 -0
  355. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-pageUp-rtl.png +0 -0
  356. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-pageUp-rtl@2x.png +0 -0
  357. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-pageUp.png +0 -0
  358. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-pageUp@2x.png +0 -0
  359. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-presentationMode.png +0 -0
  360. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-presentationMode@2x.png +0 -0
  361. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-print.png +0 -0
  362. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-print@2x.png +0 -0
  363. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-search.png +0 -0
  364. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-search@2x.png +0 -0
  365. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-secondaryToolbarToggle-rtl.png +0 -0
  366. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-secondaryToolbarToggle-rtl@2x.png +0 -0
  367. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-secondaryToolbarToggle.png +0 -0
  368. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-secondaryToolbarToggle@2x.png +0 -0
  369. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-sidebarToggle-rtl.png +0 -0
  370. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-sidebarToggle-rtl@2x.png +0 -0
  371. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-sidebarToggle.png +0 -0
  372. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-sidebarToggle@2x.png +0 -0
  373. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-viewAttachments.png +0 -0
  374. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-viewOutline-rtl.png +0 -0
  375. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-viewOutline-rtl@2x.png +0 -0
  376. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-viewOutline.png +0 -0
  377. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-viewOutline@2x.png +0 -0
  378. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-viewThumbnail.png +0 -0
  379. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-viewThumbnail@2x.png +0 -0
  380. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-zoomIn.png +0 -0
  381. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-zoomIn@2x.png +0 -0
  382. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-zoomOut.png +0 -0
  383. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-zoomOut@2x.png +0 -0
  384. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-seadragoncenterpanel-module/down_arrow.png +0 -0
  385. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-seadragoncenterpanel-module/down_arrow_disabled.png +0 -0
  386. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-seadragoncenterpanel-module/home.png +0 -0
  387. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-seadragoncenterpanel-module/left_arrow.png +0 -0
  388. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-seadragoncenterpanel-module/left_arrow_disabled.png +0 -0
  389. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-seadragoncenterpanel-module/pixel.gif +0 -0
  390. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-seadragoncenterpanel-module/right_arrow.png +0 -0
  391. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-seadragoncenterpanel-module/right_arrow_disabled.png +0 -0
  392. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-seadragoncenterpanel-module/rotate_right.png +0 -0
  393. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-seadragoncenterpanel-module/up_arrow.png +0 -0
  394. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-seadragoncenterpanel-module/up_arrow_disabled.png +0 -0
  395. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-seadragoncenterpanel-module/zoom_in.png +0 -0
  396. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-seadragoncenterpanel-module/zoom_out.png +0 -0
  397. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-searchfooterpanel-module/next.png +0 -0
  398. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-searchfooterpanel-module/placemarker_down.png +0 -0
  399. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-searchfooterpanel-module/placemarker_down_hover.png +0 -0
  400. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-searchfooterpanel-module/placemarker_up.png +0 -0
  401. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-searchfooterpanel-module/prev.png +0 -0
  402. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-searchfooterpanel-module/search.png +0 -0
  403. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-searchfooterpanel-module/spinner.gif +0 -0
  404. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-shared-module/arrows_left.png +0 -0
  405. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-shared-module/arrows_right.png +0 -0
  406. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-shared-module/bookmark.png +0 -0
  407. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-shared-module/close.png +0 -0
  408. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-shared-module/close_attribution.png +0 -0
  409. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-shared-module/close_information_box.png +0 -0
  410. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-shared-module/close_message_box.png +0 -0
  411. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-shared-module/copy.png +0 -0
  412. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-shared-module/dialogue_arrow.png +0 -0
  413. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-shared-module/download.png +0 -0
  414. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-shared-module/embed.png +0 -0
  415. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-shared-module/error.png +0 -0
  416. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-shared-module/exit_fullscreen.png +0 -0
  417. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-shared-module/feedback.png +0 -0
  418. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-shared-module/fullscreen.png +0 -0
  419. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-shared-module/hidden_thumb.png +0 -0
  420. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-shared-module/iiif.png +0 -0
  421. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-shared-module/minus.png +0 -0
  422. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-shared-module/modal_bg.gif +0 -0
  423. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-shared-module/moreinfo.png +0 -0
  424. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-shared-module/open.png +0 -0
  425. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-shared-module/plus.png +0 -0
  426. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-shared-module/print.png +0 -0
  427. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-shared-module/search_result.png +0 -0
  428. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-shared-module/settings.png +0 -0
  429. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-shared-module/share.png +0 -0
  430. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-shared-module/sprite.png +0 -0
  431. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-shared-module/unavailable.png +0 -0
  432. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-virtexcenterpanel-module/zoom_in.png +0 -0
  433. data/public/universalviewer/dist/uv-2.0.1/themes/uv-cy-GB-theme/img/uv-virtexcenterpanel-module/zoom_out.png +0 -0
  434. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/css/uv-mediaelement-extension/theme.css +3172 -0
  435. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/css/uv-pdf-extension/theme.css +4035 -0
  436. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/css/uv-seadragon-extension/theme.css +3178 -0
  437. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/css/uv-virtex-extension/theme.css +2448 -0
  438. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/hamburger.png +0 -0
  439. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-contentleftpanel-module/padlock.png +0 -0
  440. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-contentleftpanel-module/thumb_placeholder.png +0 -0
  441. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-mediaelementcenterpanel-module/bigplay.png +0 -0
  442. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-mediaelementcenterpanel-module/controls-wellcome-bg.png +0 -0
  443. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-mediaelementcenterpanel-module/controls-wellcome.png +0 -0
  444. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-mediaelementcenterpanel-module/loading.gif +0 -0
  445. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-moreinforightpanel-module/copy.png +0 -0
  446. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-osdmobilefooterpanel-module/rotate_right.png +0 -0
  447. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-osdmobilefooterpanel-module/zoom_in.png +0 -0
  448. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-osdmobilefooterpanel-module/zoom_out.png +0 -0
  449. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pagingheaderpanel-module/first.png +0 -0
  450. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pagingheaderpanel-module/grid.png +0 -0
  451. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pagingheaderpanel-module/last.png +0 -0
  452. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pagingheaderpanel-module/next.png +0 -0
  453. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pagingheaderpanel-module/one_up.png +0 -0
  454. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pagingheaderpanel-module/prev.png +0 -0
  455. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pagingheaderpanel-module/settings.png +0 -0
  456. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pagingheaderpanel-module/two_up.png +0 -0
  457. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/annotation-check.svg +11 -0
  458. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/annotation-comment.svg +16 -0
  459. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/annotation-help.svg +26 -0
  460. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/annotation-insert.svg +10 -0
  461. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/annotation-key.svg +11 -0
  462. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/annotation-newparagraph.svg +11 -0
  463. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/annotation-noicon.svg +7 -0
  464. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/annotation-note.svg +42 -0
  465. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/annotation-paragraph.svg +16 -0
  466. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/findbarButton-next-rtl.png +0 -0
  467. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/findbarButton-next-rtl@2x.png +0 -0
  468. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/findbarButton-next.png +0 -0
  469. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/findbarButton-next@2x.png +0 -0
  470. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/findbarButton-previous-rtl.png +0 -0
  471. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/findbarButton-previous-rtl@2x.png +0 -0
  472. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/findbarButton-previous.png +0 -0
  473. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/findbarButton-previous@2x.png +0 -0
  474. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/grab.cur +0 -0
  475. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/grabbing.cur +0 -0
  476. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/loading-icon.gif +0 -0
  477. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/loading-small.png +0 -0
  478. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/secondaryToolbarButton-documentProperties.png +0 -0
  479. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/secondaryToolbarButton-documentProperties@2x.png +0 -0
  480. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/secondaryToolbarButton-firstPage.png +0 -0
  481. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/secondaryToolbarButton-firstPage@2x.png +0 -0
  482. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/secondaryToolbarButton-handTool.png +0 -0
  483. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/secondaryToolbarButton-handTool@2x.png +0 -0
  484. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/secondaryToolbarButton-lastPage.png +0 -0
  485. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/secondaryToolbarButton-lastPage@2x.png +0 -0
  486. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/secondaryToolbarButton-rotateCcw.png +0 -0
  487. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/secondaryToolbarButton-rotateCcw@2x.png +0 -0
  488. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/secondaryToolbarButton-rotateCw.png +0 -0
  489. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/secondaryToolbarButton-rotateCw@2x.png +0 -0
  490. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/shadow.png +0 -0
  491. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/texture.png +0 -0
  492. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-bookmark.png +0 -0
  493. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-bookmark@2x.png +0 -0
  494. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-download.png +0 -0
  495. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-download@2x.png +0 -0
  496. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-menuArrows.png +0 -0
  497. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-menuArrows@2x.png +0 -0
  498. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-openFile.png +0 -0
  499. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-openFile@2x.png +0 -0
  500. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-pageDown-rtl.png +0 -0
  501. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-pageDown-rtl@2x.png +0 -0
  502. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-pageDown.png +0 -0
  503. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-pageDown@2x.png +0 -0
  504. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-pageUp-rtl.png +0 -0
  505. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-pageUp-rtl@2x.png +0 -0
  506. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-pageUp.png +0 -0
  507. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-pageUp@2x.png +0 -0
  508. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-presentationMode.png +0 -0
  509. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-presentationMode@2x.png +0 -0
  510. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-print.png +0 -0
  511. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-print@2x.png +0 -0
  512. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-search.png +0 -0
  513. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-search@2x.png +0 -0
  514. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-secondaryToolbarToggle-rtl.png +0 -0
  515. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-secondaryToolbarToggle-rtl@2x.png +0 -0
  516. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-secondaryToolbarToggle.png +0 -0
  517. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-secondaryToolbarToggle@2x.png +0 -0
  518. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-sidebarToggle-rtl.png +0 -0
  519. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-sidebarToggle-rtl@2x.png +0 -0
  520. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-sidebarToggle.png +0 -0
  521. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-sidebarToggle@2x.png +0 -0
  522. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-viewAttachments.png +0 -0
  523. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-viewOutline-rtl.png +0 -0
  524. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-viewOutline-rtl@2x.png +0 -0
  525. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-viewOutline.png +0 -0
  526. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-viewOutline@2x.png +0 -0
  527. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-viewThumbnail.png +0 -0
  528. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-viewThumbnail@2x.png +0 -0
  529. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-zoomIn.png +0 -0
  530. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-zoomIn@2x.png +0 -0
  531. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-zoomOut.png +0 -0
  532. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-pdfcenterpanel-module/toolbarButton-zoomOut@2x.png +0 -0
  533. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-seadragoncenterpanel-module/down_arrow.png +0 -0
  534. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-seadragoncenterpanel-module/down_arrow_disabled.png +0 -0
  535. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-seadragoncenterpanel-module/home.png +0 -0
  536. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-seadragoncenterpanel-module/left_arrow.png +0 -0
  537. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-seadragoncenterpanel-module/left_arrow_disabled.png +0 -0
  538. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-seadragoncenterpanel-module/pixel.gif +0 -0
  539. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-seadragoncenterpanel-module/right_arrow.png +0 -0
  540. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-seadragoncenterpanel-module/right_arrow_disabled.png +0 -0
  541. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-seadragoncenterpanel-module/rotate_right.png +0 -0
  542. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-seadragoncenterpanel-module/up_arrow.png +0 -0
  543. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-seadragoncenterpanel-module/up_arrow_disabled.png +0 -0
  544. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-seadragoncenterpanel-module/zoom_in.png +0 -0
  545. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-seadragoncenterpanel-module/zoom_out.png +0 -0
  546. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-searchfooterpanel-module/next.png +0 -0
  547. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-searchfooterpanel-module/placemarker_down.png +0 -0
  548. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-searchfooterpanel-module/placemarker_down_hover.png +0 -0
  549. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-searchfooterpanel-module/placemarker_up.png +0 -0
  550. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-searchfooterpanel-module/prev.png +0 -0
  551. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-searchfooterpanel-module/search.png +0 -0
  552. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-searchfooterpanel-module/spinner.gif +0 -0
  553. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-shared-module/arrows_left.png +0 -0
  554. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-shared-module/arrows_right.png +0 -0
  555. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-shared-module/bookmark.png +0 -0
  556. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-shared-module/close.png +0 -0
  557. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-shared-module/close_attribution.png +0 -0
  558. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-shared-module/close_information_box.png +0 -0
  559. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-shared-module/close_message_box.png +0 -0
  560. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-shared-module/copy.png +0 -0
  561. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-shared-module/dialogue_arrow.png +0 -0
  562. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-shared-module/download.png +0 -0
  563. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-shared-module/embed.png +0 -0
  564. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-shared-module/error.png +0 -0
  565. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-shared-module/exit_fullscreen.png +0 -0
  566. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-shared-module/feedback.png +0 -0
  567. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-shared-module/fullscreen.png +0 -0
  568. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-shared-module/hidden_thumb.png +0 -0
  569. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-shared-module/iiif.png +0 -0
  570. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-shared-module/minus.png +0 -0
  571. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-shared-module/modal_bg.gif +0 -0
  572. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-shared-module/moreinfo.png +0 -0
  573. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-shared-module/open.png +0 -0
  574. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-shared-module/plus.png +0 -0
  575. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-shared-module/print.png +0 -0
  576. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-shared-module/search_result.png +0 -0
  577. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-shared-module/settings.png +0 -0
  578. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-shared-module/share.png +0 -0
  579. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-shared-module/sprite.png +0 -0
  580. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-shared-module/unavailable.png +0 -0
  581. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-virtexcenterpanel-module/zoom_in.png +0 -0
  582. data/public/universalviewer/dist/uv-2.0.1/themes/uv-en-GB-theme/img/uv-virtexcenterpanel-module/zoom_out.png +0 -0
  583. data/public/universalviewer/favicon.ico +0 -0
  584. data/public/universalviewer/gulpfile.js +13 -0
  585. data/public/universalviewer/package.json +70 -0
  586. data/public/universalviewer/typings.json +20 -0
  587. data/pul_uv_rails.gemspec +26 -0
  588. metadata +687 -0
@@ -0,0 +1,293 @@
1
+ // iiif-tree-component v1.0.7 https://github.com/viewdir/iiif-tree-component#readme
2
+ (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.iiifTreeComponent = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
3
+ (function (global){
4
+
5
+
6
+
7
+ var __extends = (this && this.__extends) || function (d, b) {
8
+ for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
9
+ function __() { this.constructor = d; }
10
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
11
+ };
12
+ var IIIFComponents;
13
+ (function (IIIFComponents) {
14
+ var TreeComponent = (function (_super) {
15
+ __extends(TreeComponent, _super);
16
+ function TreeComponent(options) {
17
+ var _this = _super.call(this, options) || this;
18
+ _this._init();
19
+ return _this;
20
+ }
21
+ TreeComponent.prototype._init = function () {
22
+ var success = _super.prototype._init.call(this);
23
+ if (!success) {
24
+ console.error("TreeComponent failed to initialise");
25
+ }
26
+ var that = this;
27
+ this._$tree = $('<ul class="tree"></ul>');
28
+ this._$element.append(this._$tree);
29
+ $.templates({
30
+ pageTemplate: '{^{for nodes}}\
31
+ {^{tree/}}\
32
+ {{/for}}',
33
+ treeTemplate: '<li>\
34
+ {^{if nodes && nodes.length}}\
35
+ <div class="toggle" data-link="class{merge:expanded toggle=\'expanded\'}"></div>\
36
+ {{else}}\
37
+ <div class="spacer"></div>\
38
+ {{/if}}\
39
+ {^{if multiSelectEnabled}}\
40
+ <input id="tree-checkbox-{{>id}}" type="checkbox" data-link="checked{:multiSelected ? \'checked\' : \'\'}" class="multiSelect" />\
41
+ {{/if}}\
42
+ {^{if selected}}\
43
+ <a id="tree-link-{{>id}}" href="#" title="{{>label}}" class="selected">{{>label}}</a>\
44
+ {{else}}\
45
+ <a id="tree-link-{{>id}}" href="#" title="{{>label}}">{{>label}}</a>\
46
+ {{/if}}\
47
+ </li>\
48
+ {^{if expanded}}\
49
+ <li>\
50
+ <ul>\
51
+ {^{for nodes}}\
52
+ {^{tree/}}\
53
+ {{/for}}\
54
+ </ul>\
55
+ </li>\
56
+ {{/if}}'
57
+ });
58
+ $.views.tags({
59
+ tree: {
60
+ toggleExpanded: function () {
61
+ var node = this.data;
62
+ that._setNodeExpanded(node, !node.expanded);
63
+ },
64
+ toggleMultiSelect: function () {
65
+ var node = this.data;
66
+ that._setNodeMultiSelected(node, !!!node.multiSelected);
67
+ if (node.isRange()) {
68
+ that._getMultiSelectState().selectRange(node.data, node.multiSelected);
69
+ }
70
+ that.fire(TreeComponent.Events.TREE_NODE_MULTISELECTED, node);
71
+ },
72
+ init: function (tagCtx, linkCtx, ctx) {
73
+ this.data = tagCtx.view.data;
74
+ //this.data.text = this.data.label;
75
+ },
76
+ onAfterLink: function () {
77
+ var self = this;
78
+ self.contents('li').first()
79
+ .on('click', '.toggle', function () {
80
+ self.toggleExpanded();
81
+ }).on('click', 'a', function (e) {
82
+ e.preventDefault();
83
+ var node = self.data;
84
+ if (node.nodes.length)
85
+ self.toggleExpanded();
86
+ if (node.multiSelectEnabled) {
87
+ self.toggleMultiSelect();
88
+ }
89
+ else {
90
+ if (!node.nodes.length) {
91
+ that.fire(TreeComponent.Events.TREE_NODE_SELECTED, node);
92
+ that.selectNode(node);
93
+ }
94
+ else if (that.options.data.branchNodesSelectable) {
95
+ that.fire(TreeComponent.Events.TREE_NODE_SELECTED, node);
96
+ that.selectNode(node);
97
+ }
98
+ }
99
+ }).on('click', 'input.multiSelect', function (e) {
100
+ self.toggleMultiSelect();
101
+ });
102
+ },
103
+ template: $.templates.treeTemplate
104
+ }
105
+ });
106
+ return success;
107
+ };
108
+ TreeComponent.prototype.set = function () {
109
+ this._rootNode = this.options.data.helper.getTree(this.options.data.topRangeIndex, this.options.data.treeSortType);
110
+ this._allNodes = null; // delete cache
111
+ this._multiSelectableNodes = null; // delete cache
112
+ this._$tree.link($.templates.pageTemplate, this._rootNode);
113
+ };
114
+ // todo: this should be removed in order to fit with the 'reactive' pattern
115
+ // all changes shold be a result of calling databind() with options/props.
116
+ TreeComponent.prototype.updateMultiSelectState = function () {
117
+ var state = this._getMultiSelectState();
118
+ for (var i = 0; i < state.ranges.length; i++) {
119
+ var range = state.ranges[i];
120
+ var node = this._getMultiSelectableNodes().en().where(function (n) { return n.data.id === range.id; }).first();
121
+ if (node) {
122
+ this._setNodeMultiSelectEnabled(node, range.multiSelectEnabled);
123
+ this._setNodeMultiSelected(node, range.multiSelected);
124
+ }
125
+ }
126
+ };
127
+ TreeComponent.prototype._getMultiSelectState = function () {
128
+ return this.options.data.helper.getMultiSelectState();
129
+ };
130
+ TreeComponent.prototype.data = function () {
131
+ return {
132
+ branchNodesSelectable: true,
133
+ helper: null,
134
+ topRangeIndex: 0,
135
+ treeSortType: Manifold.TreeSortType.NONE
136
+ };
137
+ };
138
+ TreeComponent.prototype.allNodesSelected = function () {
139
+ var applicableNodes = this._getMultiSelectableNodes();
140
+ var multiSelectedNodes = this.getMultiSelectedNodes();
141
+ return applicableNodes.length === multiSelectedNodes.length;
142
+ };
143
+ TreeComponent.prototype._getMultiSelectableNodes = function () {
144
+ var _this = this;
145
+ // if cached
146
+ if (this._multiSelectableNodes) {
147
+ return this._multiSelectableNodes;
148
+ }
149
+ return this._multiSelectableNodes = this._getAllNodes().en().where(function (n) { return _this._nodeIsMultiSelectable(n); }).toArray();
150
+ };
151
+ TreeComponent.prototype._nodeIsMultiSelectable = function (node) {
152
+ return (node.isManifest() && node.nodes.length > 0 || node.isRange());
153
+ };
154
+ TreeComponent.prototype._getAllNodes = function () {
155
+ // if cached
156
+ if (this._allNodes) {
157
+ return this._allNodes;
158
+ }
159
+ return this._allNodes = this._rootNode.nodes.en().traverseUnique(function (node) { return node.nodes; }).toArray();
160
+ };
161
+ TreeComponent.prototype.getMultiSelectedNodes = function () {
162
+ var _this = this;
163
+ return this._getAllNodes().en().where(function (n) { return _this._nodeIsMultiSelectable(n) && n.multiSelected; }).toArray();
164
+ };
165
+ TreeComponent.prototype.getNodeById = function (id) {
166
+ return this._getAllNodes().en().where(function (n) { return n.id === id; }).first();
167
+ };
168
+ TreeComponent.prototype._multiSelectTreeNode = function (node, isSelected) {
169
+ if (!this._nodeIsMultiSelectable(node))
170
+ return;
171
+ this._setNodeMultiSelected(node, isSelected);
172
+ // recursively select/deselect child nodes
173
+ for (var i = 0; i < node.nodes.length; i++) {
174
+ var n = node.nodes[i];
175
+ this._multiSelectTreeNode(n, isSelected);
176
+ }
177
+ };
178
+ // private _updateParentNodes(node: Manifold.ITreeNode): void {
179
+ // var parentNode: Manifold.ITreeNode = <Manifold.ITreeNode>node.parentNode;
180
+ // if (!parentNode) return;
181
+ // // expand parents if selected
182
+ // if (node.selected) {
183
+ // this._expandParents(node);
184
+ // }
185
+ // // get the number of selected children.
186
+ // var checkedCount: number = parentNode.nodes.en().where(n => (<Manifold.ITreeNode>n).multiSelected).count();
187
+ // // if any are checked, check the parent.
188
+ // this._setNodeMultiSelected(parentNode, checkedCount > 0);
189
+ // var indeterminate: boolean = checkedCount > 0 && checkedCount < parentNode.nodes.length;
190
+ // this._setNodeIndeterminate(parentNode, indeterminate);
191
+ // // cascade up tree
192
+ // this._updateParentNodes(parentNode);
193
+ // }
194
+ TreeComponent.prototype._expandParents = function (node) {
195
+ if (!node.parentNode)
196
+ return;
197
+ this._setNodeExpanded(node.parentNode, true);
198
+ this._expandParents(node.parentNode);
199
+ };
200
+ TreeComponent.prototype._setNodeSelected = function (node, selected) {
201
+ $.observable(node).setProperty("selected", selected);
202
+ };
203
+ TreeComponent.prototype._setNodeExpanded = function (node, expanded) {
204
+ $.observable(node).setProperty("expanded", expanded);
205
+ };
206
+ TreeComponent.prototype._setNodeMultiSelected = function (node, selected) {
207
+ $.observable(node).setProperty("multiSelected", selected);
208
+ // if (!selected){
209
+ // this._setNodeIndeterminate(node, false);
210
+ // }
211
+ };
212
+ TreeComponent.prototype._setNodeMultiSelectEnabled = function (node, enabled) {
213
+ $.observable(node).setProperty("multiSelectEnabled", enabled);
214
+ };
215
+ // private _setNodeIndeterminate(node: Manifold.ITreeNode, indeterminate: boolean): void {
216
+ // var $checkbox: JQuery = this._getNodeCheckbox(node);
217
+ // $checkbox.prop("indeterminate", indeterminate);
218
+ // }
219
+ // private _getNodeCheckbox(node: Manifold.ITreeNode): JQuery {
220
+ // return $("#tree-checkbox-" + node.id);
221
+ // }
222
+ // private _getNodeSiblings(node: Manifold.ITreeNode): Manifold.ITreeNode[] {
223
+ // var siblings: Manifold.ITreeNode[] = [];
224
+ // if (node.parentNode){
225
+ // siblings = <Manifold.ITreeNode[]>node.parentNode.nodes.en().where(n => n !== node).toArray();
226
+ // }
227
+ // return siblings;
228
+ // }
229
+ TreeComponent.prototype.selectPath = function (path) {
230
+ if (!this._rootNode)
231
+ return;
232
+ var pathArr = path.split("/");
233
+ if (pathArr.length >= 1)
234
+ pathArr.shift();
235
+ var node = this.getNodeByPath(this._rootNode, pathArr);
236
+ this.selectNode(node);
237
+ };
238
+ TreeComponent.prototype.deselectCurrentNode = function () {
239
+ if (this._selectedNode)
240
+ this._setNodeSelected(this._selectedNode, false);
241
+ };
242
+ TreeComponent.prototype.selectNode = function (node) {
243
+ if (!this._rootNode)
244
+ return;
245
+ this.deselectCurrentNode();
246
+ this._selectedNode = node;
247
+ this._setNodeSelected(this._selectedNode, true);
248
+ };
249
+ // walks down the tree using the specified path e.g. [2,2,0]
250
+ TreeComponent.prototype.getNodeByPath = function (parentNode, path) {
251
+ if (path.length === 0)
252
+ return parentNode;
253
+ var index = Number(path.shift());
254
+ var node = parentNode.nodes[index];
255
+ return this.getNodeByPath(node, path);
256
+ };
257
+ TreeComponent.prototype.show = function () {
258
+ this._$element.show();
259
+ };
260
+ TreeComponent.prototype.hide = function () {
261
+ this._$element.hide();
262
+ };
263
+ TreeComponent.prototype._resize = function () {
264
+ };
265
+ return TreeComponent;
266
+ }(_Components.BaseComponent));
267
+ IIIFComponents.TreeComponent = TreeComponent;
268
+ })(IIIFComponents || (IIIFComponents = {}));
269
+ (function (IIIFComponents) {
270
+ var TreeComponent;
271
+ (function (TreeComponent) {
272
+ var Events = (function () {
273
+ function Events() {
274
+ }
275
+ return Events;
276
+ }());
277
+ Events.TREE_NODE_MULTISELECTED = 'treeNodeMultiSelected';
278
+ Events.TREE_NODE_SELECTED = 'treeNodeSelected';
279
+ TreeComponent.Events = Events;
280
+ })(TreeComponent = IIIFComponents.TreeComponent || (IIIFComponents.TreeComponent = {}));
281
+ })(IIIFComponents || (IIIFComponents = {}));
282
+ (function (g) {
283
+ if (!g.IIIFComponents) {
284
+ g.IIIFComponents = IIIFComponents;
285
+ }
286
+ else {
287
+ g.IIIFComponents.TreeComponent = IIIFComponents.TreeComponent;
288
+ }
289
+ })(global);
290
+
291
+ }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
292
+ },{}]},{},[1])(1)
293
+ });
@@ -0,0 +1,1007 @@
1
+ /**
2
+ * Copyright (c) 2011-2013 Fabien Cazenave, Mozilla.
3
+ *
4
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ * of this software and associated documentation files (the "Software"), to
6
+ * deal in the Software without restriction, including without limitation the
7
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
8
+ * sell copies of the Software, and to permit persons to whom the Software is
9
+ * furnished to do so, subject to the following conditions:
10
+ *
11
+ * The above copyright notice and this permission notice shall be included in
12
+ * all copies or substantial portions of the Software.
13
+ *
14
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
20
+ * IN THE SOFTWARE.
21
+ */
22
+ /*
23
+ Additional modifications for PDF.js project:
24
+ - Disables language initialization on page loading;
25
+ - Removes consoleWarn and consoleLog and use console.log/warn directly.
26
+ - Removes window._ assignment.
27
+ */
28
+
29
+ /*jshint browser: true, devel: true, globalstrict: true */
30
+ 'use strict';
31
+
32
+ document.webL10n = (function(window, document, undefined) {
33
+ var gL10nData = {};
34
+ var gTextData = '';
35
+ var gTextProp = 'textContent';
36
+ var gLanguage = '';
37
+ var gMacros = {};
38
+ var gReadyState = 'loading';
39
+
40
+
41
+ /**
42
+ * Synchronously loading l10n resources significantly minimizes flickering
43
+ * from displaying the app with non-localized strings and then updating the
44
+ * strings. Although this will block all script execution on this page, we
45
+ * expect that the l10n resources are available locally on flash-storage.
46
+ *
47
+ * As synchronous XHR is generally considered as a bad idea, we're still
48
+ * loading l10n resources asynchronously -- but we keep this in a setting,
49
+ * just in case... and applications using this library should hide their
50
+ * content until the `localized' event happens.
51
+ */
52
+
53
+ var gAsyncResourceLoading = true; // read-only
54
+
55
+
56
+ /**
57
+ * DOM helpers for the so-called "HTML API".
58
+ *
59
+ * These functions are written for modern browsers. For old versions of IE,
60
+ * they're overridden in the 'startup' section at the end of this file.
61
+ */
62
+
63
+ function getL10nResourceLinks() {
64
+ return document.querySelectorAll('link[type="application/l10n"]');
65
+ }
66
+
67
+ function getL10nDictionary() {
68
+ var script = document.querySelector('script[type="application/l10n"]');
69
+ // TODO: support multiple and external JSON dictionaries
70
+ return script ? JSON.parse(script.innerHTML) : null;
71
+ }
72
+
73
+ function getTranslatableChildren(element) {
74
+ return element ? element.querySelectorAll('*[data-l10n-id]') : [];
75
+ }
76
+
77
+ function getL10nAttributes(element) {
78
+ if (!element)
79
+ return {};
80
+
81
+ var l10nId = element.getAttribute('data-l10n-id');
82
+ var l10nArgs = element.getAttribute('data-l10n-args');
83
+ var args = {};
84
+ if (l10nArgs) {
85
+ try {
86
+ args = JSON.parse(l10nArgs);
87
+ } catch (e) {
88
+ console.warn('could not parse arguments for #' + l10nId);
89
+ }
90
+ }
91
+ return { id: l10nId, args: args };
92
+ }
93
+
94
+ function fireL10nReadyEvent(lang) {
95
+ var evtObject = document.createEvent('Event');
96
+ evtObject.initEvent('localized', true, false);
97
+ evtObject.language = lang;
98
+ document.dispatchEvent(evtObject);
99
+ }
100
+
101
+ function xhrLoadText(url, onSuccess, onFailure, asynchronous) {
102
+ onSuccess = onSuccess || function _onSuccess(data) {};
103
+ onFailure = onFailure || function _onFailure() {
104
+ console.warn(url + ' not found.');
105
+ };
106
+
107
+ var xhr = new XMLHttpRequest();
108
+ xhr.open('GET', url, asynchronous);
109
+ if (xhr.overrideMimeType) {
110
+ xhr.overrideMimeType('text/plain; charset=utf-8');
111
+ }
112
+ xhr.onreadystatechange = function() {
113
+ if (xhr.readyState == 4) {
114
+ if (xhr.status == 200 || xhr.status === 0) {
115
+ onSuccess(xhr.responseText);
116
+ } else {
117
+ onFailure();
118
+ }
119
+ }
120
+ };
121
+ xhr.onerror = onFailure;
122
+ xhr.ontimeout = onFailure;
123
+
124
+ // in Firefox OS with the app:// protocol, trying to XHR a non-existing
125
+ // URL will raise an exception here -- hence this ugly try...catch.
126
+ try {
127
+ xhr.send(null);
128
+ } catch (e) {
129
+ onFailure();
130
+ }
131
+ }
132
+
133
+
134
+ /**
135
+ * l10n resource parser:
136
+ * - reads (async XHR) the l10n resource matching `lang';
137
+ * - imports linked resources (synchronously) when specified;
138
+ * - parses the text data (fills `gL10nData' and `gTextData');
139
+ * - triggers success/failure callbacks when done.
140
+ *
141
+ * @param {string} href
142
+ * URL of the l10n resource to parse.
143
+ *
144
+ * @param {string} lang
145
+ * locale (language) to parse.
146
+ *
147
+ * @param {Function} successCallback
148
+ * triggered when the l10n resource has been successully parsed.
149
+ *
150
+ * @param {Function} failureCallback
151
+ * triggered when the an error has occured.
152
+ *
153
+ * @return {void}
154
+ * uses the following global variables: gL10nData, gTextData, gTextProp.
155
+ */
156
+
157
+ function parseResource(href, lang, successCallback, failureCallback) {
158
+ var baseURL = href.replace(/[^\/]*$/, '') || './';
159
+
160
+ // handle escaped characters (backslashes) in a string
161
+ function evalString(text) {
162
+ if (text.lastIndexOf('\\') < 0)
163
+ return text;
164
+ return text.replace(/\\\\/g, '\\')
165
+ .replace(/\\n/g, '\n')
166
+ .replace(/\\r/g, '\r')
167
+ .replace(/\\t/g, '\t')
168
+ .replace(/\\b/g, '\b')
169
+ .replace(/\\f/g, '\f')
170
+ .replace(/\\{/g, '{')
171
+ .replace(/\\}/g, '}')
172
+ .replace(/\\"/g, '"')
173
+ .replace(/\\'/g, "'");
174
+ }
175
+
176
+ // parse *.properties text data into an l10n dictionary
177
+ function parseProperties(text) {
178
+ var dictionary = [];
179
+
180
+ // token expressions
181
+ var reBlank = /^\s*|\s*$/;
182
+ var reComment = /^\s*#|^\s*$/;
183
+ var reSection = /^\s*\[(.*)\]\s*$/;
184
+ var reImport = /^\s*@import\s+url\((.*)\)\s*$/i;
185
+ var reSplit = /^([^=\s]*)\s*=\s*(.+)$/; // TODO: escape EOLs with '\'
186
+
187
+ // parse the *.properties file into an associative array
188
+ function parseRawLines(rawText, extendedSyntax) {
189
+ var entries = rawText.replace(reBlank, '').split(/[\r\n]+/);
190
+ var currentLang = '*';
191
+ var genericLang = lang.replace(/-[a-z]+$/i, '');
192
+ var skipLang = false;
193
+ var match = '';
194
+
195
+ for (var i = 0; i < entries.length; i++) {
196
+ var line = entries[i];
197
+
198
+ // comment or blank line?
199
+ if (reComment.test(line))
200
+ continue;
201
+
202
+ // the extended syntax supports [lang] sections and @import rules
203
+ if (extendedSyntax) {
204
+ if (reSection.test(line)) { // section start?
205
+ match = reSection.exec(line);
206
+ currentLang = match[1];
207
+ skipLang = (currentLang !== '*') &&
208
+ (currentLang !== lang) && (currentLang !== genericLang);
209
+ continue;
210
+ } else if (skipLang) {
211
+ continue;
212
+ }
213
+ if (reImport.test(line)) { // @import rule?
214
+ match = reImport.exec(line);
215
+ loadImport(baseURL + match[1]); // load the resource synchronously
216
+ }
217
+ }
218
+
219
+ // key-value pair
220
+ var tmp = line.match(reSplit);
221
+ if (tmp && tmp.length == 3) {
222
+ dictionary[tmp[1]] = evalString(tmp[2]);
223
+ }
224
+ }
225
+ }
226
+
227
+ // import another *.properties file
228
+ function loadImport(url) {
229
+ xhrLoadText(url, function(content) {
230
+ parseRawLines(content, false); // don't allow recursive imports
231
+ }, null, false); // load synchronously
232
+ }
233
+
234
+ // fill the dictionary
235
+ parseRawLines(text, true);
236
+ return dictionary;
237
+ }
238
+
239
+ // load and parse l10n data (warning: global variables are used here)
240
+ xhrLoadText(href, function(response) {
241
+ gTextData += response; // mostly for debug
242
+
243
+ // parse *.properties text data into an l10n dictionary
244
+ var data = parseProperties(response);
245
+
246
+ // find attribute descriptions, if any
247
+ for (var key in data) {
248
+ var id, prop, index = key.lastIndexOf('.');
249
+ if (index > 0) { // an attribute has been specified
250
+ id = key.substring(0, index);
251
+ prop = key.substr(index + 1);
252
+ } else { // no attribute: assuming text content by default
253
+ id = key;
254
+ prop = gTextProp;
255
+ }
256
+ if (!gL10nData[id]) {
257
+ gL10nData[id] = {};
258
+ }
259
+ gL10nData[id][prop] = data[key];
260
+ }
261
+
262
+ // trigger callback
263
+ if (successCallback) {
264
+ successCallback();
265
+ }
266
+ }, failureCallback, gAsyncResourceLoading);
267
+ }
268
+
269
+ // load and parse all resources for the specified locale
270
+ function loadLocale(lang, callback) {
271
+ console.log("load locale");
272
+ callback = callback || function _callback() {};
273
+
274
+ clear();
275
+ gLanguage = lang;
276
+
277
+ // check all <link type="application/l10n" href="..." /> nodes
278
+ // and load the resource files
279
+ var langLinks = getL10nResourceLinks();
280
+ var langCount = langLinks.length;
281
+ if (langCount === 0) {
282
+ // we might have a pre-compiled dictionary instead
283
+ var dict = getL10nDictionary();
284
+ if (dict && dict.locales && dict.default_locale) {
285
+ console.log('using the embedded JSON directory, early way out');
286
+ gL10nData = dict.locales[lang] || dict.locales[dict.default_locale];
287
+ callback();
288
+ } else {
289
+ console.log('no resource to load, early way out');
290
+ }
291
+ // early way out
292
+ fireL10nReadyEvent(lang);
293
+ gReadyState = 'complete';
294
+ return;
295
+ }
296
+
297
+ // start the callback when all resources are loaded
298
+ var onResourceLoaded = null;
299
+ var gResourceCount = 0;
300
+ onResourceLoaded = function() {
301
+ gResourceCount++;
302
+ if (gResourceCount >= langCount) {
303
+ callback();
304
+ fireL10nReadyEvent(lang);
305
+ gReadyState = 'complete';
306
+ }
307
+ };
308
+
309
+ // load all resource files
310
+ function L10nResourceLink(link) {
311
+ var href = link.href;
312
+ var type = link.type;
313
+ this.load = function(lang, callback) {
314
+ var applied = lang;
315
+ parseResource(href, lang, callback, function() {
316
+ console.warn(href + ' not found.');
317
+ applied = '';
318
+ });
319
+ return applied; // return lang if found, an empty string if not found
320
+ };
321
+ }
322
+
323
+ for (var i = 0; i < langCount; i++) {
324
+ var resource = new L10nResourceLink(langLinks[i]);
325
+ var rv = resource.load(lang, onResourceLoaded);
326
+ if (rv != lang) { // lang not found, used default resource instead
327
+ console.warn('"' + lang + '" resource not found');
328
+ gLanguage = '';
329
+ }
330
+ }
331
+ }
332
+
333
+ // clear all l10n data
334
+ function clear() {
335
+ gL10nData = {};
336
+ gTextData = '';
337
+ gLanguage = '';
338
+ // TODO: clear all non predefined macros.
339
+ // There's no such macro /yet/ but we're planning to have some...
340
+ }
341
+
342
+
343
+ /**
344
+ * Get rules for plural forms (shared with JetPack), see:
345
+ * http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
346
+ * https://github.com/mozilla/addon-sdk/blob/master/python-lib/plural-rules-generator.p
347
+ *
348
+ * @param {string} lang
349
+ * locale (language) used.
350
+ *
351
+ * @return {Function}
352
+ * returns a function that gives the plural form name for a given integer:
353
+ * var fun = getPluralRules('en');
354
+ * fun(1) -> 'one'
355
+ * fun(0) -> 'other'
356
+ * fun(1000) -> 'other'.
357
+ */
358
+
359
+ function getPluralRules(lang) {
360
+ var locales2rules = {
361
+ 'af': 3,
362
+ 'ak': 4,
363
+ 'am': 4,
364
+ 'ar': 1,
365
+ 'asa': 3,
366
+ 'az': 0,
367
+ 'be': 11,
368
+ 'bem': 3,
369
+ 'bez': 3,
370
+ 'bg': 3,
371
+ 'bh': 4,
372
+ 'bm': 0,
373
+ 'bn': 3,
374
+ 'bo': 0,
375
+ 'br': 20,
376
+ 'brx': 3,
377
+ 'bs': 11,
378
+ 'ca': 3,
379
+ 'cgg': 3,
380
+ 'chr': 3,
381
+ 'cs': 12,
382
+ 'cy': 17,
383
+ 'da': 3,
384
+ 'de': 3,
385
+ 'dv': 3,
386
+ 'dz': 0,
387
+ 'ee': 3,
388
+ 'el': 3,
389
+ 'en': 3,
390
+ 'eo': 3,
391
+ 'es': 3,
392
+ 'et': 3,
393
+ 'eu': 3,
394
+ 'fa': 0,
395
+ 'ff': 5,
396
+ 'fi': 3,
397
+ 'fil': 4,
398
+ 'fo': 3,
399
+ 'fr': 5,
400
+ 'fur': 3,
401
+ 'fy': 3,
402
+ 'ga': 8,
403
+ 'gd': 24,
404
+ 'gl': 3,
405
+ 'gsw': 3,
406
+ 'gu': 3,
407
+ 'guw': 4,
408
+ 'gv': 23,
409
+ 'ha': 3,
410
+ 'haw': 3,
411
+ 'he': 2,
412
+ 'hi': 4,
413
+ 'hr': 11,
414
+ 'hu': 0,
415
+ 'id': 0,
416
+ 'ig': 0,
417
+ 'ii': 0,
418
+ 'is': 3,
419
+ 'it': 3,
420
+ 'iu': 7,
421
+ 'ja': 0,
422
+ 'jmc': 3,
423
+ 'jv': 0,
424
+ 'ka': 0,
425
+ 'kab': 5,
426
+ 'kaj': 3,
427
+ 'kcg': 3,
428
+ 'kde': 0,
429
+ 'kea': 0,
430
+ 'kk': 3,
431
+ 'kl': 3,
432
+ 'km': 0,
433
+ 'kn': 0,
434
+ 'ko': 0,
435
+ 'ksb': 3,
436
+ 'ksh': 21,
437
+ 'ku': 3,
438
+ 'kw': 7,
439
+ 'lag': 18,
440
+ 'lb': 3,
441
+ 'lg': 3,
442
+ 'ln': 4,
443
+ 'lo': 0,
444
+ 'lt': 10,
445
+ 'lv': 6,
446
+ 'mas': 3,
447
+ 'mg': 4,
448
+ 'mk': 16,
449
+ 'ml': 3,
450
+ 'mn': 3,
451
+ 'mo': 9,
452
+ 'mr': 3,
453
+ 'ms': 0,
454
+ 'mt': 15,
455
+ 'my': 0,
456
+ 'nah': 3,
457
+ 'naq': 7,
458
+ 'nb': 3,
459
+ 'nd': 3,
460
+ 'ne': 3,
461
+ 'nl': 3,
462
+ 'nn': 3,
463
+ 'no': 3,
464
+ 'nr': 3,
465
+ 'nso': 4,
466
+ 'ny': 3,
467
+ 'nyn': 3,
468
+ 'om': 3,
469
+ 'or': 3,
470
+ 'pa': 3,
471
+ 'pap': 3,
472
+ 'pl': 13,
473
+ 'ps': 3,
474
+ 'pt': 3,
475
+ 'rm': 3,
476
+ 'ro': 9,
477
+ 'rof': 3,
478
+ 'ru': 11,
479
+ 'rwk': 3,
480
+ 'sah': 0,
481
+ 'saq': 3,
482
+ 'se': 7,
483
+ 'seh': 3,
484
+ 'ses': 0,
485
+ 'sg': 0,
486
+ 'sh': 11,
487
+ 'shi': 19,
488
+ 'sk': 12,
489
+ 'sl': 14,
490
+ 'sma': 7,
491
+ 'smi': 7,
492
+ 'smj': 7,
493
+ 'smn': 7,
494
+ 'sms': 7,
495
+ 'sn': 3,
496
+ 'so': 3,
497
+ 'sq': 3,
498
+ 'sr': 11,
499
+ 'ss': 3,
500
+ 'ssy': 3,
501
+ 'st': 3,
502
+ 'sv': 3,
503
+ 'sw': 3,
504
+ 'syr': 3,
505
+ 'ta': 3,
506
+ 'te': 3,
507
+ 'teo': 3,
508
+ 'th': 0,
509
+ 'ti': 4,
510
+ 'tig': 3,
511
+ 'tk': 3,
512
+ 'tl': 4,
513
+ 'tn': 3,
514
+ 'to': 0,
515
+ 'tr': 0,
516
+ 'ts': 3,
517
+ 'tzm': 22,
518
+ 'uk': 11,
519
+ 'ur': 3,
520
+ 've': 3,
521
+ 'vi': 0,
522
+ 'vun': 3,
523
+ 'wa': 4,
524
+ 'wae': 3,
525
+ 'wo': 0,
526
+ 'xh': 3,
527
+ 'xog': 3,
528
+ 'yo': 0,
529
+ 'zh': 0,
530
+ 'zu': 3
531
+ };
532
+
533
+ // utility functions for plural rules methods
534
+ function isIn(n, list) {
535
+ return list.indexOf(n) !== -1;
536
+ }
537
+ function isBetween(n, start, end) {
538
+ return start <= n && n <= end;
539
+ }
540
+
541
+ // list of all plural rules methods:
542
+ // map an integer to the plural form name to use
543
+ var pluralRules = {
544
+ '0': function(n) {
545
+ return 'other';
546
+ },
547
+ '1': function(n) {
548
+ if ((isBetween((n % 100), 3, 10)))
549
+ return 'few';
550
+ if (n === 0)
551
+ return 'zero';
552
+ if ((isBetween((n % 100), 11, 99)))
553
+ return 'many';
554
+ if (n == 2)
555
+ return 'two';
556
+ if (n == 1)
557
+ return 'one';
558
+ return 'other';
559
+ },
560
+ '2': function(n) {
561
+ if (n !== 0 && (n % 10) === 0)
562
+ return 'many';
563
+ if (n == 2)
564
+ return 'two';
565
+ if (n == 1)
566
+ return 'one';
567
+ return 'other';
568
+ },
569
+ '3': function(n) {
570
+ if (n == 1)
571
+ return 'one';
572
+ return 'other';
573
+ },
574
+ '4': function(n) {
575
+ if ((isBetween(n, 0, 1)))
576
+ return 'one';
577
+ return 'other';
578
+ },
579
+ '5': function(n) {
580
+ if ((isBetween(n, 0, 2)) && n != 2)
581
+ return 'one';
582
+ return 'other';
583
+ },
584
+ '6': function(n) {
585
+ if (n === 0)
586
+ return 'zero';
587
+ if ((n % 10) == 1 && (n % 100) != 11)
588
+ return 'one';
589
+ return 'other';
590
+ },
591
+ '7': function(n) {
592
+ if (n == 2)
593
+ return 'two';
594
+ if (n == 1)
595
+ return 'one';
596
+ return 'other';
597
+ },
598
+ '8': function(n) {
599
+ if ((isBetween(n, 3, 6)))
600
+ return 'few';
601
+ if ((isBetween(n, 7, 10)))
602
+ return 'many';
603
+ if (n == 2)
604
+ return 'two';
605
+ if (n == 1)
606
+ return 'one';
607
+ return 'other';
608
+ },
609
+ '9': function(n) {
610
+ if (n === 0 || n != 1 && (isBetween((n % 100), 1, 19)))
611
+ return 'few';
612
+ if (n == 1)
613
+ return 'one';
614
+ return 'other';
615
+ },
616
+ '10': function(n) {
617
+ if ((isBetween((n % 10), 2, 9)) && !(isBetween((n % 100), 11, 19)))
618
+ return 'few';
619
+ if ((n % 10) == 1 && !(isBetween((n % 100), 11, 19)))
620
+ return 'one';
621
+ return 'other';
622
+ },
623
+ '11': function(n) {
624
+ if ((isBetween((n % 10), 2, 4)) && !(isBetween((n % 100), 12, 14)))
625
+ return 'few';
626
+ if ((n % 10) === 0 ||
627
+ (isBetween((n % 10), 5, 9)) ||
628
+ (isBetween((n % 100), 11, 14)))
629
+ return 'many';
630
+ if ((n % 10) == 1 && (n % 100) != 11)
631
+ return 'one';
632
+ return 'other';
633
+ },
634
+ '12': function(n) {
635
+ if ((isBetween(n, 2, 4)))
636
+ return 'few';
637
+ if (n == 1)
638
+ return 'one';
639
+ return 'other';
640
+ },
641
+ '13': function(n) {
642
+ if ((isBetween((n % 10), 2, 4)) && !(isBetween((n % 100), 12, 14)))
643
+ return 'few';
644
+ if (n != 1 && (isBetween((n % 10), 0, 1)) ||
645
+ (isBetween((n % 10), 5, 9)) ||
646
+ (isBetween((n % 100), 12, 14)))
647
+ return 'many';
648
+ if (n == 1)
649
+ return 'one';
650
+ return 'other';
651
+ },
652
+ '14': function(n) {
653
+ if ((isBetween((n % 100), 3, 4)))
654
+ return 'few';
655
+ if ((n % 100) == 2)
656
+ return 'two';
657
+ if ((n % 100) == 1)
658
+ return 'one';
659
+ return 'other';
660
+ },
661
+ '15': function(n) {
662
+ if (n === 0 || (isBetween((n % 100), 2, 10)))
663
+ return 'few';
664
+ if ((isBetween((n % 100), 11, 19)))
665
+ return 'many';
666
+ if (n == 1)
667
+ return 'one';
668
+ return 'other';
669
+ },
670
+ '16': function(n) {
671
+ if ((n % 10) == 1 && n != 11)
672
+ return 'one';
673
+ return 'other';
674
+ },
675
+ '17': function(n) {
676
+ if (n == 3)
677
+ return 'few';
678
+ if (n === 0)
679
+ return 'zero';
680
+ if (n == 6)
681
+ return 'many';
682
+ if (n == 2)
683
+ return 'two';
684
+ if (n == 1)
685
+ return 'one';
686
+ return 'other';
687
+ },
688
+ '18': function(n) {
689
+ if (n === 0)
690
+ return 'zero';
691
+ if ((isBetween(n, 0, 2)) && n !== 0 && n != 2)
692
+ return 'one';
693
+ return 'other';
694
+ },
695
+ '19': function(n) {
696
+ if ((isBetween(n, 2, 10)))
697
+ return 'few';
698
+ if ((isBetween(n, 0, 1)))
699
+ return 'one';
700
+ return 'other';
701
+ },
702
+ '20': function(n) {
703
+ if ((isBetween((n % 10), 3, 4) || ((n % 10) == 9)) && !(
704
+ isBetween((n % 100), 10, 19) ||
705
+ isBetween((n % 100), 70, 79) ||
706
+ isBetween((n % 100), 90, 99)
707
+ ))
708
+ return 'few';
709
+ if ((n % 1000000) === 0 && n !== 0)
710
+ return 'many';
711
+ if ((n % 10) == 2 && !isIn((n % 100), [12, 72, 92]))
712
+ return 'two';
713
+ if ((n % 10) == 1 && !isIn((n % 100), [11, 71, 91]))
714
+ return 'one';
715
+ return 'other';
716
+ },
717
+ '21': function(n) {
718
+ if (n === 0)
719
+ return 'zero';
720
+ if (n == 1)
721
+ return 'one';
722
+ return 'other';
723
+ },
724
+ '22': function(n) {
725
+ if ((isBetween(n, 0, 1)) || (isBetween(n, 11, 99)))
726
+ return 'one';
727
+ return 'other';
728
+ },
729
+ '23': function(n) {
730
+ if ((isBetween((n % 10), 1, 2)) || (n % 20) === 0)
731
+ return 'one';
732
+ return 'other';
733
+ },
734
+ '24': function(n) {
735
+ if ((isBetween(n, 3, 10) || isBetween(n, 13, 19)))
736
+ return 'few';
737
+ if (isIn(n, [2, 12]))
738
+ return 'two';
739
+ if (isIn(n, [1, 11]))
740
+ return 'one';
741
+ return 'other';
742
+ }
743
+ };
744
+
745
+ // return a function that gives the plural form name for a given integer
746
+ var index = locales2rules[lang.replace(/-.*$/, '')];
747
+ if (!(index in pluralRules)) {
748
+ console.warn('plural form unknown for [' + lang + ']');
749
+ return function() { return 'other'; };
750
+ }
751
+ return pluralRules[index];
752
+ }
753
+
754
+ // pre-defined 'plural' macro
755
+ gMacros.plural = function(str, param, key, prop) {
756
+ var n = parseFloat(param);
757
+ if (isNaN(n))
758
+ return str;
759
+
760
+ // TODO: support other properties (l20n still doesn't...)
761
+ if (prop != gTextProp)
762
+ return str;
763
+
764
+ // initialize _pluralRules
765
+ if (!gMacros._pluralRules) {
766
+ gMacros._pluralRules = getPluralRules(gLanguage);
767
+ }
768
+ var index = '[' + gMacros._pluralRules(n) + ']';
769
+
770
+ // try to find a [zero|one|two] key if it's defined
771
+ if (n === 0 && (key + '[zero]') in gL10nData) {
772
+ str = gL10nData[key + '[zero]'][prop];
773
+ } else if (n == 1 && (key + '[one]') in gL10nData) {
774
+ str = gL10nData[key + '[one]'][prop];
775
+ } else if (n == 2 && (key + '[two]') in gL10nData) {
776
+ str = gL10nData[key + '[two]'][prop];
777
+ } else if ((key + index) in gL10nData) {
778
+ str = gL10nData[key + index][prop];
779
+ } else if ((key + '[other]') in gL10nData) {
780
+ str = gL10nData[key + '[other]'][prop];
781
+ }
782
+
783
+ return str;
784
+ };
785
+
786
+
787
+ /**
788
+ * l10n dictionary functions
789
+ */
790
+
791
+ // fetch an l10n object, warn if not found, apply `args' if possible
792
+ function getL10nData(key, args, fallback) {
793
+ var data = gL10nData[key];
794
+ if (!data) {
795
+ console.warn('#' + key + ' is undefined.');
796
+ if (!fallback) {
797
+ return null;
798
+ }
799
+ data = fallback;
800
+ }
801
+
802
+ /** This is where l10n expressions should be processed.
803
+ * The plan is to support C-style expressions from the l20n project;
804
+ * until then, only two kinds of simple expressions are supported:
805
+ * {[ index ]} and {{ arguments }}.
806
+ */
807
+ var rv = {};
808
+ for (var prop in data) {
809
+ var str = data[prop];
810
+ str = substIndexes(str, args, key, prop);
811
+ str = substArguments(str, args, key);
812
+ rv[prop] = str;
813
+ }
814
+ return rv;
815
+ }
816
+
817
+ // replace {[macros]} with their values
818
+ function substIndexes(str, args, key, prop) {
819
+ var reIndex = /\{\[\s*([a-zA-Z]+)\(([a-zA-Z]+)\)\s*\]\}/;
820
+ var reMatch = reIndex.exec(str);
821
+ if (!reMatch || !reMatch.length)
822
+ return str;
823
+
824
+ // an index/macro has been found
825
+ // Note: at the moment, only one parameter is supported
826
+ var macroName = reMatch[1];
827
+ var paramName = reMatch[2];
828
+ var param;
829
+ if (args && paramName in args) {
830
+ param = args[paramName];
831
+ } else if (paramName in gL10nData) {
832
+ param = gL10nData[paramName];
833
+ }
834
+
835
+ // there's no macro parser yet: it has to be defined in gMacros
836
+ if (macroName in gMacros) {
837
+ var macro = gMacros[macroName];
838
+ str = macro(str, param, key, prop);
839
+ }
840
+ return str;
841
+ }
842
+
843
+ // replace {{arguments}} with their values
844
+ function substArguments(str, args, key) {
845
+ var reArgs = /\{\{\s*(.+?)\s*\}\}/;
846
+ var match = reArgs.exec(str);
847
+ while (match) {
848
+ if (!match || match.length < 2)
849
+ return str; // argument key not found
850
+
851
+ var arg = match[1];
852
+ var sub = '';
853
+ if (args && arg in args) {
854
+ sub = args[arg];
855
+ } else if (arg in gL10nData) {
856
+ sub = gL10nData[arg][gTextProp];
857
+ } else {
858
+ console.log('argument {{' + arg + '}} for #' + key + ' is undefined.');
859
+ return str;
860
+ }
861
+
862
+ str = str.substring(0, match.index) + sub +
863
+ str.substr(match.index + match[0].length);
864
+ match = reArgs.exec(str);
865
+ }
866
+ return str;
867
+ }
868
+
869
+ // translate an HTML element
870
+ function translateElement(element) {
871
+ var l10n = getL10nAttributes(element);
872
+ if (!l10n.id)
873
+ return;
874
+
875
+ // get the related l10n object
876
+ var data = getL10nData(l10n.id, l10n.args);
877
+ if (!data) {
878
+ console.warn('#' + l10n.id + ' is undefined.');
879
+ return;
880
+ }
881
+
882
+ // translate element (TODO: security checks?)
883
+ if (data[gTextProp]) { // XXX
884
+ if (getChildElementCount(element) === 0) {
885
+ element[gTextProp] = data[gTextProp];
886
+ } else {
887
+ // this element has element children: replace the content of the first
888
+ // (non-empty) child textNode and clear other child textNodes
889
+ var children = element.childNodes;
890
+ var found = false;
891
+ for (var i = 0, l = children.length; i < l; i++) {
892
+ if (children[i].nodeType === 3 && /\S/.test(children[i].nodeValue)) {
893
+ if (found) {
894
+ children[i].nodeValue = '';
895
+ } else {
896
+ children[i].nodeValue = data[gTextProp];
897
+ found = true;
898
+ }
899
+ }
900
+ }
901
+ // if no (non-empty) textNode is found, insert a textNode before the
902
+ // first element child.
903
+ if (!found) {
904
+ var textNode = document.createTextNode(data[gTextProp]);
905
+ element.insertBefore(textNode, element.firstChild);
906
+ }
907
+ }
908
+ delete data[gTextProp];
909
+ }
910
+
911
+ for (var k in data) {
912
+ element[k] = data[k];
913
+ }
914
+ }
915
+
916
+ // webkit browsers don't currently support 'children' on SVG elements...
917
+ function getChildElementCount(element) {
918
+ if (element.children) {
919
+ return element.children.length;
920
+ }
921
+ if (typeof element.childElementCount !== 'undefined') {
922
+ return element.childElementCount;
923
+ }
924
+ var count = 0;
925
+ for (var i = 0; i < element.childNodes.length; i++) {
926
+ count += element.nodeType === 1 ? 1 : 0;
927
+ }
928
+ return count;
929
+ }
930
+
931
+ // translate an HTML subtree
932
+ function translateFragment(element) {
933
+ element = element || document.documentElement;
934
+
935
+ // check all translatable children (= w/ a `data-l10n-id' attribute)
936
+ var children = getTranslatableChildren(element);
937
+ var elementCount = children.length;
938
+ for (var i = 0; i < elementCount; i++) {
939
+ translateElement(children[i]);
940
+ }
941
+
942
+ // translate element itself if necessary
943
+ translateElement(element);
944
+ }
945
+
946
+ // cross-browser API (sorry, oldIE doesn't support getters & setters)
947
+ return {
948
+ // get a localized string
949
+ get: function(key, args, fallbackString) {
950
+ var index = key.lastIndexOf('.');
951
+ var prop = gTextProp;
952
+ if (index > 0) { // An attribute has been specified
953
+ prop = key.substr(index + 1);
954
+ key = key.substring(0, index);
955
+ }
956
+ var fallback;
957
+ if (fallbackString) {
958
+ fallback = {};
959
+ fallback[prop] = fallbackString;
960
+ }
961
+ var data = getL10nData(key, args, fallback);
962
+ if (data && prop in data) {
963
+ return data[prop];
964
+ }
965
+ return '{{' + key + '}}';
966
+ },
967
+
968
+ // debug
969
+ getData: function() { return gL10nData; },
970
+ getText: function() { return gTextData; },
971
+
972
+ // get|set the document language
973
+ getLanguage: function() { return gLanguage; },
974
+ setLanguage: function(lang) {
975
+ loadLocale(lang, translateFragment);
976
+ },
977
+
978
+ // get the direction (ltr|rtl) of the current language
979
+ getDirection: function() {
980
+ // http://www.w3.org/International/questions/qa-scripts
981
+ // Arabic, Hebrew, Farsi, Pashto, Urdu
982
+ var rtlList = ['ar', 'he', 'fa', 'ps', 'ur'];
983
+ return (rtlList.indexOf(gLanguage) >= 0) ? 'rtl' : 'ltr';
984
+ },
985
+
986
+ // translate an element or document fragment
987
+ translate: translateFragment,
988
+
989
+ // this can be used to prevent race conditions
990
+ getReadyState: function() { return gReadyState; },
991
+ ready: function(callback) {
992
+ if (!callback) {
993
+ return;
994
+ } else if (gReadyState == 'complete' || gReadyState == 'interactive') {
995
+ window.setTimeout(callback);
996
+ } else if (document.addEventListener) {
997
+ document.addEventListener('localized', callback);
998
+ } else if (document.attachEvent) {
999
+ document.documentElement.attachEvent('onpropertychange', function(e) {
1000
+ if (e.propertyName === 'localized') {
1001
+ callback();
1002
+ }
1003
+ });
1004
+ }
1005
+ }
1006
+ };
1007
+ }) (window, document);