cedar-embeddable-editor 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (256) hide show
  1. package/.browserslistrc +18 -0
  2. package/.editorconfig +16 -0
  3. package/README.md +302 -0
  4. package/angular.json +153 -0
  5. package/cedar-embeddable-editor-0.9.0.tgz +0 -0
  6. package/e2e/protractor.conf.js +36 -0
  7. package/e2e/src/app.e2e-spec.ts +23 -0
  8. package/e2e/src/app.po.ts +11 -0
  9. package/e2e/tsconfig.json +14 -0
  10. package/karma.conf.js +32 -0
  11. package/license.txt +26 -0
  12. package/package.json +61 -0
  13. package/src/app/app.component.dev.ts +74 -0
  14. package/src/app/app.component.html +5 -0
  15. package/src/app/app.component.prod.ts +76 -0
  16. package/src/app/app.component.scss +1 -0
  17. package/src/app/app.module.dev.ts +58 -0
  18. package/src/app/app.module.prod.ts +56 -0
  19. package/src/app/modules/input-types/components/cedar-foo-bar/cedar-foo-bar.component.html +0 -0
  20. package/src/app/modules/input-types/components/cedar-foo-bar/cedar-foo-bar.component.scss +0 -0
  21. package/src/app/modules/input-types/components/cedar-foo-bar/cedar-foo-bar.component.spec.ts +24 -0
  22. package/src/app/modules/input-types/components/cedar-foo-bar/cedar-foo-bar.component.ts +39 -0
  23. package/src/app/modules/input-types/components/cedar-input-attribute-value/cedar-input-attribute-value.component.html +25 -0
  24. package/src/app/modules/input-types/components/cedar-input-attribute-value/cedar-input-attribute-value.component.scss +0 -0
  25. package/src/app/modules/input-types/components/cedar-input-attribute-value/cedar-input-attribute-value.component.spec.ts +25 -0
  26. package/src/app/modules/input-types/components/cedar-input-attribute-value/cedar-input-attribute-value.component.ts +91 -0
  27. package/src/app/modules/input-types/components/cedar-input-checkbox/cedar-input-checkbox.component.html +8 -0
  28. package/src/app/modules/input-types/components/cedar-input-checkbox/cedar-input-checkbox.component.scss +0 -0
  29. package/src/app/modules/input-types/components/cedar-input-checkbox/cedar-input-checkbox.component.spec.ts +25 -0
  30. package/src/app/modules/input-types/components/cedar-input-checkbox/cedar-input-checkbox.component.ts +104 -0
  31. package/src/app/modules/input-types/components/cedar-input-controlled/cedar-input-controlled.component.html +22 -0
  32. package/src/app/modules/input-types/components/cedar-input-controlled/cedar-input-controlled.component.scss +0 -0
  33. package/src/app/modules/input-types/components/cedar-input-controlled/cedar-input-controlled.component.spec.ts +24 -0
  34. package/src/app/modules/input-types/components/cedar-input-controlled/cedar-input-controlled.component.ts +135 -0
  35. package/src/app/modules/input-types/components/cedar-input-datetime/cedar-input-datetime.component.html +44 -0
  36. package/src/app/modules/input-types/components/cedar-input-datetime/cedar-input-datetime.component.scss +0 -0
  37. package/src/app/modules/input-types/components/cedar-input-datetime/cedar-input-datetime.component.spec.ts +25 -0
  38. package/src/app/modules/input-types/components/cedar-input-datetime/cedar-input-datetime.component.ts +451 -0
  39. package/src/app/modules/input-types/components/cedar-input-email/cedar-input-email.component.html +16 -0
  40. package/src/app/modules/input-types/components/cedar-input-email/cedar-input-email.component.scss +0 -0
  41. package/src/app/modules/input-types/components/cedar-input-email/cedar-input-email.component.spec.ts +25 -0
  42. package/src/app/modules/input-types/components/cedar-input-email/cedar-input-email.component.ts +91 -0
  43. package/src/app/modules/input-types/components/cedar-input-link/cedar-input-link.component.html +16 -0
  44. package/src/app/modules/input-types/components/cedar-input-link/cedar-input-link.component.scss +0 -0
  45. package/src/app/modules/input-types/components/cedar-input-link/cedar-input-link.component.spec.ts +25 -0
  46. package/src/app/modules/input-types/components/cedar-input-link/cedar-input-link.component.ts +92 -0
  47. package/src/app/modules/input-types/components/cedar-input-multiple-choice/cedar-input-multiple-choice.component.html +18 -0
  48. package/src/app/modules/input-types/components/cedar-input-multiple-choice/cedar-input-multiple-choice.component.scss +5 -0
  49. package/src/app/modules/input-types/components/cedar-input-multiple-choice/cedar-input-multiple-choice.component.spec.ts +25 -0
  50. package/src/app/modules/input-types/components/cedar-input-multiple-choice/cedar-input-multiple-choice.component.ts +78 -0
  51. package/src/app/modules/input-types/components/cedar-input-numeric/cedar-input-numeric.component.html +15 -0
  52. package/src/app/modules/input-types/components/cedar-input-numeric/cedar-input-numeric.component.scss +0 -0
  53. package/src/app/modules/input-types/components/cedar-input-numeric/cedar-input-numeric.component.spec.ts +25 -0
  54. package/src/app/modules/input-types/components/cedar-input-numeric/cedar-input-numeric.component.ts +169 -0
  55. package/src/app/modules/input-types/components/cedar-input-phone/cedar-input-phone.component.html +15 -0
  56. package/src/app/modules/input-types/components/cedar-input-phone/cedar-input-phone.component.scss +0 -0
  57. package/src/app/modules/input-types/components/cedar-input-phone/cedar-input-phone.component.spec.ts +25 -0
  58. package/src/app/modules/input-types/components/cedar-input-phone/cedar-input-phone.component.ts +94 -0
  59. package/src/app/modules/input-types/components/cedar-input-select/cedar-input-select.component.html +19 -0
  60. package/src/app/modules/input-types/components/cedar-input-select/cedar-input-select.component.scss +0 -0
  61. package/src/app/modules/input-types/components/cedar-input-select/cedar-input-select.component.spec.ts +25 -0
  62. package/src/app/modules/input-types/components/cedar-input-select/cedar-input-select.component.ts +108 -0
  63. package/src/app/modules/input-types/components/cedar-input-text/cedar-input-text.component.html +25 -0
  64. package/src/app/modules/input-types/components/cedar-input-text/cedar-input-text.component.scss +0 -0
  65. package/src/app/modules/input-types/components/cedar-input-text/cedar-input-text.component.spec.ts +25 -0
  66. package/src/app/modules/input-types/components/cedar-input-text/cedar-input-text.component.ts +125 -0
  67. package/src/app/modules/input-types/components/cedar-static-image/cedar-static-image.component.html +8 -0
  68. package/src/app/modules/input-types/components/cedar-static-image/cedar-static-image.component.scss +0 -0
  69. package/src/app/modules/input-types/components/cedar-static-image/cedar-static-image.component.spec.ts +24 -0
  70. package/src/app/modules/input-types/components/cedar-static-image/cedar-static-image.component.ts +40 -0
  71. package/src/app/modules/input-types/components/cedar-static-page-break/cedar-static-page-break.component.html +20 -0
  72. package/src/app/modules/input-types/components/cedar-static-page-break/cedar-static-page-break.component.scss +24 -0
  73. package/src/app/modules/input-types/components/cedar-static-page-break/cedar-static-page-break.component.spec.ts +25 -0
  74. package/src/app/modules/input-types/components/cedar-static-page-break/cedar-static-page-break.component.ts +36 -0
  75. package/src/app/modules/input-types/components/cedar-static-rich-text/cedar-static-rich-text.component.html +2 -0
  76. package/src/app/modules/input-types/components/cedar-static-rich-text/cedar-static-rich-text.component.scss +0 -0
  77. package/src/app/modules/input-types/components/cedar-static-rich-text/cedar-static-rich-text.component.spec.ts +25 -0
  78. package/src/app/modules/input-types/components/cedar-static-rich-text/cedar-static-rich-text.component.ts +35 -0
  79. package/src/app/modules/input-types/components/cedar-static-section-break/cedar-static-section-break.component.html +8 -0
  80. package/src/app/modules/input-types/components/cedar-static-section-break/cedar-static-section-break.component.scss +0 -0
  81. package/src/app/modules/input-types/components/cedar-static-section-break/cedar-static-section-break.component.spec.ts +24 -0
  82. package/src/app/modules/input-types/components/cedar-static-section-break/cedar-static-section-break.component.ts +39 -0
  83. package/src/app/modules/input-types/components/cedar-static-youtube/cedar-static-youtube.component.html +6 -0
  84. package/src/app/modules/input-types/components/cedar-static-youtube/cedar-static-youtube.component.scss +0 -0
  85. package/src/app/modules/input-types/components/cedar-static-youtube/cedar-static-youtube.component.spec.ts +24 -0
  86. package/src/app/modules/input-types/components/cedar-static-youtube/cedar-static-youtube.component.ts +42 -0
  87. package/src/app/modules/input-types/input-types.module.ts +139 -0
  88. package/src/app/modules/shared/components/cedar-component-header/cedar-component-header.component.html +13 -0
  89. package/src/app/modules/shared/components/cedar-component-header/cedar-component-header.component.scss +12 -0
  90. package/src/app/modules/shared/components/cedar-component-header/cedar-component-header.component.spec.ts +25 -0
  91. package/src/app/modules/shared/components/cedar-component-header/cedar-component-header.component.ts +42 -0
  92. package/src/app/modules/shared/components/cedar-component-renderer/cedar-component-renderer.component.html +117 -0
  93. package/src/app/modules/shared/components/cedar-component-renderer/cedar-component-renderer.component.scss +5 -0
  94. package/src/app/modules/shared/components/cedar-component-renderer/cedar-component-renderer.component.spec.ts +25 -0
  95. package/src/app/modules/shared/components/cedar-component-renderer/cedar-component-renderer.component.ts +101 -0
  96. package/src/app/modules/shared/components/cedar-data-saver/cedar-data-saver.component.html +22 -0
  97. package/src/app/modules/shared/components/cedar-data-saver/cedar-data-saver.component.scss +23 -0
  98. package/src/app/modules/shared/components/cedar-data-saver/cedar-data-saver.component.spec.ts +24 -0
  99. package/src/app/modules/shared/components/cedar-data-saver/cedar-data-saver.component.ts +139 -0
  100. package/src/app/modules/shared/components/cedar-embeddable-metadata-editor/cedar-embeddable-metadata-editor.component.html +56 -0
  101. package/src/app/modules/shared/components/cedar-embeddable-metadata-editor/cedar-embeddable-metadata-editor.component.scss +13 -0
  102. package/src/app/modules/shared/components/cedar-embeddable-metadata-editor/cedar-embeddable-metadata-editor.component.spec.ts +25 -0
  103. package/src/app/modules/shared/components/cedar-embeddable-metadata-editor/cedar-embeddable-metadata-editor.component.ts +184 -0
  104. package/src/app/modules/shared/components/cedar-embeddable-metadata-editor-wrapper/cedar-embeddable-metadata-editor-wrapper.component.html +15 -0
  105. package/src/app/modules/shared/components/cedar-embeddable-metadata-editor-wrapper/cedar-embeddable-metadata-editor-wrapper.component.scss +2 -0
  106. package/src/app/modules/shared/components/cedar-embeddable-metadata-editor-wrapper/cedar-embeddable-metadata-editor-wrapper.component.spec.ts +25 -0
  107. package/src/app/modules/shared/components/cedar-embeddable-metadata-editor-wrapper/cedar-embeddable-metadata-editor-wrapper.component.ts +240 -0
  108. package/src/app/modules/shared/components/cedar-multi-pager/cedar-multi-pager.component.html +35 -0
  109. package/src/app/modules/shared/components/cedar-multi-pager/cedar-multi-pager.component.scss +41 -0
  110. package/src/app/modules/shared/components/cedar-multi-pager/cedar-multi-pager.component.spec.ts +25 -0
  111. package/src/app/modules/shared/components/cedar-multi-pager/cedar-multi-pager.component.ts +282 -0
  112. package/src/app/modules/shared/components/date-picker/date-picker.component.html +46 -0
  113. package/src/app/modules/shared/components/date-picker/date-picker.component.scss +7 -0
  114. package/src/app/modules/shared/components/date-picker/date-picker.component.spec.ts +25 -0
  115. package/src/app/modules/shared/components/date-picker/date-picker.component.ts +100 -0
  116. package/src/app/modules/shared/components/file-uploader/bytes/bytes.pipe.spec.ts +33 -0
  117. package/src/app/modules/shared/components/file-uploader/bytes/bytes.pipe.ts +16 -0
  118. package/src/app/modules/shared/components/file-uploader/file-upload-input-for/file-upload-input-for.directive.spec.ts +54 -0
  119. package/src/app/modules/shared/components/file-uploader/file-upload-input-for/file-upload-input-for.directive.ts +67 -0
  120. package/src/app/modules/shared/components/file-uploader/file-uploader.component.html +26 -0
  121. package/src/app/modules/shared/components/file-uploader/file-uploader.component.scss +55 -0
  122. package/src/app/modules/shared/components/file-uploader/file-uploader.component.spec.ts +25 -0
  123. package/src/app/modules/shared/components/file-uploader/file-uploader.component.ts +67 -0
  124. package/src/app/modules/shared/components/file-uploader/mat-file-upload/mat-file-upload.component.html +42 -0
  125. package/src/app/modules/shared/components/file-uploader/mat-file-upload/mat-file-upload.component.scss +31 -0
  126. package/src/app/modules/shared/components/file-uploader/mat-file-upload/mat-file-upload.component.spec.ts +177 -0
  127. package/src/app/modules/shared/components/file-uploader/mat-file-upload/mat-file-upload.component.ts +145 -0
  128. package/src/app/modules/shared/components/file-uploader/mat-file-upload/mat-file-upload.service.ts +21 -0
  129. package/src/app/modules/shared/components/file-uploader/mat-file-upload-queue/mat-file-upload-queue.component.html +1 -0
  130. package/src/app/modules/shared/components/file-uploader/mat-file-upload-queue/mat-file-upload-queue.component.scss +0 -0
  131. package/src/app/modules/shared/components/file-uploader/mat-file-upload-queue/mat-file-upload-queue.component.spec.ts +59 -0
  132. package/src/app/modules/shared/components/file-uploader/mat-file-upload-queue/mat-file-upload-queue.component.ts +139 -0
  133. package/src/app/modules/shared/components/file-uploader/mat-file-upload-queue/mat-file-upload-queue.service.spec.ts +33 -0
  134. package/src/app/modules/shared/components/file-uploader/mat-file-upload-queue/mat-file-upload-queue.service.ts +17 -0
  135. package/src/app/modules/shared/components/file-uploader/mat-file-upload.module.ts +35 -0
  136. package/src/app/modules/shared/components/file-uploader/mat-file-upload.type.ts +24 -0
  137. package/src/app/modules/shared/components/preferences-menu/preferences-menu.component.html +18 -0
  138. package/src/app/modules/shared/components/preferences-menu/preferences-menu.component.scss +0 -0
  139. package/src/app/modules/shared/components/preferences-menu/preferences-menu.component.spec.ts +23 -0
  140. package/src/app/modules/shared/components/preferences-menu/preferences-menu.component.ts +10 -0
  141. package/src/app/modules/shared/components/sample-templates/sample-template-select/sample-template-select.component.html +16 -0
  142. package/src/app/modules/shared/components/sample-templates/sample-template-select/sample-template-select.component.scss +0 -0
  143. package/src/app/modules/shared/components/sample-templates/sample-template-select/sample-template-select.component.spec.ts +25 -0
  144. package/src/app/modules/shared/components/sample-templates/sample-template-select/sample-template-select.component.ts +89 -0
  145. package/src/app/modules/shared/components/sample-templates/sample-templates.component.html +19 -0
  146. package/src/app/modules/shared/components/sample-templates/sample-templates.component.scss +0 -0
  147. package/src/app/modules/shared/components/sample-templates/sample-templates.component.spec.ts +25 -0
  148. package/src/app/modules/shared/components/sample-templates/sample-templates.component.ts +66 -0
  149. package/src/app/modules/shared/components/sample-templates/sample-templates.service.ts +175 -0
  150. package/src/app/modules/shared/components/source-panels/source-panels.component.html +98 -0
  151. package/src/app/modules/shared/components/source-panels/source-panels.component.scss +0 -0
  152. package/src/app/modules/shared/components/source-panels/source-panels.component.spec.ts +25 -0
  153. package/src/app/modules/shared/components/source-panels/source-panels.component.ts +36 -0
  154. package/src/app/modules/shared/components/static-footer/static-footer.component.html +17 -0
  155. package/src/app/modules/shared/components/static-footer/static-footer.component.scss +110 -0
  156. package/src/app/modules/shared/components/static-footer/static-footer.component.spec.ts +25 -0
  157. package/src/app/modules/shared/components/static-footer/static-footer.component.ts +16 -0
  158. package/src/app/modules/shared/components/static-header/static-header.component.html +10 -0
  159. package/src/app/modules/shared/components/static-header/static-header.component.scss +13 -0
  160. package/src/app/modules/shared/components/static-header/static-header.component.spec.ts +25 -0
  161. package/src/app/modules/shared/components/static-header/static-header.component.ts +21 -0
  162. package/src/app/modules/shared/components/timezone-picker/timezone-picker.component.html +16 -0
  163. package/src/app/modules/shared/components/timezone-picker/timezone-picker.component.scss +0 -0
  164. package/src/app/modules/shared/components/timezone-picker/timezone-picker.component.spec.ts +25 -0
  165. package/src/app/modules/shared/components/timezone-picker/timezone-picker.component.ts +251 -0
  166. package/src/app/modules/shared/factory/template-representation.factory.ts +323 -0
  167. package/src/app/modules/shared/handler/component-type.handler.ts +51 -0
  168. package/src/app/modules/shared/handler/data-object-builder.handler.ts +159 -0
  169. package/src/app/modules/shared/handler/data-object-data-value.handler.ts +270 -0
  170. package/src/app/modules/shared/handler/data-object-structure.handler.ts +145 -0
  171. package/src/app/modules/shared/handler/multi-instance-object.handler.ts +317 -0
  172. package/src/app/modules/shared/models/cedar-input-template.model.ts +3 -0
  173. package/src/app/modules/shared/models/cedar-model.model.ts +48 -0
  174. package/src/app/modules/shared/models/component/cedar-component.model.ts +16 -0
  175. package/src/app/modules/shared/models/component/component-representation.model.ts +30 -0
  176. package/src/app/modules/shared/models/component/element-component.model.ts +11 -0
  177. package/src/app/modules/shared/models/component/field-component.model.ts +23 -0
  178. package/src/app/modules/shared/models/component/multi-component.model.ts +10 -0
  179. package/src/app/modules/shared/models/component/null-component.model.ts +20 -0
  180. package/src/app/modules/shared/models/component/single-component.model.ts +6 -0
  181. package/src/app/modules/shared/models/element/abstract-element-component.model.ts +26 -0
  182. package/src/app/modules/shared/models/element/multi-element-component.model.ts +19 -0
  183. package/src/app/modules/shared/models/element/single-element-component.model.ts +16 -0
  184. package/src/app/modules/shared/models/enum/data-object-building-mode.model.ts +6 -0
  185. package/src/app/modules/shared/models/field/abstract-field-component.model.ts +28 -0
  186. package/src/app/modules/shared/models/field/multi-field-component.model.ts +21 -0
  187. package/src/app/modules/shared/models/field/single-field-component.model.ts +18 -0
  188. package/src/app/modules/shared/models/info/basic-info.model.ts +8 -0
  189. package/src/app/modules/shared/models/info/choice-info.model.ts +9 -0
  190. package/src/app/modules/shared/models/info/choice-option.model.ts +6 -0
  191. package/src/app/modules/shared/models/info/content-info.model.ts +5 -0
  192. package/src/app/modules/shared/models/info/controlled-info.model.ts +8 -0
  193. package/src/app/modules/shared/models/info/current-multi-info.model.ts +7 -0
  194. package/src/app/modules/shared/models/info/label-info.model.ts +7 -0
  195. package/src/app/modules/shared/models/info/multi-info.model.ts +10 -0
  196. package/src/app/modules/shared/models/info/multi-instance-info.model.ts +20 -0
  197. package/src/app/modules/shared/models/info/multi-instance-object-info.model.ts +30 -0
  198. package/src/app/modules/shared/models/info/number-info.model.ts +9 -0
  199. package/src/app/modules/shared/models/info/value-info.model.ts +9 -0
  200. package/src/app/modules/shared/models/input-type.model.ts +21 -0
  201. package/src/app/modules/shared/models/instance-extract-data.model.ts +3 -0
  202. package/src/app/modules/shared/models/instance-full-data.model.ts +5 -0
  203. package/src/app/modules/shared/models/javascript-types.model.ts +7 -0
  204. package/src/app/modules/shared/models/json-schema.model.ts +39 -0
  205. package/src/app/modules/shared/models/numbers.model.ts +10 -0
  206. package/src/app/modules/shared/models/rest/integrated-search/integrated-search-request-parameter-object.ts +8 -0
  207. package/src/app/modules/shared/models/rest/integrated-search/integrated-search-request-value-constraints.ts +8 -0
  208. package/src/app/modules/shared/models/rest/integrated-search/integrated-search-request.ts +9 -0
  209. package/src/app/modules/shared/models/rest/integrated-search/integrated-search-response-item.ts +10 -0
  210. package/src/app/modules/shared/models/rest/integrated-search/integrated-search-response.ts +13 -0
  211. package/src/app/modules/shared/models/static/static-field-component.model.ts +24 -0
  212. package/src/app/modules/shared/models/template/cedar-template.model.ts +24 -0
  213. package/src/app/modules/shared/models/template/empty-template.model.ts +5 -0
  214. package/src/app/modules/shared/models/template/null-template.model.ts +23 -0
  215. package/src/app/modules/shared/models/template/template-component.model.ts +12 -0
  216. package/src/app/modules/shared/models/temporal.model.ts +13 -0
  217. package/src/app/modules/shared/models/ui/cedar-ui-component.model.ts +17 -0
  218. package/src/app/modules/shared/models/xsd.model.ts +11 -0
  219. package/src/app/modules/shared/pipe/keep-html.pipe.ts +13 -0
  220. package/src/app/modules/shared/pipe/rdf.pipe.ts +10 -0
  221. package/src/app/modules/shared/service/active-component-registry.service.ts +134 -0
  222. package/src/app/modules/shared/service/component-data.service.ts +25 -0
  223. package/src/app/modules/shared/service/controlled-field-data.service.ts +37 -0
  224. package/src/app/modules/shared/service/date-time/custom-date-adapter.ts +19 -0
  225. package/src/app/modules/shared/service/date-time/date-time.service.ts +30 -0
  226. package/src/app/modules/shared/service/local-settings.service.ts +22 -0
  227. package/src/app/modules/shared/service/message-handler.service.ts +35 -0
  228. package/src/app/modules/shared/service/page-break-paginator.service.ts +78 -0
  229. package/src/app/modules/shared/shared.module.ts +97 -0
  230. package/src/app/modules/shared/util/data-context.ts +42 -0
  231. package/src/app/modules/shared/util/data-object-util.ts +102 -0
  232. package/src/app/modules/shared/util/handler-context.ts +81 -0
  233. package/src/app/modules/shared/util/template-object-util.ts +21 -0
  234. package/src/assets/.gitkeep +0 -0
  235. package/src/assets/fonts/MaterialIcons-Regular.eot +0 -0
  236. package/src/assets/fonts/MaterialIcons-Regular.ttf +0 -0
  237. package/src/assets/fonts/MaterialIcons-Regular.woff +0 -0
  238. package/src/assets/fonts/MaterialIcons-Regular.woff2 +0 -0
  239. package/src/assets/i18n-cee/en.json +86 -0
  240. package/src/assets/i18n-cee/hu.json +86 -0
  241. package/src/assets/images/bmir-logo.png +0 -0
  242. package/src/assets/images/cedar-logo-80x80.png +0 -0
  243. package/src/environments/environment.prod.ts +5 -0
  244. package/src/environments/environment.ts +18 -0
  245. package/src/favicon.ico +0 -0
  246. package/src/index.html +16 -0
  247. package/src/main.ts +28 -0
  248. package/src/polyfills.ts +65 -0
  249. package/src/styles-own.scss +352 -0
  250. package/src/styles.scss +116 -0
  251. package/src/test.ts +25 -0
  252. package/tsconfig.app.json +16 -0
  253. package/tsconfig.base.json +20 -0
  254. package/tsconfig.json +20 -0
  255. package/tsconfig.spec.json +18 -0
  256. package/tslint.json +152 -0
