From 20cecbcfa2dae26bf4de8ed5ecf079b621ac149e Mon Sep 17 00:00:00 2001
From: yflory <yann.flory@xwiki.com>
Date: Tue, 1 Dec 2020 18:18:16 +0100
Subject: [PATCH] Fix cached mediatags in pads

---
 www/common/media-tag.js         |  2 +-
 www/common/outer/cache-store.js |  2 ++
 www/pad/inner.js                | 11 ++++++++---
 3 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/www/common/media-tag.js b/www/common/media-tag.js
index c855df328..8f7276446 100644
--- a/www/common/media-tag.js
+++ b/www/common/media-tag.js
@@ -188,7 +188,7 @@ var factory = function () {
                 cfg.download.textDl + ' <b>(' + size  + 'MB)</b>';
         btn.addEventListener('click', function () {
             makeProgressBar(cfg, mediaObject);
-            var a = document.querySelectorAll('media-tag[src="'+mediaObject.tag.getAttribute('src')+'"] button[data-dl]');
+            var a = (cfg.body || document).querySelectorAll('media-tag[src="'+mediaObject.tag.getAttribute('src')+'"] button[data-dl]');
             for(var i = 0; i < a.length; i++) {
                 if (a[i] !== btn) { a[i].click(); }
             }
diff --git a/www/common/outer/cache-store.js b/www/common/outer/cache-store.js
index 6b6c8604e..cd88de6f6 100644
--- a/www/common/outer/cache-store.js
+++ b/www/common/outer/cache-store.js
@@ -87,5 +87,7 @@ define([
         cache.clear(cb);
     };
 
+    self.CryptPad_clearIndexedDB = S.clear;
+
     return S;
 });
diff --git a/www/pad/inner.js b/www/pad/inner.js
index 8a99b6101..f9b5dffb9 100644
--- a/www/pad/inner.js
+++ b/www/pad/inner.js
@@ -463,7 +463,9 @@ define([
         setTimeout(function() { // Just in case
             var tags = dom.querySelectorAll('media-tag:empty');
             Array.prototype.slice.call(tags).forEach(function(el) {
-                var mediaObject = MediaTag(el);
+                var mediaObject = MediaTag(el, {
+                    body: dom
+                });
                 $(el).on('keydown', function(e) {
                     if ([8, 46].indexOf(e.which) !== -1) {
                         $(el).remove();
@@ -473,14 +475,17 @@ define([
                 var observer = new MutationObserver(function(mutations) {
                     mutations.forEach(function(mutation) {
                         if (mutation.type === 'childList') {
-                            var list_values = [].slice.call(el.children);
-                            mediaTagMap[el.getAttribute('src')] = list_values;
+                            var list_values = slice(el.children)
+                                                .map(function (el) { return el.outerHTML; })
+                                                .join('');
+                            mediaMap[el.getAttribute('src')] = list_values;
                             if (mediaObject.complete) { observer.disconnect(); }
                         }
                     });
                 });
                 observer.observe(el, {
                     attributes: false,
+                    subtree: true,
                     childList: true,
                     characterData: false
                 });