Files
letro-android/screenshots/html/script.js
Benoit Marty 537074bee3 Simple Html page to view all the screenshots.
Do not delete the whole screenshots folder, but just delete per language when the screenshots are generated.

Generate the data.js file regarding the existing screenshots, to be able to add languages.
Also the language will be sorted alphabetically (English still first).
And the screenshot will be sorted alphabetically.

Update the script to generate screenshot for specific language on demand.
2024-03-01 15:10:18 +01:00

148 lines
4.8 KiB
JavaScript

/*
* Copyright (c) 2024 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { screenshots } from './data.js';
const header = screenshots[0];
let visibleLanguages = header.map((x) => 1);
let imageWidth = 300;
function addForm() {
// Insert the form into the div with id form_container
const form = document.createElement('form');
const languageLabel = document.createElement('label');
languageLabel.textContent = 'Languages:';
form.appendChild(languageLabel);
// Add a check box per entry in the header
for (let i = 0; i < header.length; i++){
const label = document.createElement('label');
const text = document.createTextNode(header[i]);
const input = document.createElement('input');
input.type = 'checkbox';
input.disabled = i == 0;
input.name = header[i];
input.checked = visibleLanguages[i] == 1;
input.onchange = (e) => {
if (e.target.checked) {
visibleLanguages[i] = 1;
} else {
visibleLanguages[i] = 0;
}
addTable();
};
label.appendChild(input);
label.appendChild(text);
form.appendChild(label);
}
// Add a label with the text "Width"
const label = document.createElement('label');
label.textContent = 'Screenshots width:';
form.appendChild(label);
// Add a input text to input the width of the image
const widthInput = document.createElement('input');
widthInput.id = 'width_input';
widthInput.type = 'number';
widthInput.min = 75;
widthInput.max = 500;
widthInput.step = 25;
widthInput.value = imageWidth;
widthInput.onchange = (e) => {
imageWidth = e.target.value;
addTable();
};
form.appendChild(widthInput);
document.getElementById('form_container').appendChild(form);
}
function getNiceName(name) {
var indices = [];
for(var i = 0; i < name.length; i++) {
if (name[i] === "_") indices.push(i);
}
return name.substring(indices[2] + 1, indices[3]);
}
function addTable() {
// Remove any previous table
document.getElementById('screenshots_container').innerHTML = '';
// screenshots contains a table of screenshots, lets convert to an html table
const table = document.createElement('table');
const thead = document.createElement('thead');
const tbody = document.createElement('tbody');
// First item of screenshots contains the languages
// Build the languages row
const languagesHeaderRow = document.createElement('tr');
for (let i = 0; i < header.length; i++) {
// Do not add the language if it is hidden
if (visibleLanguages[i] == 0) {
continue;
}
const th = document.createElement('th');
th.textContent = header[i];
languagesHeaderRow.appendChild(th);
}
const numVisibleLanguages = languagesHeaderRow.childElementCount
// Next items are the data
var currentHeaderValue = "";
for (let i = 1; i < screenshots.length; i++) {
// Add a header for row, if different from previous
let name = getNiceName(screenshots[i][0]);
if(name != currentHeaderValue) {
currentHeaderValue = name;
const trHead = document.createElement('tr');
const tdHead = document.createElement('td');
tdHead.colSpan = numVisibleLanguages;
tdHead.className = "view-header";
tdHead.textContent = name;
trHead.appendChild(tdHead);
tbody.appendChild(trHead);
tbody.appendChild(languagesHeaderRow.cloneNode(true));
}
const tr = document.createElement('tr');
for (let j = 0; j < screenshots[i].length; j++) {
if (visibleLanguages[j] == 0) {
continue;
}
const td = document.createElement('td');
let imageFile = screenshots[i][j];
if (imageFile === '') {
const text = document.createElement('p');
text.textContent = 'No image';
td.appendChild(text);
} else {
const img = document.createElement('img');
img.className = "screenshot";
img.src = `../${imageFile}`;
img.title = imageFile;
img.alt = "Missing image";
img.width = imageWidth;
td.appendChild(img);
}
tr.appendChild(td);
}
tbody.appendChild(tr);
}
table.appendChild(thead);
table.appendChild(tbody);
// Add the table to the div with id screenshots_container
document.getElementById('screenshots_container').appendChild(table);
}
addForm();
addTable();