<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Annotorious | Firebase Demo</title> <link href="https://fonts.googleapis.com/css?family=Lato&display=swap" rel="stylesheet"> <style> html, body { padding:20px; margin:0px; } p.caption { font-family:Arial, Helvetica, sans-serif; color:#8f8f8f; } p.caption a { color:#3f3f3f; } </style> <script src="https://recogito.github.io/annotorious/annotorious.min.js"></script> <script src="https://www.gstatic.com/firebasejs/7.14.3/firebase-app.js"></script> <script src="https://www.gstatic.com/firebasejs/7.14.3/firebase-firestore.js"></script> <script> // Firebase will auto-generate this config for you when you create your app. // Just paste your own settings in here. var firebaseConfig = { apiKey: "-- your firebase api key here --", authDomain: "-- your authdomain here --", databaseURL: "-- your database url --", projectId: "-- your project id --", storageBucket: "-- your storage bucket --", messagingSenderId: "...", appId: "..." }; firebase.initializeApp(firebaseConfig); var db = firebase.firestore(); // Helper to find a Firebase doc by annotation ID var findById = function(id) { var query = db.collection('annotations').where('id', '==', id); return query.get().then(function(querySnapshot) { return query.docs[0]; }); } window.onload = function() { var image = document.getElementById('hallstatt'); var anno = Annotorious.init({ image }); // Load annotations for this image db.collection('annotations').where('target.source', '==', image.src).get().then(function(querySnapshot) { var annotations = querySnapshot.docs.map(function(doc) { return doc.data() }); anno.setAnnotations(annotations); }); anno.on('createAnnotation', function(a) { db.collection('annotations').add(a).then(function() { console.log('Stored annotation'); }); }); anno.on('updateAnnotation', function(annotation, previous) { findById(previous.id).then(function(doc) { doc.ref.update(annotation); }); }); anno.on('deleteAnnotation', function(annotation) { findById(annotation.id).then(function(doc) { doc.ref.delete(); }); }); // Bonus coolness: listen for realtime updates on this image // and roll your own GoogleDrive-like realtime collab! db.collection('annotations').where('target.source', '==', image.src).onSnapshot(function(querySnapshot) { querySnapshot.docChanges().forEach(function(change) { console.log(change.type, change.doc.data()); }); }); } </script> </head> <body> <div id="content"> <img id="hallstatt" src="https://recogito.github.io/annotorious/640px-Hallstatt.jpg"> <p class="caption"> Sample image source: <a href="http://commons.wikimedia.org/wiki/File:Hallstatt_300.jpg">Hallstatt, Austria</a>, by Nick Csakany/Wikimedia Commons. Public Domain. </p> </div> </body> </html>