Skip to content
Snippets Groups Projects
Commit 298d2a2b authored by Anthony's avatar Anthony
Browse files

Merge annotation video into mui 5

parents afe3a3a6 6233d1d6
No related branches found
No related tags found
1 merge request!19Draft: Merge video support into mui5
Pipeline #1660 failed
Showing
with 339 additions and 14 deletions
dist/ dist/
coverage/ coverage/
node_modules/ node_modules/
package-lock.json
*.log *.log
*.tgz *.tgz
/.idea/
upstream_tests:
image: ghcr.io/puppeteer/puppeteer:latest
before_script:
- npm ci
- npm run build
script:
- npm run test:ci
artifacts:
when: always
paths:
- junit.xml
reports:
junit: junit.xml
## Mirador with support for displaying annotations on videos
### Project
https://dh.l.u-tokyo.ac.jp/activity/iiif/video-annotation
### Demo
- https://dzkimgs.l.u-tokyo.ac.jp/videos/m3/cat_video.html
- https://dzkimgs.l.u-tokyo.ac.jp/videos/m3/video.html
### Manifest Sample
- https://dzkimgs.l.u-tokyo.ac.jp/videos/cat2020/manifest.json
- https://dzkimgs.l.u-tokyo.ac.jp/videos/iiif_in_japan_2017/manifest.json
### Prebuilt
https://dzkimgs.l.u-tokyo.ac.jp/videos/m3/mirador.min.js
### License
This project is dual-licensed under the Apache License 2.0 and the MIT license. See [LICENSE](LICENSE) for details.
---
⚠️ This project is for Mirador 3, the latest version of Mirador. For Mirador 2, please see [ProjectMirador/mirador2](https://github.com/projectmirador/mirador2) or legacy documentation on the [Mirador 2 wiki](https://github.com/ProjectMirador/mirador-2-wiki/wiki). Please note that the community's focus is on Mirador 3, and are unlikely to accept pull requests or provide support for Mirador 2. ⚠️ This project is for Mirador 3, the latest version of Mirador. For Mirador 2, please see [ProjectMirador/mirador2](https://github.com/projectmirador/mirador2) or legacy documentation on the [Mirador 2 wiki](https://github.com/ProjectMirador/mirador-2-wiki/wiki). Please note that the community's focus is on Mirador 3, and are unlikely to accept pull requests or provide support for Mirador 2.
# Mirador # Mirador
![Node.js CI](https://github.com/ProjectMirador/mirador/workflows/Node.js%20CI/badge.svg) [![codecov](https://codecov.io/gh/ProjectMirador/mirador/branch/master/graph/badge.svg)](https://codecov.io/gh/ProjectMirador/mirador) ![Node.js CI](https://github.com/ProjectMirador/mirador/workflows/Node.js%20CI/badge.svg) [![codecov](https://codecov.io/gh/ProjectMirador/mirador/branch/master/graph/badge.svg)](https://codecov.io/gh/ProjectMirador/mirador)
......
{
"@context": "http://iiif.io/api/presentation/3/context.json",
"id": "https://preview.iiif.io/cookbook/master/recipe/0003-mvm-video/manifest.json",
"type": "Manifest",
"label": {
"en": [
"Video Example 3"
]
},
"items": [
{
"id": "https://preview.iiif.io/cookbook/master/recipe/0003-mvm-video/canvas",
"type": "Canvas",
"height": 360,
"width": 640,
"duration": 1801.055,
"items": [
{
"id": "https://preview.iiif.io/cookbook/master/recipe/0003-mvm-video/canvas/page",
"type": "AnnotationPage",
"items": [
{
"id": "https://preview.iiif.io/cookbook/master/recipe/0003-mvm-video/canvas/page/annotation",
"type": "Annotation",
"motivation": "painting",
"body": {
"id": "https://fixtures.iiif.io/video/indiana/30-minute-clock/medium/30-minute-clock.mp4",
"type": "Video",
"height": 360,
"width": 640,
"duration": 1801.055,
"format": "video/mp4"
},
"target": "https://preview.iiif.io/cookbook/master/recipe/0003-mvm-video/canvas"
}
]
}
]
}
]
}
\ No newline at end of file
{
"@context": "http://iiif.io/api/presentation/3/context.json",
"id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/manifest.json",
"type": "Manifest",
"label": { "en": [ "Video Example 3" ] },
"items": [
{
"id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video-annot/canvas",
"type": "Canvas",
"height": 360,
"width": 640,
"duration": 572.034,
"items": [
{
"id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video-annot/canvas/page",
"type": "AnnotationPage",
"items": [
{
"id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video-annot/canvas/page/annotation",
"type": "Annotation",
"motivation": "painting",
"body": {
"id": "https://fixtures.iiif.io/video/indiana/lunchroom_manners/high/lunchroom_manners_1024kb.mp4",
"type": "Video",
"height": 360,
"width": 480,
"duration": 572.034,
"format": "video/mp4"
},
"target": "https://iiif.io/api/cookbook/recipe/0003-mvm-video-annot/canvas"
}
]
}
],
"annotations": [
{
"id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2",
"type": "AnnotationPage",
"items": [
{
"id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2/anno-1",
"type": "Annotation",
"motivation": "commenting",
"body": {
"type": "TextualBody",
"language": "de",
"format": "text/plain",
"value": "Göttinger Marktplatz mit Gänseliesel Brunnen"
},
"target": "https://iiif.io/api/cookbook/recipe/0003-mvm-video-annot/canvas/page/annotation"
}
]
}
]
}
]
}
{
"@context": "http://iiif.io/api/presentation/3/context.json",
"id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/manifest.json",
"type": "Manifest",
"label": {
"en": [
"Lunchroom Manners"
]
},
"items": [
{
"id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas",
"type": "Canvas",
"height": 360,
"width": 480,
"duration": 572.034,
"items": [
{
"id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page",
"type": "AnnotationPage",
"items": [
{
"id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page/annotation1",
"type": "Annotation",
"motivation": "painting",
"body": {
"id": "https://fixtures.iiif.io/video/indiana/lunchroom_manners/high/lunchroom_manners_1024kb.mp4",
"type": "Video",
"height": 360,
"width": 480,
"duration": 572.034,
"format": "video/mp4"
},
"target": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas"
}
]
}
],
"annotations": [
{
"id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page2",
"type": "AnnotationPage",
"items": [
{
"id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page2/a1",
"type": "Annotation",
"motivation": "supplementing",
"body": {
"id": "https://fixtures.iiif.io/video/indiana/lunchroom_manners/lunchroom_manners.vtt",
"format": "text/vtt",
"language": "en"
},
"target": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas"
}
]
}
]
}
]
}
{
"@context": "http://iiif.io/api/presentation/3/context.json",
"id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/manifest.json",
"type": "Manifest",
"label": {
"en": [
"Lunchroom Manners"
]
},
"items": [
{
"id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas",
"type": "Canvas",
"height": 360,
"width": 480,
"duration": 572.034,
"items": [
{
"id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page",
"type": "AnnotationPage",
"items": [
{
"id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page/annotation1",
"type": "Annotation",
"motivation": "painting",
"body": {
"id": "https://fixtures.iiif.io/video/indiana/lunchroom_manners/high/lunchroom_manners_1024kb.mp4",
"type": "Video",
"height": 360,
"width": 480,
"duration": 572.034,
"format": "video/mp4"
},
"target": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas"
}
]
}
],
"annotations": [
{
"id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page2",
"type": "AnnotationPage",
"items": [
{
"id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page2/a1",
"type": "Annotation",
"motivation": "supplementing",
"body": [
{
"id": "https://fixtures.iiif.io/video/indiana/lunchroom_manners/lunchroom_manners.vtt#fr",
"format": "text/vtt",
"language": "fr"
},
{
"id": "https://fixtures.iiif.io/video/indiana/lunchroom_manners/lunchroom_manners.vtt#en",
"format": "text/vtt",
"language": "en"
}
],
"target": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas"
},
{
"id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page2/a1",
"type": "Annotation",
"motivation": "supplementing",
"body": {
"id": "https://fixtures.iiif.io/video/indiana/lunchroom_manners/lunchroom_manners.vtt#ru",
"format": "text/vtt",
"language": "ru"
},
"target": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas"
}
]
}
]
}
]
}
{
"@context": "http://iiif.io/api/presentation/3/context.json",
"id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/manifest.json",
"type": "Manifest",
"label": {
"en": [
"Lunchroom Manners"
]
},
"items": [
{
"id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas",
"type": "Canvas",
"height": 360,
"width": 480,
"duration": 572.034,
"items": [
{
"id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page",
"type": "AnnotationPage",
"items": [
{
"id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page/annotation1",
"type": "Annotation",
"motivation": "painting",
"body": {
"id": "https://fixtures.iiif.io/video/indiana/lunchroom_manners/high/lunchroom_manners_1024kb.mp4",
"type": "Video",
"height": 360,
"width": 480,
"duration": 572.034,
"format": "video/mp4"
},
"target": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas"
}
]
}
],
"annotations": [
{
"id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page2",
"type": "AnnotationPage",
"items": [
{
"id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page2/a1",
"type": "Annotation",
"motivation": "supplementing",
"body": [
{
"id": "https://fixtures.iiif.io/video/indiana/lunchroom_manners/lunchroom_manners.vtt#fr",
"format": "text/vtt",
"language": "fr"
},
{
"id": "https://fixtures.iiif.io/video/indiana/lunchroom_manners/lunchroom_manners.vtt#en",
"format": "text/vtt",
"language": "en"
}
],
"target": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas"
}
]
}
]
}
]
}
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="theme-color" content="#000000"> <meta name="theme-color" content="#000000">
<title>Mirador</title> <title>Mirador</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500">
</head> </head>
<body> <body>
<div id="mirador" style="position: absolute; top: 0; bottom: 0; left: 0; right: 0;"></div> <div id="mirador" style="position: absolute; top: 0; bottom: 0; left: 0; right: 0;"></div>
......
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="theme-color" content="#000000"> <meta name="theme-color" content="#000000">
<title>Mirador</title> <title>Mirador</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500">
</head> </head>
<body> <body>
<div id="mirador" style="position: absolute; top: 0; bottom: 0; left: 0; right: 0;"></div> <div id="mirador" style="position: absolute; top: 0; bottom: 0; left: 0; right: 0;"></div>
......
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="theme-color" content="#000000"> <meta name="theme-color" content="#000000">
<title>Mirador</title> <title>Mirador</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500">
</head> </head>
<body> <body>
<div id="mirador" style="position: absolute; top: 0; bottom: 0; left: 0; right: 0;"></div> <div id="mirador" style="position: absolute; top: 0; bottom: 0; left: 0; right: 0;"></div>
......
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="theme-color" content="#000000"> <meta name="theme-color" content="#000000">
<title>Mirador</title> <title>Mirador</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500">
</head> </head>
<body> <body>
<div id="mirador" style="position: absolute; top: 0; bottom: 0; left: 0; right: 0;"></div> <div id="mirador" style="position: absolute; top: 0; bottom: 0; left: 0; right: 0;"></div>
......
...@@ -25,7 +25,6 @@ ...@@ -25,7 +25,6 @@
} }
</style> </style>
<title>Mirador</title> <title>Mirador</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500">
</head> </head>
<body> <body>
<h1>This is the first instance</h1> <h1>This is the first instance</h1>
......
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="theme-color" content="#000000"> <meta name="theme-color" content="#000000">
<title>Mirador</title> <title>Mirador</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500">
</head> </head>
<body> <body>
<div id="mirador" style="position: absolute; top: 0; bottom: 0; left: 0; right: 0;"></div> <div id="mirador" style="position: absolute; top: 0; bottom: 0; left: 0; right: 0;"></div>
......
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="theme-color" content="#000000"> <meta name="theme-color" content="#000000">
<title>Mirador</title> <title>Mirador</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500">
</head> </head>
<body> <body>
<div id="mirador" style="position: absolute; top: 0; bottom: 0; left: 0; right: 0;"></div> <div id="mirador" style="position: absolute; top: 0; bottom: 0; left: 0; right: 0;"></div>
......
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="theme-color" content="#000000"> <meta name="theme-color" content="#000000">
<title>Mirador - Level 0</title> <title>Mirador - Level 0</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500">
</head> </head>
<body> <body>
<div id="mirador" style="position: absolute; top: 0; bottom: 0; left: 0; right: 0;"></div> <div id="mirador" style="position: absolute; top: 0; bottom: 0; left: 0; right: 0;"></div>
......
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="theme-color" content="#000000"> <meta name="theme-color" content="#000000">
<title>Mirador</title> <title>Mirador</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500">
</head> </head>
<body> <body>
<div id="mirador" style="position: absolute; top: 0; bottom: 0; left: 0; right: 0;"></div> <div id="mirador" style="position: absolute; top: 0; bottom: 0; left: 0; right: 0;"></div>
......
...@@ -27,7 +27,6 @@ ...@@ -27,7 +27,6 @@
position: relative; position: relative;
} }
</style> </style>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500">
</head> </head>
<body> <body>
<h1>This is the first instance dir="rtl"</h1> <h1>This is the first instance dir="rtl"</h1>
......
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="theme-color" content="#000000"> <meta name="theme-color" content="#000000">
<title>Mirador</title> <title>Mirador</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500">
</head> </head>
<body> <body>
<div id="mirador" style="position: absolute; top: 0; bottom: 0; left: 0; right: 0;"></div> <div id="mirador" style="position: absolute; top: 0; bottom: 0; left: 0; right: 0;"></div>
......
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="theme-color" content="#000000"> <meta name="theme-color" content="#000000">
<title>Mirador - Table of contents</title> <title>Mirador - Table of contents</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500">
</head> </head>
<body> <body>
<div id="mirador" style="position: absolute; top: 0; bottom: 0; left: 0; right: 0;"></div> <div id="mirador" style="position: absolute; top: 0; bottom: 0; left: 0; right: 0;"></div>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment