ref: renderTemplate

This commit is contained in:
relikd
2024-02-29 02:28:16 +01:00
parent 93f16e2dc9
commit 105f82ef50
2 changed files with 30 additions and 23 deletions

View File

@@ -84,6 +84,7 @@
<div>$IMG</div> <div>$IMG</div>
<p>$DESCRIPTION</p> <p>$DESCRIPTION</p>
</div> </div>
<a class="screenshot" href="$URL" target="_blank"><img src="$URL"></a>
</div> </div>
<div id="overlay" hidden> <div id="overlay" hidden>

View File

@@ -161,10 +161,10 @@ function searchIPA(restorePage) {
*/ */
function urlsToImgs(list) { function urlsToImgs(list) {
const template = getTemplate('.screenshot');
var rv = '<div class="carousel">'; var rv = '<div class="carousel">';
for (var i = 0; i < list.length; i++) { for (var i = 0; i < list.length; i++) {
const url = list[i]; rv += renderTemplate(template, { $URL: list[i] });
rv += '<img src="' + url + '">';
} }
return rv + '</div>'; return rv + '</div>';
} }
@@ -201,16 +201,17 @@ function randomIPA() {
imgStr += '<p>iPad Screenshots:</p>' + urlsToImgs(imgs2); imgStr += '<p>iPad Screenshots:</p>' + urlsToImgs(imgs2);
} }
output.innerHTML += getTemplate('.itunes') output.innerHTML += renderTemplate(getTemplate('.itunes'), {
.replace('$VERSION', info.version) $VERSION: info.version,
.replace('$PRICE', info.formattedPrice) $PRICE: info.formattedPrice,
.replace('$RATING', info.averageUserRating.toFixed(1)) $RATING: info.averageUserRating.toFixed(1),
.replace('$ADVISORY', info.contentAdvisoryRating) $ADVISORY: info.contentAdvisoryRating,
.replace('$DATE', info.currentVersionReleaseDate) $DATE: info.currentVersionReleaseDate,
.replace('$GENRES', (info.genres || []).join(', ')) $GENRES: (info.genres || []).join(', '),
.replace('$URL', info.trackViewUrl) $URL: info.trackViewUrl,
.replace('$IMG', imgStr) $IMG: imgStr,
.replace('$DESCRIPTION', info.description); $DESCRIPTION: info.description,
});
}); });
} }
@@ -254,6 +255,10 @@ function getTemplate(name) {
return document.getElementById('templates').querySelector(name).outerHTML; return document.getElementById('templates').querySelector(name).outerHTML;
} }
function renderTemplate(template, values) {
return template.replace(/\$[A-Z]+/g, function (x) { return values[x]; });
}
function validUrl(url) { function validUrl(url) {
return encodeURI(url).replace('#', '%23').replace('?', '%3F'); return encodeURI(url).replace('#', '%23').replace('?', '%3F');
} }
@@ -280,17 +285,18 @@ function entriesToStr(templateType, data) {
var rv = ''; var rv = '';
for (var i = 0; i < data.length; i++) { for (var i = 0; i < data.length; i++) {
const entry = entryToDict(DB[data[i]]); const entry = entryToDict(DB[data[i]]);
rv += template rv += renderTemplate(template, {
.replace('$IDX', data[i]) $IDX: data[i],
.replace('$IMG', entry.img_url) $IMG: entry.img_url,
.replace('$TITLE', (entry.title || '?').replace('<', '&lt;')) $TITLE: (entry.title || '?').replace('<', '&lt;'),
.replace('$VERSION', entry.version) $VERSION: entry.version,
.replace('$BUNDLEID', entry.bundleId) $BUNDLEID: entry.bundleId,
.replace('$MINOS', versionToStr(entry.minOS)) $MINOS: versionToStr(entry.minOS),
.replace('$PLATFORM', platformToStr(entry.platform)) $PLATFORM: platformToStr(entry.platform),
.replace('$SIZE', humanSize(entry.size)) $SIZE: humanSize(entry.size),
.replace('$URLNAME', entry.pathName.split('/').slice(-1)) // decodeURI $URLNAME: entry.pathName.split('/').slice(-1), // decodeURI
.replace('$URL', validUrl(entry.ipa_url)); $URL: validUrl(entry.ipa_url),
});
} }
return rv; return rv;
} }