Verified Commit 316bc7b2 authored by FabioWidmer's avatar FabioWidmer
Browse files

Improve formatting

parent 6b046fef
<template>
<f7-app :params="f7params">
<f7-views class="safe-areas">
<f7-view main url="/" :push-state="pushState" :stack-pages="true" :routes="routes"></f7-view>
<f7-view :push-state="pushState" :routes="routes" :stack-pages="true" main url="/"></f7-view>
</f7-views>
</f7-app>
</template>
<script>
import { Device } from 'framework7/framework7-lite.esm.bundle.js';
import cordovaApp from '../js/cordova-app.js';
import routes from '../js/routes.js';
import {Device} from 'framework7/framework7-lite.esm.bundle.js';
import cordovaApp from '../js/cordova-app.js';
import routes from '../js/routes.js';
export default {
export default {
data() {
return {
pushState: !Device.cordova,
......@@ -24,7 +24,7 @@
return {
url: 'https://store.ablota.com/',
server: {
url: 'https://api.store.ablota.com/'
url: 'https://api.store.ablota.com/',
},
deviceInfo: null,
};
......@@ -80,5 +80,5 @@
});
});
},
};
};
</script>
<template>
<div class="popover-antifeatures">
<f7-popover :class="`popover-antifeatures-${key}`" v-for="(antiFeature, key) in $t('lists.antiFeatures')" :key="key">
<f7-popover v-for="(antiFeature, key) in $t('lists.antiFeatures')" :key="key" :class="`popover-antifeatures-${key}`">
<f7-block><p>{{ antiFeature.description }}</p></f7-block>
<f7-list>
<f7-list-item :footer="antiFeature.key" :link="`https://f-droid.org/docs/Anti-Features/#${key}`" :title="$t('words.more')" external popover-close target="_system">
<f7-icon aurora="f7:link" ios="f7:link" md="material:link" slot="media"></f7-icon>
<f7-icon slot="media" aurora="f7:link" ios="f7:link" md="material:link"></f7-icon>
</f7-list-item>
</f7-list>
</f7-popover>
......
......@@ -14,7 +14,7 @@
<div class="timeline-item-inner">
<div class="timeline-item-title">{{ $t('words.download') }}</div>
<div class="timeline-item-text">{{ $t('popups.downloadApp.steps.download.description') }}</div>
<f7-button href="https://ablota.com/repo/Ablota_Store.apk" :text="$t('words.download')" fill raised external></f7-button>
<f7-button :text="$t('words.download')" external fill href="https://ablota.com/repo/Ablota_Store.apk" raised></f7-button>
</div>
</div>
</div>
......@@ -45,7 +45,7 @@
<div class="timeline-item-inner">
<div class="timeline-item-title">{{ $t('words.done') }}</div>
<div class="timeline-item-text">{{ $t('popups.downloadApp.steps.done.description') }}</div>
<f7-button href="https://store.ablota.com" :text="$t('words.launch')" fill raised external></f7-button>
<f7-button :text="$t('words.launch')" external fill href="https://store.ablota.com" raised></f7-button>
</div>
</div>
</div>
......
......@@ -4,6 +4,7 @@ $icon-sizes: 20, 30, 40, 50, 60;
.device-cordova.device-ios {
height: 100vh;
}
/* Your app custom styles here */
body {
......@@ -80,6 +81,7 @@ body {
.item-inner {
padding: 0;
}
.item-subtitle p {
margin-top: 0;
}
......
......@@ -10,6 +10,7 @@
url(../fonts/MaterialIcons-Regular.woff) format('woff'),
url(../fonts/MaterialIcons-Regular.ttf) format('truetype');
}
.material-icons {
font-family: 'Material Icons';
font-weight: normal;
......@@ -38,6 +39,7 @@
url("../fonts/Framework7Icons-Regular.woff") format("woff"),
url("../fonts/Framework7Icons-Regular.ttf") format("truetype");
}
.f7-icons {
font-family: 'Framework7 Icons';
font-weight: normal;
......
......@@ -9,4 +9,4 @@ export default {
],
},
},
}
};
......@@ -343,7 +343,7 @@ export default {
},
done: {
description: '@:app.name is ready! You can now launch @:app.name and start downloading apps.',
}
},
},
},
},
......
......@@ -3,43 +3,45 @@
<head>
<meta charset="utf-8">
<% if (process.env.NODE_ENV === 'production') { %>
<meta http-equiv="Content-Security-Policy" content="default-src 'self' 'unsafe-inline' 'unsafe-eval' data: gap: content: https://api.store.ablota.com">
<meta content="default-src 'self' 'unsafe-inline' 'unsafe-eval' data: gap: content: https://api.store.ablota.com" http-equiv="Content-Security-Policy">
<% } %>
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta property="og:image:width" content="128">
<meta property="og:image:height" content="128">
<meta property="og:description" content="The universal, decentralized and open source app store.">
<meta property="og:title" content="Ablota Store">
<meta property="og:url" content="https://store.ablota.com">
<meta property="og:image" content="https://store.ablota.com/static/icons/favicon.png">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no, minimal-ui, viewport-fit=cover">
<meta name="robots" content="noarchive, notranslate, noimageindex">
<meta name="theme-color" content="#007aff">
<meta name="format-detection" content="telephone=no">
<meta name="format-detection" content="date=no">
<meta name="format-detection" content="address=no">
<meta name="msapplication-TileColor" content="#007aff">
<meta name="msapplication-tap-highlight" content="no">
<meta name="author" content="Ablota (StarApps GmbH)">
<meta name="description" content="The universal, decentralized and open source app store.">
<meta name="keywords" content="ablota store, ablota, store, app, apps, game, game, app store, universal, open source, decentralized, foss, floss, android, ios, web, electron, desktop, starapps, starapps ltd, starapps gmbh">
<meta content="ie=edge" http-equiv="x-ua-compatible">
<meta content="128" property="og:image:width">
<meta content="128" property="og:image:height">
<meta content="The universal, decentralized and open source app store." property="og:description">
<meta content="Ablota Store" property="og:title">
<meta content="https://store.ablota.com" property="og:url">
<meta content="https://store.ablota.com/static/icons/favicon.png" property="og:image">
<meta content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no, minimal-ui, viewport-fit=cover" name="viewport">
<meta content="noarchive, notranslate, noimageindex" name="robots">
<meta content="#007aff" name="theme-color">
<meta content="telephone=no" name="format-detection">
<meta content="date=no" name="format-detection">
<meta content="address=no" name="format-detection">
<meta content="#007aff" name="msapplication-TileColor">
<meta content="no" name="msapplication-tap-highlight">
<meta content="Ablota (StarApps GmbH)" name="author">
<meta content="The universal, decentralized and open source app store." name="description">
<meta
content="ablota store, ablota, store, app, apps, game, game, app store, universal, open source, decentralized, foss, floss, android, ios, web, electron, desktop, starapps, starapps ltd, starapps gmbh"
name="keywords"
>
<title>Ablota Store</title>
<% if (process.env.TARGET === 'web') { %>
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta content="yes" name="apple-mobile-web-app-capable">
<meta content="black-translucent" name="apple-mobile-web-app-status-bar-style">
<% for (var index in htmlWebpackPlugin.files.css) { %>
<link rel="preload" href="<%= htmlWebpackPlugin.files.css[index] %>" as="style">
<% } %>
<% for (var index in htmlWebpackPlugin.files.js) { %>
<link rel="preload" href="<%= htmlWebpackPlugin.files.js[index] %>" as="script">
<link as="style" href="<%= htmlWebpackPlugin.files.css[index] %>" rel="preload">
<% } %> <% for (var index in htmlWebpackPlugin.files.js) { %>
<link as="script" href="<%= htmlWebpackPlugin.files.js[index] %>" rel="preload">
<% } %>
<link rel="apple-touch-icon" sizes="256x256" href="/static/icons/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="128x128" href="/static/icons/favicon.png">
<link rel="manifest" href="/manifest.json">
<link href="/static/icons/apple-touch-icon.png" rel="apple-touch-icon" sizes="256x256">
<link href="/static/icons/favicon.png" rel="icon" sizes="128x128" type="image/png">
<link href="/manifest.json" rel="manifest">
<% } %>
</head>
<body>
......
import { Request, Device } from 'framework7';
import {Device, Request} from 'framework7';
import sanitizeHtml from 'sanitize-html';
import sourceValidator from '../validators/source';
......@@ -38,7 +38,13 @@ export function fetchSource(url, server, age = 6) {
}
});
['phoneScreenshots', 'sevenInchScreenshots', 'tenInchScreenshots', 'tvScreenshots', 'wearScreenshots'].forEach(assets => app.localized[key][assets].forEach((asset, index) => {
[
'phoneScreenshots',
'sevenInchScreenshots',
'tenInchScreenshots',
'tvScreenshots',
'wearScreenshots',
].forEach(assets => app.localized[key][assets].forEach((asset, index) => {
app.localized[key][assets][index] = `${url}${app.packageName}/${key}/${assets}/${asset}`;
}));
});
......@@ -61,7 +67,7 @@ export function fetchSource(url, server, age = 6) {
if(Device.cordova) {
window.resolveLocalFileSystemURL(cordova.file.dataDirectory, dataDirectory => {
dataDirectory.getDirectory('sources', { create: true, exclusive: false }, dataSourcesDirectory => {
dataDirectory.getDirectory('sources', {create: true, exclusive: false}, dataSourcesDirectory => {
ablota.store.file.hashName(url, data => {
const fetchIndex = () => {
ablota.store.file.download(`${url}index-v1.jar`, `${cordova.file.dataDirectory}sources/${data.hash}.jar`, {}, {}, data => {
......@@ -79,7 +85,7 @@ export function fetchSource(url, server, age = 6) {
}, () => reject('request'));
};
dataSourcesDirectory.getFile(`${data.hash}.jar`, { create: false }, sourceFile => {
dataSourcesDirectory.getFile(`${data.hash}.jar`, {create: false}, sourceFile => {
sourceFile.file(file => {
if(file.lastModified < new Date().getTime() - age * 60 * 60 * 1000) {
fetchIndex();
......@@ -130,8 +136,8 @@ export function fetchAsset(url, server, age = 24) {
};
window.resolveLocalFileSystemURL(cordova.file.cacheDirectory, cacheDirectory => {
cacheDirectory.getDirectory('assets', { create: true, exclusive: false }, cacheAssetsDirectory => {
cacheAssetsDirectory.getFile(data.hash, { create: false }, assetFile => {
cacheDirectory.getDirectory('assets', {create: true, exclusive: false}, cacheAssetsDirectory => {
cacheAssetsDirectory.getFile(data.hash, {create: false}, assetFile => {
assetFile.file(file => {
if(file.lastModified < new Date().getTime() - age * 60 * 60 * 1000) {
downloadAsset();
......@@ -154,7 +160,7 @@ export function fetchAsset(url, server, age = 24) {
} else {
resolve({
originalUrl: url,
localUrl: `${server.url}v1/proxy/asset?url=${url}`
localUrl: `${server.url}v1/proxy/asset?url=${url}`,
});
}
});
......@@ -323,7 +329,7 @@ export function downloadPackage(app, appPackage, updateCallback) {
};
window.resolveLocalFileSystemURL(cordova.file.cacheDirectory, cacheDirectory => {
cacheDirectory.getDirectory('packages', { create: true, exclusive: false }, packagesDirectory => {
cacheDirectory.getDirectory('packages', {create: true, exclusive: false}, packagesDirectory => {
ablota.store.file.download(appPackage.apkName, packageFilePath, {}, {}, data => {
if(data.status === 'success') {
ablota.store.file.hash(packageFilePath, data => {
......@@ -331,7 +337,7 @@ export function downloadPackage(app, appPackage, updateCallback) {
if(data.hash.toLowerCase() === appPackage.hash) {
finish('package');
} else {
packagesDirectory.getFile(packageFilePath, { create: false }, packageFileEntry => {
packagesDirectory.getFile(packageFilePath, {create: false}, packageFileEntry => {
packageFileEntry.remove();
});
......@@ -360,9 +366,9 @@ export function downloadPackage(app, appPackage, updateCallback) {
if(appPackage[obbFile] && appPackage[`${obbFile}Sha256`]) {
window.resolveLocalFileSystemURL(cordova.file.externalRootDirectory, externalRootDirectory => {
externalRootDirectory.getDirectory('Android', { create: true, exclusive: false }, androidDirectory => {
androidDirectory.getDirectory('obb', { create: true, exclusive: false }, obbDirectory => {
obbDirectory.getDirectory(appPackage.packageName, { create: true, exclusive: false }, appPackageDirectory => {
externalRootDirectory.getDirectory('Android', {create: true, exclusive: false}, androidDirectory => {
androidDirectory.getDirectory('obb', {create: true, exclusive: false}, obbDirectory => {
obbDirectory.getDirectory(appPackage.packageName, {create: true, exclusive: false}, appPackageDirectory => {
const obbFilename = appPackage[obbFile].substring(appPackage[obbFile].lastIndexOf('/') + 1);
const obbFilePath = `${cordova.file.externalCacheDirectory}/${obbFilename}`;
const downloadObbFile = () => {
......@@ -374,14 +380,14 @@ export function downloadPackage(app, appPackage, updateCallback) {
if(data.status === 'success') {
if(data.hash.toLowerCase() === appPackage[`${obbFile}Sha256`]) {
window.resolveLocalFileSystemURL(cordova.file.externalCacheDirectory, externalCacheDirectory => {
externalCacheDirectory.getFile(obbFilename, { create: false }, obbFileEntry => {
externalCacheDirectory.getFile(obbFilename, {create: false}, obbFileEntry => {
obbFileEntry.moveTo(appPackageDirectory, obbFilename, () => {
finish(obbName);
}, () => reject('utils.downloadPackage.directory'));
}, () => reject('utils.downloadPackage.directory'));
}, () => reject('utils.downloadPackage.directory'));
} else {
appPackageDirectory.getFile(obbFilename, { create: false }, obbFileEntry => {
appPackageDirectory.getFile(obbFilename, {create: false}, obbFileEntry => {
obbFileEntry.remove();
});
......@@ -403,7 +409,7 @@ export function downloadPackage(app, appPackage, updateCallback) {
};
finished[obbName] = false;
appPackageDirectory.getFile(obbFilename, { create: false }, () => {
appPackageDirectory.getFile(obbFilename, {create: false}, () => {
ablota.store.file.hash(`${cordova.file.externalRootDirectory}Android/obb/${appPackage.packageName}/${obbFilename}`, data => {
if(data.status === 'success') {
if(data.hash.toLowerCase() === appPackage[`${obbFile}Sha256`]) {
......
<template>
<f7-panel left cover swipe swipeOnlyClose>
<f7-panel cover left swipe swipeOnlyClose>
<f7-view>
<f7-page name="about">
<f7-list accordion-list class="no-margin" no-hairlines>
<f7-list-item
accordion-item :footer="$t('pages.about.version', {version: $f7.params.version})" :title="$t('app.name')"
:footer="$t('pages.about.version', {version: $f7.params.version})" :title="$t('app.name')" accordion-item
>
<img src="static/icons/favicon.png" alt="" slot="media" class="icon-50"/>
<img slot="media" alt="" class="icon-50" src="static/icons/favicon.png"/>
<f7-block>{{ $t('pages.about.slogan') }}</f7-block>
<f7-accordion-content>
<f7-block>
<p v-for="paragraph in $t('pages.about.description')">{{paragraph}}</p>
<p v-for="paragraph in $t('pages.about.description')">{{ paragraph }}</p>
</f7-block>
</f7-accordion-content>
</f7-list-item>
</f7-list>
<f7-block-title>{{ $t('words.socialMedia') }}</f7-block-title>
<f7-list>
<f7-list-item footer="@Ablota_com" link="https://mastodon.online/@Ablota_com" :title="$t('words.mastodon')" external target="_system">
<img src="static/images/logos/mastodon.svg" slot="media" alt="" class="icon-30" />
<f7-list-item :title="$t('words.mastodon')" external footer="@Ablota_com" link="https://mastodon.online/@Ablota_com" target="_system">
<img slot="media" alt="" class="icon-30" src="static/images/logos/mastodon.svg"/>
</f7-list-item>
<f7-list-item footer="@Ablota_com" link="https://twitter.com/Ablota_com" :title="$t('words.twitter')" external target="_system">
<img src="static/images/logos/twitter.png" slot="media" alt="" class="icon-30" />
<f7-list-item :title="$t('words.twitter')" external footer="@Ablota_com" link="https://twitter.com/Ablota_com" target="_system">
<img slot="media" alt="" class="icon-30" src="static/images/logos/twitter.png"/>
</f7-list-item>
<f7-list-item footer="r/Ablota" link="https://reddit.com/r/Ablota" :title="$t('words.reddit')" external target="_system">
<img src="static/images/logos/reddit.png" slot="media" alt="" class="icon-30" />
<f7-list-item :title="$t('words.reddit')" external footer="r/Ablota" link="https://reddit.com/r/Ablota" target="_system">
<img slot="media" alt="" class="icon-30" src="static/images/logos/reddit.png"/>
</f7-list-item>
</f7-list>
<f7-block-title>{{ $t('words.donate') }}</f7-block-title>
<f7-list>
<f7-list-item link="https://liberapay.com/Ablota_com" :title="$t('words.liberapay')" external target="_system">
<img src="static/images/logos/liberapay.svg" slot="media" alt="" class="icon-30" />
<f7-list-item :title="$t('words.liberapay')" external link="https://liberapay.com/Ablota_com" target="_system">
<img slot="media" alt="" class="icon-30" src="static/images/logos/liberapay.svg"/>
</f7-list-item>
<f7-list-item link="https://opencollective.com/Ablota_com" :title="$t('words.openCollective')" external target="_system">
<img src="static/images/logos/opencollective.svg" slot="media" alt="" class="icon-30" />
<f7-list-item :title="$t('words.openCollective')" external link="https://opencollective.com/Ablota_com" target="_system">
<img slot="media" alt="" class="icon-30" src="static/images/logos/opencollective.svg"/>
</f7-list-item>
</f7-list>
<f7-block>
<p v-html="$t('pages.about.trademark')" />
<p v-html="$t('pages.about.trademark')"/>
</f7-block>
</f7-page>
</f7-view>
</f7-panel>
</template>
<script>
export default {};
export default {};
</script>
......@@ -49,7 +49,14 @@
>
<f7-icon aurora="f7:arrow_up_right_square" ios="f7:arrow_up_right_square" md="material:launch"></f7-icon>
</f7-fab>
<f7-fab v-show="app && suggestion.installed" slot="fixed" :tooltip="$t('words.uninstall')" class="fab-uninstall no-margin-bottom" position="right-bottom" @click="uninstallApp">
<f7-fab
v-show="app && suggestion.installed"
slot="fixed"
:tooltip="$t('words.uninstall')"
class="fab-uninstall no-margin-bottom"
position="right-bottom"
@click="uninstallApp"
>
<f7-icon aurora="f7:trash" ios="f7:trash" md="material:delete"></f7-icon>
</f7-fab>
<div v-if="app">
......@@ -79,10 +86,7 @@
</f7-popover>
<f7-list accordion-list class="no-margin" media-list no-hairlines>
<f7-list-item
:accordion-item="!!suggestion.package"
:footer="app.packageName"
:subtitle="app.summary"
class="no-subtitle-limit"
:accordion-item="!!suggestion.package" :footer="app.packageName" :subtitle="app.summary" class="no-subtitle-limit"
>
<img v-if="appIcon" slot="media" :src="appIcon" alt="" class="icon-60"/>
<f7-skeleton-block v-if="app.icon && !appIcon" slot="media" class="icon-60"/>
......@@ -94,13 +98,17 @@
<p>{{ $t('pages.app.details') }}</p>
</f7-block>
<f7-list class="no-title-limit item-padding-half" inset>
<f7-list-item :title="suggestion.package.added.toLocaleDateString()" :header="$t('words.date')"></f7-list-item>
<f7-list-item :title="`${suggestion.package.versionName} (${suggestion.package.versionCode})`" :header="$t('words.version')"></f7-list-item>
<f7-list-item :title="`${Math.round(suggestion.package.size / 1024 / 1024 * 10) / 10} MB`" :header="$t('words.size')"></f7-list-item>
<f7-list-item v-if="suggestion.package.minSdkVersion" :title="suggestion.package.minSdkVersion" :header="$t('words.minSdkVersion')"></f7-list-item>
<f7-list-item v-if="suggestion.package.targetSdkVersion" :title="suggestion.package.targetSdkVersion" :header="$t('words.targetSdkVersion')"></f7-list-item>
<f7-list-item v-if="suggestion.package.maxSdkVersion" :title="suggestion.package.maxSdkVersion" :header="$t('words.maxSdkVersion')"></f7-list-item>
<f7-list-item v-if="suggestion.package.nativecode.length" :title="suggestion.package.nativecode.join(', ')" :header="$t('words.abis')"></f7-list-item>
<f7-list-item :header="$t('words.date')" :title="suggestion.package.added.toLocaleDateString()"></f7-list-item>
<f7-list-item :header="$t('words.version')" :title="`${suggestion.package.versionName} (${suggestion.package.versionCode})`"></f7-list-item>
<f7-list-item :header="$t('words.size')" :title="`${Math.round(suggestion.package.size / 1024 / 1024 * 10) / 10} MB`"></f7-list-item>
<f7-list-item v-if="suggestion.package.minSdkVersion" :header="$t('words.minSdkVersion')" :title="suggestion.package.minSdkVersion"></f7-list-item>
<f7-list-item
v-if="suggestion.package.targetSdkVersion"
:header="$t('words.targetSdkVersion')"
:title="suggestion.package.targetSdkVersion"
></f7-list-item>
<f7-list-item v-if="suggestion.package.maxSdkVersion" :header="$t('words.maxSdkVersion')" :title="suggestion.package.maxSdkVersion"></f7-list-item>
<f7-list-item v-if="suggestion.package.nativecode.length" :header="$t('words.abis')" :title="suggestion.package.nativecode.join(', ')"></f7-list-item>
</f7-list>
<div v-if="Object.keys(permissions).length">
<f7-block-title>{{ $t('words.permissions') }}</f7-block-title>
......@@ -108,7 +116,7 @@
<p>{{ $t('pages.app.permissions') }}</p>
</f7-block>
<f7-list class="no-title-limit item-padding-half" inset>
<f7-list-item v-for="(value, name) in permissions" :title="value" :header="name"></f7-list-item>
<f7-list-item v-for="(value, name) in permissions" :header="name" :title="value"></f7-list-item>
</f7-list>
</div>
<div v-if="suggestion.package.features.length">
......@@ -117,7 +125,7 @@
<p>{{ $t('pages.app.features') }}</p>
</f7-block>
<f7-list class="no-title-limit item-padding-half" inset>
<f7-list-item v-for="feature in suggestion.package.features" :title="feature" :header="feature"></f7-list-item>
<f7-list-item v-for="feature in suggestion.package.features" :header="feature" :title="feature"></f7-list-item>
</f7-list>
</div>
<f7-block-title>{{ $t('words.hashes') }}</f7-block-title>
......@@ -125,10 +133,26 @@
<p>{{ $t('pages.app.hashes') }}</p>
</f7-block>
<f7-list class="no-title-limit item-padding-half" inset>
<f7-list-item v-if="suggestion.package.hashType === 'sha256'" :title="suggestion.package.hash.match(/.{1,2}/g).join(':').toUpperCase()" :header="`${$t('words.apk')} (${$t('words.sha256')})`"></f7-list-item>
<f7-list-item v-if="suggestion.package.hashType === 'sha512'" :title="suggestion.package.hash.match(/.{1,2}/g).join(':').toUpperCase()" :header="`${$t('words.apk')} (${$t('words.sha512')})`"></f7-list-item>
<f7-list-item v-if="suggestion.package.obbMainFileSha256" :title="suggestion.package.obbMainFileSha256.match(/.{1,2}/g).join(':').toUpperCase()" :header="`${$t('words.obbMain')} (${$t('words.sha256')})`"></f7-list-item>
<f7-list-item v-if="suggestion.package.obbPatchFileSha256" :title="suggestion.package.obbPatchFileSha256.match(/.{1,2}/g).join(':').toUpperCase()" :header="`${$t('words.obbPatch')} (${$t('words.sha256')})`"></f7-list-item>
<f7-list-item
v-if="suggestion.package.hashType === 'sha256'"
:header="`${$t('words.apk')} (${$t('words.sha256')})`"
:title="suggestion.package.hash.match(/.{1,2}/g).join(':').toUpperCase()"
></f7-list-item>
<f7-list-item
v-if="suggestion.package.hashType === 'sha512'"
:header="`${$t('words.apk')} (${$t('words.sha512')})`"
:title="suggestion.package.hash.match(/.{1,2}/g).join(':').toUpperCase()"
></f7-list-item>
<f7-list-item
v-if="suggestion.package.obbMainFileSha256"
:header="`${$t('words.obbMain')} (${$t('words.sha256')})`"
:title="suggestion.package.obbMainFileSha256.match(/.{1,2}/g).join(':').toUpperCase()"
></f7-list-item>
<f7-list-item
v-if="suggestion.package.obbPatchFileSha256"
:header="`${$t('words.obbPatch')} (${$t('words.sha256')})`"
:title="suggestion.package.obbPatchFileSha256.match(/.{1,2}/g).join(':').toUpperCase()"
></f7-list-item>
</f7-list>
</f7-accordion-content>
</f7-list-item>
......@@ -211,7 +235,14 @@
<div v-if="!!(app.license || app.webSite || app.sourceCode || app.issueTracker || app.translation || app.changelog)">
<f7-block-title>{{ $t('words.links') }}</f7-block-title>
<f7-list>
<f7-list-item v-if="app.license" :footer="app.license" :link="`https://spdx.org/licenses/${app.license}`" :title="$t('words.license')" external target="_system">
<f7-list-item
v-if="app.license"
:footer="app.license"
:link="`https://spdx.org/licenses/${app.license}`"
:title="$t('words.license')"
external
target="_system"
>
<f7-icon slot="media" aurora="f7:doc_text" ios="f7:doc_text" md="material:copyright"></f7-icon>
</f7-list-item>
<f7-list-item v-if="app.webSite" :footer="app.webSite" :link="app.webSite" :title="$t('words.website')" external target="_system">
......@@ -336,7 +367,8 @@ export default {
this.appIcon = icons[app.icon] ? icons[app.icon] : null;
});
fetchIcons(this.appGraphicsBundle.map(graphic => ({icon: graphic})), this.appGraphics, this.$f7.data.server, this.$store.state.settings.assetsAge).then(appGraphics => {
fetchIcons(this.appGraphicsBundle.map(graphic => ({icon: graphic})), this.appGraphics, this.$f7.data.server, this.$store.state.settings.assetsAge)
.then(appGraphics => {
this.appGraphics = {
...this.appGraphics,
...appGraphics,
......@@ -344,7 +376,8 @@ export default {
});
this.appScreenshotsBundle.forEach(screenshots => {
fetchIcons(screenshots.map(screenshot => ({icon: screenshot})), this.appScreenshots, this.$f7.data.server, this.$store.state.settings.assetsAge).then(appScreenshots => {
fetchIcons(screenshots.map(screenshot => ({icon: screenshot})), this.appScreenshots, this.$f7.data.server, this.$store.state.settings.assetsAge)
.then(appScreenshots => {
this.appScreenshots = {
...this.appScreenshots,
...appScreenshots,
......@@ -505,7 +538,7 @@ export default {
this.suggestion = {
package: this.packages[0],
installed: false,
}
};
}
},
share: function() {
......
......@@ -2,58 +2,44 @@
<f7-page name="categories">
<f7-navbar large>
<f7-nav-left>
<f7-link href="/about/" icon-aurora="f7:menu" icon-ios="f7:menu" icon-md="material:menu" />
<f7-link href="/about/" icon-aurora="f7:menu" icon-ios="f7:menu" icon-md="material:menu"/>
</f7-nav-left>
<f7-nav-title>{{ $t('pages.categories.title') }}</f7-nav-title>
<f7-nav-title-large>{{ $t('pages.categories.title') }}</f7-nav-title-large>
<f7-nav-right>
<f7-link icon-aurora="f7:search" icon-ios="f7:search" icon-md="material:search" href="/sources/apps/search/" />
<f7-link href="/sources/apps/search/" icon-aurora="f7:search" icon-ios="f7:search" icon-md="material:search"/>
</f7-nav-right>
</f7-navbar>
<f7-list>
<f7-list-item
:footer="$tc('counts.apps', 0, {
v-for="index in 10" v-if="loading" :key="index" :footer="$tc('counts.apps', 0, {
count: 0,
})"
:key="index"
title="Lorem ipsum dolor sit amet."
v-for="index in 10"
v-if="loading"
class="skeleton-text"
})" class="skeleton-text" title="Lorem ipsum dolor sit amet."
>
<f7-skeleton-block class="icon-40" slot="media"/>
<f7-skeleton-block slot="media" class="icon-40"/>
</f7-list-item>
<f7-list-item
:footer="$tc('counts.apps', category.apps, {
v-for="category in categories.official" v-if="!loading" :key="category.id" :footer="$tc('counts.apps', category.apps, {
count: category.apps,
})"
:key="category.id"
:link="`/categories/${category.id}/`"
:title="category.title"
v-for="category in categories.official"
v-if="!loading"
})" :link="`/categories/${category.id}/`" :title="category.title"
>
<img :src="`static/images/categories/${category.id}.png`" alt="" slot="media" class="icon-40" />
<img slot="media" :src="`static/images/categories/${category.id}.png`" alt="" class="icon-40"/>
</f7-list-item>
</f7-list>
<div v-if="!loading && categories.unofficial.length">
<f7-block-title>{{ $t('words.more') }}</f7-block-title>
<f7-list>
<f7-list-item
:footer="$tc('counts.apps', category.apps, {
v-for="category in categories.unofficial" :key="category.id" :footer="$tc('counts.apps', category.apps, {
count: category.apps,
})"
:key="category.id"
:link="`/categories/${category.id}/`"
:title="category.id"
v-for="category in categories.unofficial"
})" :link="`/categories/${category.id}/`" :title="category.id"
></f7-list-item>
</f7-list>
</div>
</f7-page>
</template>
<script>
export default {
export default {
computed: {
loading: function() {
return this.$store.state.sources.loading;
......@@ -91,5 +77,5 @@
};
},
},
};
};
</script>
......@@ -3,11 +3,11 @@
<f7-navbar :back-link="$t('words.back')">
<f7-nav-title>{{ category }}</f7-nav-title>
<f7-nav-right v-if="!loading">
<f7-link class="searchbar-enable" data-searchbar=".searchbar-list" icon-aurora="f7:search" icon-ios="f7:search" icon-md="material:search" />