@@ -0,0 +1,18 @@
1
+ # This file is used by the build system to adjust CSS and JS output to support the specified browsers below.
2
+ # For additional information regarding the format and rule options, please see:
3
+ # https://github.com/browserslist/browserslist#queries
4
+
5
+ # For the full list of supported browsers by the Angular framework, please see:
6
+ # https://angular.io/guide/browser-support
7
+
8
+ # You can see what browsers were selected by your queries by running:
9
+ # npx browserslist
10
+
11
+ last 1 Chrome version
12
+ last 1 Firefox version
13
+ last 2 Edge major versions
14
+ last 2 Safari major versions
15
+ last 2 iOS major versions
16
+ Firefox ESR
17
+ not IE 9-10 # Angular support for IE 9-10 has been deprecated and will be removed as of Angular v11. To opt-in, remove the 'not' prefix on this line.
18
+ not IE 11 # Angular supports IE 11 only as an opt-in. To opt-in, remove the 'not' prefix on this line.
package/.editorconfig ADDED
@@ -0,0 +1,16 @@
1
+ # Editor configuration, see https://editorconfig.org
2
+ root = true
3
+
4
+ [*]
5
+ charset = utf-8
6
+ indent_style = space
7
+ indent_size = 2
8
+ insert_final_newline = true
9
+ trim_trailing_whitespace = true
10
+
11
+ [*.ts]
12
+ quote_type = single
13
+
14
+ [*.md]
15
+ max_line_length = off
16
+ trim_trailing_whitespace = false
package/README.md ADDED
@@ -0,0 +1,302 @@
1
+ # Cedar Embeddable Editor (CEE)
2
+
3
+ The CEDAR Embeddable Editor is as a web component that implements the functionality of the CEDAR Metadata Editor.
4
+
5
+ It takes CEDAR JSON Schema templates as input, and produces CEDAR JSON-LD metadata.
6
+
7
+ ## Running as a standalone application
8
+
9
+ You can run CEE as a standalone application. This is helpful for developers to see changes to the code reflected immediately in the application. To run CEE in the standalone mode (NOT as a Webcomponent), proceed with the following steps:
10
+
11
+ ### Clone the repository
12
+
13
+ Clone this repository onto a local directory of your choice:
14
+
15
+ ```shell
16
+ git clone https://github.com/metadatacenter/cedar-embeddable-editor.git
17
+ ```
18
+
19
+ ### Edit configuration
20
+
21
+ 1. Open the file ```cedar-embeddable-editor/src/app/app.component.dev.ts``` in your favorite editor.
22
+ 2. Edit configuration parameters based on your local environment (see section [Configuration](https://github.com/metadatacenter/cedar-embeddable-editor/tree/develop#configuration) for details).
23
+
24
+ ### Build the project and start the server
25
+
26
+ 1. Navigate to the CEE directory:
27
+ ```shell
28
+ $cd <...>/<clone directory>/cedar-embeddable-editor/
29
+ ```
30
+ 2. Run these commands:
31
+ ```shell
32
+ cedar-embeddable-editor$ npm install
33
+ cedar-embeddable-editor$ ng serve
34
+ ```
35
+ 3. In your browser, navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files.
36
+
37
+ ## Running as a Webcomponent
38
+
39
+ This method creates a single Javascript (JS) file that encapsulates all the functionality of CEE. The JS file can be embedded in any application or HTML page. To build a CEE Webcomponent, proceed with these steps:
40
+
41
+ ### Build and copy the Webcomponent JS file
42
+
43
+ 1. Run the build command:
44
+ ```shell
45
+ cedar-embeddable-editor$ ng build --configuration production --output-hashing=none
46
+ ```
47
+ 2. Combine the generated files into a single file and copy the final JS to the sample application:
48
+ ```shell
49
+ cedar-embeddable-editor$ cat dist/cedar-embeddable-editor/{runtime,polyfills,main}.js > "/dev/cedar/cedar-cee-demo-generic/assets/js/cedar-embeddable-editor.js"
50
+ ```
51
+
52
+ ## Configuration
53
+
54
+ ### Configuration file
55
+
56
+ The CEE configuration file format and storage location depends on the application and the mode in which CEE is being used.
57
+
58
+ * When running CEE in the standalone mode (developer mode), the configuration parameters are stored in and read from the file: `src/app/app.component.dev.ts`.
59
+ * When running CEE as a generic Webcomponent, the configuration parameters can be stored in any `.json` file that is visible to the application that embeds CEE Webcomponent. CEE Webcomponent API provides a method for loading the configuration file from its path at runtime. For example:
60
+ ```javascript
61
+ document.addEventListener('WebComponentsReady', function () {
62
+ const cee = document.querySelector('cedar-embeddable-editor');
63
+ cee.loadConfigFromURL('assets/data/cee-config.json');
64
+ });
65
+ ```
66
+ * When using the Angular 2 sample application (https://github.com/metadatacenter/cedar-cee-demo-angular), the configuration is stored in the file: `assets/data/appConfig.json`.
67
+
68
+ ### Metadata save endpoint
69
+
70
+ CEE offers the functionality to save user metadata using a custom remote endpoint. If you plan to enable this feature, you will need to set the following configuration:
71
+
72
+ ```json
73
+ "showDataSaver": true,
74
+ "dataSaverEndpointUrl": "http://localhost:8000/datasave.php",
75
+ ```
76
+ Replace `dataSaverEndpointUrl` with a URL pointing to the endpoint that will handle metadata submissions.
77
+
78
+ The endpoint can be implemented using any REST-enabled framework/programming language. CEE makes a POST call to the endpoint specified in the configuration file, including the metadata in JSON-LD format in the body of the request.
79
+
80
+ * Request format:
81
+ ```json
82
+ {
83
+ "metadata": {__contents of meatadata__},
84
+ "info": {__optional info object that can be passed in and out of CEE__}
85
+ }
86
+ ```
87
+
88
+ CEE allows custom data to be passed to the Webcomponent, which then becomes available to your Metadata save endpoint. The custom data is passed to the Webcomponent via an API call and is propogated to the Metadata save endpoint using the `info` attribute.
89
+
90
+ Example:
91
+
92
+ ```javascript
93
+ function getCustomTemplateInfo() {
94
+ return {
95
+ mycustomtitle: 'ACME Template',
96
+ mycustomurl: 'https://doi.org/10.15468/9vuieb',
97
+ mycutomdataattribute1: 'Hello World',
98
+ mycutomdataattribute2: {name: 'John Doe', age: 35}
99
+ };
100
+ }
101
+
102
+ document.addEventListener('WebComponentsReady', function () {
103
+ const cee = document.querySelector('cedar-embeddable-editor');
104
+ cee.templateInfo = getCustomTemplateInfo();
105
+ });
106
+ ```
107
+
108
+ When a user pushes the **Save** (metadata) button, these custom attributes are propagated to the Metadata save endpoint.
109
+
110
+ Example:
111
+
112
+ ```json
113
+ {
114
+ "metadata": {__contents of metadata__},
115
+ "info": {
116
+ "mycustomtitle": "ACME Template",
117
+ "mycustomurl": "https://doi.org/10.15468/9vuieb",
118
+ "mycutomdataattribute1": "Hello World",
119
+ "mycutomdataattribute2": {
120
+ "name": "John Doe",
121
+ "age": 35
122
+ }
123
+ }
124
+ }
125
+ ```
126
+
127
+ If the metadata was created successfully, the response received from the server returns `201 Created` status code.
128
+
129
+ The response must include a JSON object with the following attributes:
130
+ * **id:** identifier of the created resource in the target database.
131
+ * **title:** title of the resource that has been created (corresponds to the value of schema:name in the metadata)
132
+ * **links:**
133
+ * **self:** If the resource is publicly available, an URL identifying the location of the newly created resource. Otherwise, null.
134
+
135
+ Example:
136
+
137
+ ```json
138
+ {
139
+ "id": "010a261f12b3efc4",
140
+ "title": "single field",
141
+ "links": {
142
+ "self": "http://localhost:8000/metadata/010a261f12b3efc4.json"
143
+ }
144
+ }
145
+ ```
146
+
147
+ If there was an error, the corresponding error code and a JSON object with the following attributes:
148
+ * **status:** the HTTP status code applicable to this problem, expressed as a string value.
149
+ * **title:** a short, human-readable summary of the problem that should not change from occurrence to occurrence of the problem.
150
+ * **detail:** a human-readable explanation specific to this occurrence of the problem.
151
+
152
+ Example:
153
+
154
+ ```json
155
+ {
156
+ "status": "500",
157
+ "title": "Internal Error",
158
+ "detail": "Error connecting to database server (invalid credentials)"
159
+ }
160
+ ```
161
+
162
+ ### Template upload endpoint
163
+
164
+ CEDAR Embeddable Editor includes an optional feature that allows uploading a template source file and creating metadata for that template.
165
+
166
+ If you plan to enable that functionality, you will need to set up two endpoints in your configuration file:
167
+
168
+ ```json
169
+ "showTemplateUpload": true,
170
+ "templateUploadBaseUrl": "http://localhost:8000",
171
+ "templateUploadEndpoint": "/upload.php",
172
+ "templateDownloadEndpoint": "/download.php",
173
+ ```
174
+ Replace `templateUploadBaseUrl` with a URL pointing to the root of the server on which the endpoints reside. Configure `templateUploadEndpoint` and `templateDownloadEndpoint` to their respective paths from the `templateUploadBaseUrl`.
175
+
176
+ ### Required configuration parameters
177
+
178
+ * **sampleTemplateLocationPrefix:** The base URL that contains the sample CEDAR templates
179
+ * **terminologyProxyUrl:** The URL of the proxy endpoint that communicates with BioPortal
180
+
181
+ ```json
182
+ {
183
+ "sampleTemplateLocationPrefix": "https://component.metadatacenter.orgx/cedar-embeddable-editor-sample-templates/",
184
+ "terminologyProxyUrl": "https://terminology.metadatacenter.org/bioportal/integrated-search"
185
+ }
186
+ ```
187
+
188
+ ### Optional configuration parameters
189
+
190
+ The are other optional configuration parameters available for controlling various aspects of the CEE user interface. Most of these are self-explanatory. The example below includes the default values in cases, where the parameter isn't explicitly declared.
191
+
192
+ ```json
193
+ {
194
+ "showSampleTemplateLinks": true,
195
+ "loadSampleTemplateName": "19",
196
+ "expandedSampleTemplateLinks": false,
197
+ "showTemplateRenderingRepresentation": true,
198
+ "expandedTemplateRenderingRepresentation": false,
199
+ "showInstanceDataCore": true,
200
+ "expandedInstanceDataCore": true,
201
+ "showInstanceDataFull": false,
202
+ "expandedInstanceDataFull": false,
203
+ "showMultiInstanceInfo": false,
204
+ "expandedMultiInstanceInfo": false,
205
+ "showTemplateSourceData": true,
206
+ "expandedTemplateSourceData": false,
207
+ "showHeader": true,
208
+ "showFooter": true,
209
+ "collapseStaticComponents": true
210
+ }
211
+ ```
212
+
213
+ ## Metadata API
214
+
215
+ CEE Webcomponent includes APIs for exporting metadata externally and importing metadata into CEE.
216
+
217
+ ### Metadata Export
218
+
219
+ The metadata currently being edited inside CEE can be exported at anytime by making this API call:
220
+
221
+ ```javascript
222
+ const meta = cee.currentMetadata;
223
+ ```
224
+
225
+ In the example below, the metadata is sent to an external endpoint every 15 seconds:
226
+
227
+ ```javascript
228
+ document.addEventListener('WebComponentsReady', function () {
229
+ const cee = document.querySelector('cedar-embeddable-editor');
230
+ cee.loadConfigFromURL('assets/data/cee-config.json');
231
+ const saveTime = 15000; // 15 seconds
232
+
233
+ setInterval(() => {
234
+ const meta = cee.currentMetadata;
235
+
236
+ const xhr = new XMLHttpRequest();
237
+ xhr.open("POST", "http://localhost:8001/metadatasave.php");
238
+ xhr.setRequestHeader("Accept", "application/json");
239
+ xhr.setRequestHeader("Content-Type", "application/json");
240
+ xhr.send(JSON.stringify(meta, null, 2));
241
+ console.log('Saved metadata after ' + saveTime / 1000 + ' seconds');
242
+ }, saveTime);
243
+ });
244
+ ```
245
+
246
+ ### Metadata Import
247
+
248
+ You can import your metadata into CEE Webcomponent, provided it matches the template currently being edited. To import your metadata, execute this API call:
249
+
250
+ ```javascript
251
+ cee.metadata = yourCustomMetadataJson
252
+ ```
253
+
254
+ In the example below, the metadata is fetched from a remote URL and imported into CEE:
255
+
256
+ ```javascript
257
+ function restoreMetadataFromURL(metaUrl, cee, successHandler = null, errorHandler = null) {
258
+ const xhr = new XMLHttpRequest();
259
+ xhr.onreadystatechange = () => {
260
+ if (xhr.readyState === XMLHttpRequest.DONE) {
261
+ if (xhr.status === 200) {
262
+ const jsonMeta = JSON.parse(xhr.responseText);
263
+ cee.metadata = jsonMeta;
264
+
265
+ if (successHandler) {
266
+ successHandler(jsonMeta);
267
+ }
268
+ } else {
269
+ if (errorHandler) {
270
+ errorHandler(xhr);
271
+ }
272
+ }
273
+ }
274
+ };
275
+ xhr.open('GET', metaUrl, true);
276
+ xhr.send();
277
+ }
278
+
279
+ document.addEventListener('WebComponentsReady', function () {
280
+ const cee = document.querySelector('cedar-embeddable-editor');
281
+ cee.loadConfigFromURL('assets/data/cee-config.json');
282
+ restoreMetadataFromURL('uploads/metadata-for-restore.json', cee);
283
+ });
284
+ ```
285
+
286
+ To reiterate, the metadata being imported **MUST** match the template currently being edited and open in your browser window.
287
+
288
+ ## Example Applications
289
+
290
+ There are two sample applications you can use to demonstrate how to embed and use CEE. Follow the links below to the demo application of your choice. The documentation for each demo application can be found in the README file of the corresponding application.
291
+
292
+ ### CEE Demo Generic
293
+
294
+ This demo uses a generic HTML page with the CEE Webcomponent embedded in it. It runs standalone, with no dependency on any web framework.
295
+
296
+ https://github.com/metadatacenter/cedar-cee-demo-generic
297
+
298
+ ### CEE Demo Angular
299
+
300
+ This demo is written in Angular 2 and requires that framework to run properly.
301
+
302
+ https://github.com/metadatacenter/cedar-cee-demo-angular
package/angular.json ADDED
@@ -0,0 +1,153 @@
1
+ {
2
+ "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
3
+ "version": 1,
4
+ "newProjectRoot": "projects",
5
+ "projects": {
6
+ "cedar-embeddable-editor": {
7
+ "projectType": "application",
8
+ "schematics": {
9
+ "@schematics/angular:component": {
10
+ "style": "scss"
11
+ }
12
+ },
13
+ "root": "",
14
+ "sourceRoot": "src",
15
+ "prefix": "app",
16
+ "architect": {
17
+ "build": {
18
+ "builder": "@angular-devkit/build-angular:browser",
19
+ "options": {
20
+ "allowedCommonJsDependencies": [
21
+ "moment-timezone"
22
+ ],
23
+ "outputPath": "dist/cedar-embeddable-editor",
24
+ "index": "src/index.html",
25
+ "main": "src/main.ts",
26
+ "polyfills": "src/polyfills.ts",
27
+ "tsConfig": "tsconfig.app.json",
28
+ "assets": [
29
+ "src/favicon.ico",
30
+ "src/assets"
31
+ ],
32
+ "styles": [
33
+ "src/styles.scss",
34
+ "src/styles-own.scss"
35
+ ],
36
+ "scripts": [
37
+ "node_modules/@webcomponents/custom-elements/src/native-shim.js"
38
+ ],
39
+ "allowedCommonJsDependencies": [
40
+ "moment",
41
+ "moment-timezone"
42
+ ],
43
+ "aot": false,
44
+ "vendorChunk": true,
45
+ "extractLicenses": false,
46
+ "buildOptimizer": false,
47
+ "sourceMap": true,
48
+ "optimization": false,
49
+ "namedChunks": true
50
+ },
51
+ "configurations": {
52
+ "production": {
53
+ "fileReplacements": [
54
+ {
55
+ "replace": "src/environments/environment.ts",
56
+ "with": "src/environments/environment.prod.ts"
57
+ }
58
+ ],
59
+ "optimization": true,
60
+ "outputHashing": "none",
61
+ "sourceMap": false,
62
+ "namedChunks": false,
63
+ "aot": true,
64
+ "extractLicenses": true,
65
+ "vendorChunk": false,
66
+ "buildOptimizer": true,
67
+ "budgets": [
68
+ {
69
+ "type": "initial",
70
+ "maximumWarning": "3mb",
71
+ "maximumError": "5mb"
72
+ },
73
+ {
74
+ "type": "anyComponentStyle",
75
+ "maximumWarning": "500kb",
76
+ "maximumError": "3mb"
77
+ }
78
+ ]
79
+ }
80
+ },
81
+ "defaultConfiguration": ""
82
+ },
83
+ "serve": {
84
+ "builder": "@angular-devkit/build-angular:dev-server",
85
+ "options": {
86
+ "browserTarget": "cedar-embeddable-editor:build",
87
+ "port": 4400
88
+ },
89
+ "configurations": {
90
+ "production": {
91
+ "browserTarget": "cedar-embeddable-editor:build:production"
92
+ }
93
+ }
94
+ },
95
+ "extract-i18n": {
96
+ "builder": "@angular-devkit/build-angular:extract-i18n",
97
+ "options": {
98
+ "browserTarget": "cedar-embeddable-editor:build"
99
+ }
100
+ },
101
+ "test": {
102
+ "builder": "@angular-devkit/build-angular:karma",
103
+ "options": {
104
+ "main": "src/test.ts",
105
+ "polyfills": "src/polyfills.ts",
106
+ "tsConfig": "tsconfig.spec.json",
107
+ "karmaConfig": "karma.conf.js",
108
+ "assets": [
109
+ "src/favicon.ico",
110
+ "src/assets"
111
+ ],
112
+ "styles": [
113
+ "src/styles.scss",
114
+ "src/styles-own.scss"
115
+ ],
116
+ "scripts": [
117
+ "node_modules/@webcomponents/custom-elements/src/native-shim.js"
118
+ ]
119
+ }
120
+ },
121
+ "lint": {
122
+ "builder": "@angular-devkit/build-angular:tslint",
123
+ "options": {
124
+ "tsConfig": [
125
+ "tsconfig.app.json",
126
+ "tsconfig.spec.json",
127
+ "e2e/tsconfig.json"
128
+ ],
129
+ "exclude": [
130
+ "**/node_modules/**"
131
+ ]
132
+ }
133
+ },
134
+ "e2e": {
135
+ "builder": "@angular-devkit/build-angular:protractor",
136
+ "options": {
137
+ "protractorConfig": "e2e/protractor.conf.js",
138
+ "devServerTarget": "cedar-embeddable-editor:serve"
139
+ },
140
+ "configurations": {
141
+ "production": {
142
+ "devServerTarget": "cedar-embeddable-editor:serve:production"
143
+ }
144
+ }
145
+ }
146
+ }
147
+ }
148
+ },
149
+ "defaultProject": "cedar-embeddable-editor",
150
+ "cli": {
151
+ "analytics": false
152
+ }
153
+ }
@@ -0,0 +1,36 @@
1
+ // @ts-check
2
+ // Protractor configuration file, see link for more information
3
+ // https://github.com/angular/protractor/blob/master/lib/config.ts
4
+
5
+ const { SpecReporter, StacktraceOption } = require('jasmine-spec-reporter');
6
+
7
+ /**
8
+ * @type { import("protractor").Config }
9
+ */
10
+ exports.config = {
11
+ allScriptsTimeout: 11000,
12
+ specs: [
13
+ './src/**/*.e2e-spec.ts'
14
+ ],
15
+ capabilities: {
16
+ browserName: 'chrome'
17
+ },
18
+ directConnect: true,
19
+ baseUrl: 'http://localhost:4200/',
20
+ framework: 'jasmine',
21
+ jasmineNodeOpts: {
22
+ showColors: true,
23
+ defaultTimeoutInterval: 30000,
24
+ print: function() {}
25
+ },
26
+ onPrepare() {
27
+ require('ts-node').register({
28
+ project: require('path').join(__dirname, './tsconfig.json')
29
+ });
30
+ jasmine.getEnv().addReporter(new SpecReporter({
31
+ spec: {
32
+ displayStacktrace: StacktraceOption.PRETTY
33
+ }
34
+ }));
35
+ }
36
+ };
@@ -0,0 +1,23 @@
1
+ import { AppPage } from './app.po';
2
+ import { browser, logging } from 'protractor';
3
+
4
+ describe('workspace-project App', () => {
5
+ let page: AppPage;
6
+
7
+ beforeEach(() => {
8
+ page = new AppPage();
9
+ });
10
+
11
+ it('should display welcome message', () => {
12
+ page.navigateTo();
13
+ expect(page.getTitleText()).toEqual('cedar-embeddable-editor app is running!');
14
+ });
15
+
16
+ afterEach(async () => {
17
+ // Assert that there are no errors emitted from the browser
18
+ const logs = await browser.manage().logs().get(logging.Type.BROWSER);
19
+ expect(logs).not.toContain(jasmine.objectContaining({
20
+ level: logging.Level.SEVERE,
21
+ } as logging.Entry));
22
+ });
23
+ });
@@ -0,0 +1,11 @@
1
+ import { browser, by, element } from 'protractor';
2
+
3
+ export class AppPage {
4
+ navigateTo(): Promise<unknown> {
5
+ return browser.get(browser.baseUrl) as Promise<unknown>;
6
+ }
7
+
8
+ getTitleText(): Promise<string> {
9
+ return element(by.css('app-cedar-embeddable-editor .content span')).getText() as Promise<string>;
10
+ }
11
+ }
@@ -0,0 +1,14 @@
1
+ /* To learn more about this file see: https://angular.io/config/tsconfig. */
2
+ {
3
+ "extends": "../tsconfig.base.json",
4
+ "compilerOptions": {
5
+ "outDir": "../out-tsc/e2e",
6
+ "module": "commonjs",
7
+ "target": "es2018",
8
+ "types": [
9
+ "jasmine",
10
+ "jasminewd2",
11
+ "node"
12
+ ]
13
+ }
14
+ }
package/karma.conf.js ADDED
@@ -0,0 +1,32 @@
1
+ // Karma configuration file, see link for more information
2
+ // https://karma-runner.github.io/1.0/config/configuration-file.html
3
+
4
+ module.exports = function (config) {
5
+ config.set({
6
+ basePath: '',
7
+ frameworks: ['jasmine', '@angular-devkit/build-angular'],
8
+ plugins: [
9
+ require('karma-jasmine'),
10
+ require('karma-chrome-launcher'),
11
+ require('karma-jasmine-html-reporter'),
12
+ require('karma-coverage-istanbul-reporter'),
13
+ require('@angular-devkit/build-angular/plugins/karma')
14
+ ],
15
+ client: {
16
+ clearContext: false // leave Jasmine Spec Runner output visible in browser
17
+ },
18
+ coverageIstanbulReporter: {
19
+ dir: require('path').join(__dirname, './coverage/cedar-embeddable-editor'),
20
+ reports: ['html', 'lcovonly', 'text-summary'],
21
+ fixWebpackSourcePaths: true
22
+ },
23
+ reporters: ['progress', 'kjhtml'],
24
+ port: 9876,
25
+ colors: true,
26
+ logLevel: config.LOG_INFO,
27
+ autoWatch: true,
28
+ browsers: ['Chrome'],
29
+ singleRun: false,
30
+ restartOnFileChange: true
31
+ });
32
+ };
package/license.txt ADDED
@@ -0,0 +1,26 @@
1
+ Copyright (c) 2023, The Board of Trustees of Leland Stanford Junior University
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without modification, are
5
+ permitted provided that the following conditions are met:
6
+
7
+ 1. Redistributions of source code must retain the above copyright notice, this list of
8
+ conditions and the following disclaimer.
9
+
10
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list
11
+ of conditions and the following disclaimer in the documentation and/or other materials
12
+ provided with the distribution.
13
+
14
+ THIS SOFTWARE IS PROVIDED BY The Board of Trustees of Leland Stanford Junior University
15
+ ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
17
+ EVENT SHALL The Board of Trustees of Leland Stanford Junior University OR CONTRIBUTORS BE
18
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
20
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
21
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22
+ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23
+
24
+ The views and conclusions contained in the software and documentation are those of the
25
+ authors and should not be interpreted as representing official policies, either expressed
26
+ or implied, of The Board of Trustees of Leland Stanford Junior University.