|
48 | 48 | return (returnCode ? code : ''); |
49 | 49 | } |
50 | 50 |
|
| 51 | + /** |
| 52 | + * Markdown Caching for when [load-only-once] is used. |
| 53 | + */ |
| 54 | + var markdownCache = []; |
| 55 | + var maxCacheSize = 100; |
| 56 | + |
| 57 | + function saveMarkdownToCache(url, content, errorMessage) { |
| 58 | + if (markdownCache.length > maxCacheSize) { |
| 59 | + markdownCache.length = 0; // Clear array |
| 60 | + } |
| 61 | + for (var n = 0, m = markdownCache.length; n < m; n++) { |
| 62 | + if (url === markdownCache[n].url) { |
| 63 | + return; // Already saved |
| 64 | + } |
| 65 | + } |
| 66 | + markdownCache.push({ url:url, content:content, errorMessage:errorMessage }); |
| 67 | + } |
| 68 | + |
| 69 | + function getMarkdownFromCache(url) { |
| 70 | + for (var n = 0, m = markdownCache.length; n < m; n++) { |
| 71 | + if (url === markdownCache[n].url) { |
| 72 | + return markdownCache[n]; |
| 73 | + } |
| 74 | + } |
| 75 | + return null; |
| 76 | + } |
| 77 | + |
51 | 78 | /** |
52 | 79 | * DataFormsJS <markdown-content> Control |
53 | 80 | */ |
|
65 | 92 | linkTarget: null, |
66 | 93 | linkRel: null, |
67 | 94 | linkRootUrl: null, |
| 95 | + loadOnlyOnce: false, |
68 | 96 | }, |
69 | 97 |
|
70 | 98 | /** |
|
148 | 176 | }, |
149 | 177 |
|
150 | 178 | fetch: function (element) { |
| 179 | + // Option to load markdown from cache rather than fetching each time. |
| 180 | + if (this.loadOnlyOnce) { |
| 181 | + var cache = getMarkdownFromCache(this.url); |
| 182 | + if (cache) { |
| 183 | + this.content = cache.content; |
| 184 | + this.errorMessage = cache.errorMessage; |
| 185 | + markdownContent.render.call(this, element); |
| 186 | + return; |
| 187 | + } |
| 188 | + } |
| 189 | + |
151 | 190 | // Show loading screen |
152 | 191 | if (this.loadingSelector) { |
153 | 192 | var loading = document.querySelector(this.loadingSelector); |
|
172 | 211 | var errorMessage = 'Error loading markdown content from [' + url + ']. Error: ' + error; |
173 | 212 | control.errorMessage = errorMessage; |
174 | 213 | markdownContent.render.call(control, element); |
| 214 | + }) |
| 215 | + .finally(function() { |
| 216 | + if (control.loadOnlyOnce) { |
| 217 | + saveMarkdownToCache(url, control.content, control.errorMessage); |
| 218 | + } |
175 | 219 | }); |
176 | 220 | }, |
177 | 221 |
|
|
0 commit comments