From 26b7d108c85a3d2490e259f13e0edfdf8f29a09a Mon Sep 17 00:00:00 2001 From: Valvin Date: Sat, 8 Jun 2019 13:57:38 +0200 Subject: [PATCH 1/3] feat() : add sourceUrls options --- src/remark/models/slideshow.js | 47 ++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/src/remark/models/slideshow.js b/src/remark/models/slideshow.js index 9af23f99..c83277ad 100644 --- a/src/remark/models/slideshow.js +++ b/src/remark/models/slideshow.js @@ -63,6 +63,10 @@ function Slideshow (events, dom, options, callback) { if (options.sourceUrl) { loadFromUrl(options.sourceUrl, callback); } + else if (options.sourceUrls){ + console.log(options.sourceUrls) + loadFromUrls(options.sourceUrls, callback); + } else { loadFromString(options.source); if (typeof callback === 'function') { @@ -111,6 +115,49 @@ function Slideshow (events, dom, options, callback) { return xhr; } + + function loadFromUrls(urls, callback) { + + function xhrOnload(e) { + if (this.readyState === 4) { + if (this.status === 200) { + if (options.source !== '') + options.source += '---\n'; + options.source += this.responseText.replace(/\r\n/g, '\n'); + this.status = true; + } else { + this.status = false; + throw Error(this.statusText); + } + } + } + + function xhrOnerror(e) { + this.status = false; + throw Error(this.statusText); + } + + options.source = ''; + var xhrs = []; + + for (var i =0 ; i < urls.length; i++) { + var url = urls[i]; + xhrs[i] = new dom.XMLHttpRequest(); + xhrs[i].open('GET', url, true); + xhrs[i].onload = xhrOnload; + xhrs[i].onerror = xhrOnerror; + xhrs[i].send(null); + } + //FIXME: trick to avoid synchronization + setTimeout(function(){ + loadFromString(options.source); + if (typeof callback === 'function') { + callback(self); + } + },2000); + + } + function update () { events.emit('resize'); } From ba7123d238adeaca76eb3c987749f3e0b6baf98b Mon Sep 17 00:00:00 2001 From: Valvin Date: Sat, 8 Jun 2019 13:59:52 +0200 Subject: [PATCH 2/3] fix(): linter issue --- src/remark/models/slideshow.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/remark/models/slideshow.js b/src/remark/models/slideshow.js index c83277ad..e8d370da 100644 --- a/src/remark/models/slideshow.js +++ b/src/remark/models/slideshow.js @@ -64,7 +64,6 @@ function Slideshow (events, dom, options, callback) { loadFromUrl(options.sourceUrl, callback); } else if (options.sourceUrls){ - console.log(options.sourceUrls) loadFromUrls(options.sourceUrls, callback); } else { From 327acf397ad4beace9fd809a8958b9d532fa6791 Mon Sep 17 00:00:00 2001 From: Valvin Date: Sat, 8 Jun 2019 21:25:31 +0200 Subject: [PATCH 3/3] fix(): load slides when upload finished without tricks --- src/remark/models/slideshow.js | 37 ++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/src/remark/models/slideshow.js b/src/remark/models/slideshow.js index e8d370da..f7dcdc45 100644 --- a/src/remark/models/slideshow.js +++ b/src/remark/models/slideshow.js @@ -114,46 +114,53 @@ function Slideshow (events, dom, options, callback) { return xhr; } - function loadFromUrls(urls, callback) { function xhrOnload(e) { if (this.readyState === 4) { if (this.status === 200) { - if (options.source !== '') - options.source += '---\n'; - options.source += this.responseText.replace(/\r\n/g, '\n'); - this.status = true; + options.sources[this.index] = this.responseText.replace(/\r\n/g, '\n') ; + options.loadingCompleted++; + if(options.loadingCompleted === urls.length) + xhrLoadSlides(); } else { - this.status = false; throw Error(this.statusText); } } } function xhrOnerror(e) { - this.status = false; + options.loadingCompleted++; throw Error(this.statusText); } - options.source = ''; + function xhrLoadSlides() { + for (var j = 0; j < urls.length; j++) { + if (j !== 0) + options.source += '---\n'; + options.source += options.sources[j]; + } + + loadFromString(options.source); + if (typeof callback === 'function') { + callback(self); + } + + } + var xhrs = []; + options.loadingCompleted = 0; + options.sources = []; for (var i =0 ; i < urls.length; i++) { var url = urls[i]; xhrs[i] = new dom.XMLHttpRequest(); + xhrs[i].index = i; xhrs[i].open('GET', url, true); xhrs[i].onload = xhrOnload; xhrs[i].onerror = xhrOnerror; xhrs[i].send(null); } - //FIXME: trick to avoid synchronization - setTimeout(function(){ - loadFromString(options.source); - if (typeof callback === 'function') { - callback(self); - } - },2000); }