Update posts metadata, configurations, finish PWA integration, fix issues

This commit is contained in:
octospacc 2024-04-02 18:05:15 +02:00
parent b98327bd1c
commit 124327d53d
9 changed files with 145 additions and 77 deletions

View File

@ -1,7 +1,7 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1"/>
{% assign title = '' %} {% assign title = '' %}
{% if page.layout == 'author' %} {% if page.layout == 'author' %}
@ -34,64 +34,64 @@
{% endif %} {% endif %}
<title>{{ title }}</title> <title>{{ title }}</title>
<meta name="description" content="{{ description }}"> <meta name="description" content="{{ description }}"/>
{% if page.tags %} {% if page.tags %}
<meta name="keywords" content="{{ page.tags | join: ', ' }}"> <meta name="keywords" content="{{ page.tags | join: ', ' }}"/>
{% endif %} {% endif %}
<!-- Social: Twitter --> <!-- Social: Twitter -->
<meta name="twitter:card" content="summary_large_image"> <meta name="twitter:card" content="summary_large_image"/>
<meta name="twitter:title" content="{{ title }}"> <meta name="twitter:title" content="{{ title }}"/>
<meta name="twitter:description" content="{{ description }}"> <meta name="twitter:description" content="{{ description }}"/>
{% if image contains '://' %} {% if image contains '://' %}
<meta property="twitter:image" content="{{ image }}"> <meta property="twitter:image" content="{{ image }}"/>
{% else %} {% else %}
<meta property="twitter:image" content="{{ image | prepend: site.url }}"> <meta property="twitter:image" content="{{ image | prepend: site.url }}"/>
{% endif %} {% endif %}
{% if site.twitter_username %} {% if site.twitter_username %}
<meta name="twitter:site" content="@{{ site.twitter_username }}"> <meta name="twitter:site" content="@{{ site.twitter_username }}"/>
{% endif %} {% endif %}
<!-- Social: Facebook / Open Graph --> <!-- Social: Facebook / Open Graph -->
<meta property="og:url" content="{{ url }}"> <meta property="og:url" content="{{ url }}"/>
<meta property="og:title" content="{{ title }}"> <meta property="og:title" content="{{ title }}"/>
<meta property="og:image" content="{{ image }}"> <meta property="og:image" content="{{ image }}"/>
<meta property="og:description" content="{{ description }}"> <meta property="og:description" content="{{ description }}"/>
<meta property="og:site_name" content="{{ site.title }}"> <meta property="og:site_name" content="{{ site.title }}"/>
<!-- Favicon --> <!-- Favicon -->
<link rel="shortcut icon" href="{{ site.baseurl }}/favicon.ico" type="image/x-icon" /> <link rel="shortcut icon" href="{{ site.baseurl }}/favicon.ico" type="image/x-icon"/>
<!-- Apple Touch Icons --> <!-- Apple Touch Icons -->
<link rel="apple-touch-icon" href="{{ site.baseurl }}/assets/img/icons/apple-touch-icon.png" /> <link rel="apple-touch-icon" href="{{ site.baseurl }}/assets/img/icons/apple-touch-icon.png"/>
<link rel="apple-touch-icon" sizes="57x57" href="/assets/img/icons/apple-touch-icon-57x57.png" /> <link rel="apple-touch-icon" sizes="57x57" href="/assets/img/icons/apple-touch-icon-57x57.png"/>
<link rel="apple-touch-icon" sizes="72x72" href="/assets/img/icons/apple-touch-icon-72x72.png" /> <link rel="apple-touch-icon" sizes="72x72" href="/assets/img/icons/apple-touch-icon-72x72.png"/>
<link rel="apple-touch-icon" sizes="114x114" href="/assets/img/icons/apple-touch-icon-114x114.png" /> <link rel="apple-touch-icon" sizes="114x114" href="/assets/img/icons/apple-touch-icon-114x114.png"/>
<link rel="apple-touch-icon" sizes="144x144" href="/assets/img/icons/apple-touch-icon-144x144.png" /> <link rel="apple-touch-icon" sizes="144x144" href="/assets/img/icons/apple-touch-icon-144x144.png"/>
<link rel="apple-touch-icon" sizes="60x60" href="/assets/img/icons/apple-touch-icon-60x60.png" /> <link rel="apple-touch-icon" sizes="60x60" href="/assets/img/icons/apple-touch-icon-60x60.png"/>
<link rel="apple-touch-icon" sizes="120x120" href="/assets/img/icons/apple-touch-icon-120x120.png" /> <link rel="apple-touch-icon" sizes="120x120" href="/assets/img/icons/apple-touch-icon-120x120.png"/>
<link rel="apple-touch-icon" sizes="76x76" href="/assets/img/icons/apple-touch-icon-76x76.png" /> <link rel="apple-touch-icon" sizes="76x76" href="/assets/img/icons/apple-touch-icon-76x76.png"/>
<link rel="apple-touch-icon" sizes="152x152" href="/assets/img/icons/apple-touch-icon-152x152.png" /> <link rel="apple-touch-icon" sizes="152x152" href="/assets/img/icons/apple-touch-icon-152x152.png"/>
<!-- Windows 8 Tile Icons --> <!-- Windows 8 Tile Icons -->
<meta name="application-name" content="{{ site.name }}"> <meta name="application-name" content="{{ site.name }}"/>
<meta name="msapplication-TileColor" content="#141414"> <meta name="msapplication-TileColor" content="#141414"/>
<meta name="msapplication-square70x70logo" content="smalltile.png" /> <meta name="msapplication-square70x70logo" content="smalltile.png"/>
<meta name="msapplication-square150x150logo" content="mediumtile.png" /> <meta name="msapplication-square150x150logo" content="mediumtile.png"/>
<meta name="msapplication-wide310x150logo" content="widetile.png" /> <meta name="msapplication-wide310x150logo" content="widetile.png"/>
<meta name="msapplication-square310x310logo" content="largetile.png" /> <meta name="msapplication-square310x310logo" content="largetile.png"/>
<!-- Android Lolipop Theme Color --> <!-- Android Lolipop Theme Color -->
<meta name="theme-color" content="#141414"> <meta name="theme-color" content="#141414"/>
<!-- Fonts --> <!-- Fonts -->
<link href="https://fonts.googleapis.com/css?family=Titillium+Web:300,400,700" rel="stylesheet"> <link href="https://fonts.googleapis.com/css?family=Titillium+Web:300,400,700" rel="stylesheet"/>
<link rel="stylesheet" href="{{ '/assets/css/styles.css' | prepend: site.baseurl }}"> <link rel="stylesheet" href="{{ '/assets/css/styles.css' | prepend: site.baseurl }}"/>
<link rel="canonical" href="{{ url }}"> <link rel="canonical" href="{{ url }}"/>
<link rel="alternate" type="application/rss+xml" title="{{ site.title }}" href="{{ '/feed.xml' | prepend: site.baseurl | prepend: site.url }}" /> <link rel="alternate" type="application/rss+xml" title="{{ site.title }}" href="{{ '/feed.xml' | prepend: site.baseurl | prepend: site.url }}"/>
<!-- Include extra styles --> <!-- Include extra styles -->
{% include extra-css.html %} {% include extra-css.html %}
@ -103,7 +103,8 @@
<script> <script>
window.site_config = { window.site_config = {
baseurl: "{{ site.baseurl }}", url: {{ site.url | jsonify }},
baseurl: {{ site.baseurl | jsonify }},
}; };
window.page_config = { window.page_config = {
software_data: {{ page.software_data | jsonify }}, software_data: {{ page.software_data | jsonify }},

View File

@ -109,15 +109,15 @@ layout: main
"@type": "WebPage", "@type": "WebPage",
"mainEntity": { "mainEntity": {
"@type": "Blog", "@type": "Blog",
"name": "{{ site.name }}", "name": {{ site.name | jsonify }},
"headline": "{{ site.title }}", "headline": {{ site.title | jsonify }},
"description": "{{ site.description }}", "description": {{ site.description | jsonify }},
"url": "{{ site.url }}{{site.baseurl}}/", "url": "{{ site.url }}{{site.baseurl}}/",
"inLanguage": "{{ site.language }}", "inLanguage": "{{ site.language }}",
"isFamilyFriendly": "true", "isFamilyFriendly": "true",
"creator": { "creator": {
"@type": "Organization", "@type": "Organization",
"name": "{{ site.name }}", "name": {{ site.name | jsonify }},
"url": "{{ site.url }}{{site.baseurl}}/", "url": "{{ site.url }}{{site.baseurl}}/",
"sameAs": [ "sameAs": [
{{ social_urls | split: "," | join: "," }} {{ social_urls | split: "," | join: "," }}
@ -131,9 +131,9 @@ layout: main
{% assign author = site.authors | where: "name", post.author | first %} {% assign author = site.authors | where: "name", post.author | first %}
{ {
"@type": "BlogPosting", "@type": "BlogPosting",
"name": "{{ post.title }}", "name": {{ post.title | jsonify }},
"headline": "{{ post.subtitle }}", "headline": {{ post.subtitle | jsonify }},
"description": "{{ post.description }}", "description": {{ post.description | jsonify }},
"image": "{{ post.image }}", "image": "{{ post.image }}",
"url": "{{ post.url | prepend: site.baseurl | prepend: site.url }}", "url": "{{ post.url | prepend: site.baseurl | prepend: site.url }}",
"inLanguage": "{{ site.language }}", "inLanguage": "{{ site.language }}",
@ -142,12 +142,12 @@ layout: main
"dateModified": "{{ post.date | date: '%Y-%m-%d/' }}", "dateModified": "{{ post.date | date: '%Y-%m-%d/' }}",
"author": { "author": {
"@type": "Person", "@type": "Person",
"name": "{{ author.display_name }}", "name": {{ author.display_name | jsonify }},
"url": "{{ author.url | prepend: site.baseurl | prepend: site.url }}" "url": "{{ author.url | prepend: site.baseurl | prepend: site.url }}"
}, },
"publisher": { "publisher": {
"@type": "Organization", "@type": "Organization",
"name": "{{ site.name }}", "name": {{ site.name | jsonify }},
"url": "{{ site.url }}{{site.baseurl}}/", "url": "{{ site.url }}{{site.baseurl}}/",
"logo": { "logo": {
"@type": "ImageObject", "@type": "ImageObject",

View File

@ -123,9 +123,9 @@
{ {
"@context": "http://schema.org", "@context": "http://schema.org",
"@type": "BlogPosting", "@type": "BlogPosting",
"name": "{{ page.title }}", "name": {{ page.title | jsonify }},
"headline": "{{ page.subtitle }}", "headline": {{ page.subtitle | jsonify }},
"description": "{{ page.description }}", "description": {{ page.description | jsonify }},
"image": "{{ page.image }}", "image": "{{ page.image }}",
"url": "{{ page.url | prepend: site.baseurl | prepend: site.url }}", "url": "{{ page.url | prepend: site.baseurl | prepend: site.url }}",
"articleBody": "{{ content | strip_html | xml_escape | textilize }}", "articleBody": "{{ content | strip_html | xml_escape | textilize }}",
@ -136,13 +136,13 @@
"dateModified": "{{ page.date | date: '%Y-%m-%d/' }}", "dateModified": "{{ page.date | date: '%Y-%m-%d/' }}",
"author": { "author": {
"@type": "Person", "@type": "Person",
"name": "{{ author.display_name }}", "name": {{ author.display_name | jsonify }},
{% if author.photo %} {% if author.photo %}
"image": "{{ author.photo }}", "image": "{{ author.photo }}",
{% else %} {% else %}
"image": {{ "/assets/img/user.jpg" | prepend: site.baseurl | prepend: site.url }}, "image": {{ "/assets/img/user.jpg" | prepend: site.baseurl | prepend: site.url }},
{% endif %} {% endif %}
"jobTitle": "{{ author.position }}", "jobTitle": {{ author.position | jsonify }},
"url": "{{ author.url | prepend: site.baseurl | prepend: site.url }}", "url": "{{ author.url | prepend: site.baseurl | prepend: site.url }}",
"sameAs": [ "sameAs": [
{{ author_urls | split: "," | join: "," }} {{ author_urls | split: "," | join: "," }}
@ -150,7 +150,7 @@
}, },
"publisher": { "publisher": {
"@type": "Organization", "@type": "Organization",
"name": "{{ site.name }}", "name": {{ site.name | jsonify }},
"url": "{{ site.url }}{{site.baseurl}}/", "url": "{{ site.url }}{{site.baseurl}}/",
"logo": { "logo": {
"@type": "ImageObject", "@type": "ImageObject",

View File

@ -18,7 +18,7 @@ software_data:
# embed_url: "https://html-classic.itch.zone/html/4531906/index.html" # embed_url: "https://html-classic.itch.zone/html/4531906/index.html"
release : release :
source : "aftermarket" source : "aftermarket"
type : "release v1.0.0" type : "release 1.0.0"
--- ---
## About the game ## About the game

View File

@ -14,10 +14,16 @@ tags:
- "precision" - "precision"
- "levels" - "levels"
- "reflexes" - "reflexes"
- "Unity"
author: "octobot" author: "octobot"
software_data: software_data:
platform : "web" platform : "web"
frame_url : "https://gamingshitposting.github.io/ext-bin-1/geometrylite.io/game/geometry-dash-full-version/index.html" frame_url : "https://gamingshitposting.github.io/ext-bin-1/geometrylite.io/game/geometry-dash-full-version/index.html"
screen:
orientation: "landscape"
release :
source : "homebrew"
type : "porting"
--- ---
## About the game ## About the game
@ -35,4 +41,5 @@ Since its initial release, Geometry Dash Lite has amassed a dedicated fanbase an
## Resources ## Resources
* Official page of the game: <https://play.google.com/store/apps/details?id=com.robtopx.geometryjumplite> * Official page of the game: <https://play.google.com/store/apps/details?id=com.robtopx.geometryjumplite>
* Page of the HTML5 porting: <https://geometrylite.io/geometry-dash-full-version>

View File

@ -50,3 +50,10 @@ iframe#software-embed-frame
border: none; border: none;
overflow: hidden; overflow: hidden;
} }
#ConfigurationCustomizerElem > ul > li {
display: block;
}
#ConfigurationCustomizerElem > ul[data-section]:before {
font-weight: bold;
}

View File

@ -5,9 +5,12 @@ var prefsIndex = 'SalaMuseoGames/Prefs/v1';
var Prefs = { var Prefs = {
pwaManifests: { default: true, name: "Allow installing the site as a PWA" }, pwaManifests: { default: true, name: "Allow installing the site as a PWA" },
softwarePwaManifests: { default: true, dependsOn: "pwaManifests", name: "Allow installing individual games as PWAs" }, softwarePwaManifests: { default: true, dependsOn: "pwaManifests", name: "Allow installing individual games as PWAs" },
// offlineCache: { default: true, name: "Cache site pages and game files offline", summary: "Allow faster site navigation, and gameplay without an Internet connection, by caching unlimited data offline. Disable if you want to save storage. (Note that game data for some emulators is always cached regardless of this setting, you can manage their data from their embedded UI.)" },
// dataExport: { onclick: (function(){}), section: "data", name: "Export configuration and gamesaves" },
// dataImport: { onclick: (function(){}), section: "data", name: "Import configuration and gamesaves" },
// featurePreview: { default: false, name: "Use experimental features before their release", summary: "If some new site features or adjustments are scheduled to release soon, you might be chosen to preview them before they are officially available" }, // featurePreview: { default: false, name: "Use experimental features before their release", summary: "If some new site features or adjustments are scheduled to release soon, you might be chosen to preview them before they are officially available" },
developerMode: { default: false, name: "Developer Mode", summary: "Show options and enable features dedicated to developers" }, developerMode: { default: false, name: "Developer Mode", summary: "Show options and enable features dedicated to developers" },
allowDownloads: { default: false, section: "developer", name: "Allow downloads where available" }, allowDownloads: { default: false, section: "developer", name: "Allow downloads where available", summary: "Only for developers." },
}; };
function SavePrefs () { function SavePrefs () {
@ -15,7 +18,7 @@ function SavePrefs () {
Object.keys(Prefs).forEach(function(key){ Object.keys(Prefs).forEach(function(key){
items[key] = Prefs[key].value; items[key] = Prefs[key].value;
}); });
localStorage.setItem(prefsIndex, items); localStorage.setItem(prefsIndex, JSON.stringify(items));
} }
var storedPrefs = JSON.parse(localStorage.getItem(prefsIndex)) || {}; var storedPrefs = JSON.parse(localStorage.getItem(prefsIndex)) || {};
@ -25,27 +28,43 @@ Object.keys(Prefs).forEach(function(key){
}); });
var PrefsSections = { var PrefsSections = {
developer: { name: "Developer", visible: Prefs.developerMode.value }, data: { name: "Data management", visible: true },
developer: { name: "Development", visible: Prefs.developerMode.value },
}; };
if (ConfigurationCustomizerElem) { var configElem = document.querySelector('#ConfigurationCustomizer');
var rootElem = ConfigurationCustomizerElem; if (configElem) {
rootElem.innerHTML = null; var styleElem = document.createElement('style');
configElem.innerHTML = null;
configElem.appendChild(styleElem);
Object.keys(Object.assign({ default: null }, PrefsSections)).forEach(function(key){ Object.keys(Object.assign({ default: null }, PrefsSections)).forEach(function(key){
var section = PrefsSections[key];
var sectionElem = document.createElement('ul'); var sectionElem = document.createElement('ul');
sectionElem.dataset.section = key; sectionElem.dataset.section = key;
sectionElem.style.display = (PrefsSections[key] && !PrefsSections[key].visible ? 'none' : ''); sectionElem.style.display = (section && !section.visible ? 'none' : '');
rootElem.appendChild(sectionElem); styleElem.innerHTML += `#ConfigurationCustomizerElem > ul[data-section="${key}"]:before { content: "${(section && section.name) || ''}" }`;
configElem.appendChild(sectionElem);
}); });
Object.keys(Prefs).forEach(function(key){ Object.keys(Prefs).forEach(function(key){
// TODO: finish HTML
var pref = Prefs[key]; var pref = Prefs[key];
var prefElem = document.createElement('p'); var prefElem = document.createElement('li');
prefElem.innerHTML += `<label><input type="checkbox" ${pref.value && 'checked'} disabled/> ${pref.name}</label><br/><small>${pref.summary || ''}</small>`; var prefType = (pref.default === undefined && pref.onclick ? 'button' : 'checkbox');
rootElem.querySelector(`[data-section="${pref.section || 'default'}"]`).appendChild(prefElem); prefElem.dataset.pref = key;
prefElem.innerHTML += `<label>
<input type="${prefType}" ${pref.value && 'checked'} value="${prefType === 'button' && pref.name}"/>
${prefType !== 'button' ? pref.name : ''}
<br/><small>${pref.summary || ''}</small>
</label>`;
prefElem.querySelector('input').onclick = pref.onclick;
prefElem.querySelector('input').onchange = function(){
Prefs[key].value = this.checked;
SavePrefs();
};
configElem.querySelector(`[data-section="${pref.section || 'default'}"]`).appendChild(prefElem);
}); });
} }
window.SalaMuseoGames.Prefs = Prefs; window.SalaMuseoGames.Prefs = Prefs;
SavePrefs();
})(); })();

View File

@ -1,20 +1,56 @@
(function(){ (function(){
return // TODO finish
var Prefs = SalaMuseoGames.Prefs; var Prefs = SalaMuseoGames.Prefs;
var Software = SalaMuseoGames.page.software_data;
var Screen = (Software && Software.screen);
var Site = SalaMuseoGames.site;
if (Prefs.pwaManifests.value) { if (Prefs.pwaManifests.value) {
var manifestData; var manifestData;
if (Prefs.softwarePwaManifests.value && SalaMuseoGames.page.software_data) { if (Prefs.softwarePwaManifests.value && Software) {
// TODO add individual manifests on games pages // specific manifests on games pages
manifestData = {
name: document.querySelector('.post-title').textContent,
description: document.querySelector('.post-subtitle').textContent,
start_url: (location.href + ''), // TODO Url parameters to make the game open fullscreen and automatically start
display: ((Screen && Screen.display) || "standalone"),
orientation: ((Screen && Screen.orientation) || "any"),
};
} else { } else {
// TODO add site manifest on global pages // site manifest on global pages
var ldData;
for (var elem of document.querySelectorAll('script[type="application/ld+json"]')) {
// extract site data from JSON-LD data blocks
var data = JSON.parse(elem.innerHTML);
if (data['@type'] === 'Organization') {
ldData = data;
break;
};
}
manifestData = {
name: ldData.name,
description: ldData.description,
start_url: (Site.url + Site.baseurl),
display: "standalone",
};
} }
manifestData = Object.assign(manifestData, {
scope: location.href,
background_color: (Software && Software.background_color || getComputedStyle(document.body).backgroundColor),
icons: [{
src: (SalaMuseoGames.page.icon || (Site.url + Site.baseurl + '/assets/img/icons/mediumtile.png')),
sizes: "any",
purpose: "any",
}],
});
var manifestElem = document.createElement('link'); var manifestElem = document.createElement('link');
manifestElem.rel = 'manifest'; manifestElem.rel = 'manifest';
manifestElem.href = 'data:application/manifest+json;utf8,' + encodeURIComponent(JSON.stringify(manifestData)); manifestElem.href = ('data:application/manifest+json;utf8,' + encodeURIComponent(JSON.stringify(manifestData)));
document.head.appendChild(manifestElem); document.head.appendChild(manifestElem);
} }
if (Prefs.offlineCache.value) {
navigator.serviceWorker.register('/SalaMuseoGames-ServiceWorker.js');
}
})(); })();

View File

@ -10,16 +10,14 @@ permalink: "/configuration/"
This page allows you to manage advanced, global settings for this entire site, and access special features. This page allows you to manage advanced, global settings for this entire site, and access special features.
All your changes are saved automatically.
<!-- TODO: <!-- TODO:
* Disable offline caching
* Toggle reproduction history * Toggle reproduction history
* Specify preferred emulators (backends, cores) * Specify preferred emulators (backends, cores)
* Force override emulators * Force override emulators
* Toggle automatic web/social embeds * Toggle automatic web/social embeds
* Try to load games marked unavailable * Try to load games marked unavailable
* Configs/saves import/export
--> -->
<div id="ConfigurationCustomizerElem"><p>Loading...</p></div> <div id="ConfigurationCustomizer"><p>Loading...</p></div>
Work-in-progress. Coming soon, you will be able to modify these options.