Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Ablota
Store
App
Commits
316bc7b2
Verified
Commit
316bc7b2
authored
Dec 29, 2020
by
FabioWidmer
Browse files
Improve formatting
parent
6b046fef
Changes
25
Show whitespace changes
Inline
Side-by-side
src/components/app.vue
View file @
316bc7b2
<
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
>
src/components/popovers/antifeatures.vue
View file @
316bc7b2
<
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>
...
...
src/components/popups/downloadapp.vue
View file @
316bc7b2
...
...
@@ -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>
...
...
src/css/app.scss
View file @
316bc7b2
...
...
@@ -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
;
}
...
...
src/css/icons.css
View file @
316bc7b2
...
...
@@ -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
;
...
...
src/i18n/de.js
View file @
316bc7b2
...
...
@@ -9,4 +9,4 @@ export default {
],
},
},
}
}
;
src/i18n/en.js
View file @
316bc7b2
...
...
@@ -343,7 +343,7 @@ export default {
},
done
:
{
description
:
'
@:app.name is ready! You can now launch @:app.name and start downloading apps.
'
,
}
}
,
},
},
},
...
...
src/index.html
View file @
316bc7b2
...
...
@@ -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
re
l
=
"
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
h
re
f
=
"
/static/icons/favicon.png"
rel=
"icon"
sizes=
"128x128"
type=
"image/
png"
>
<link
href=
"/manifest.json"
rel=
"manifest"
>
<
%
}
%
>
</head>
<body>
...
...
src/js/utils.js
View file @
316bc7b2
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`
])
{
...
...
src/manifest.json
View file @
316bc7b2
src/pages/about.vue
View file @
316bc7b2
<
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
s
rc=
"static/icons/favicon.png"
alt=
""
slot=
"media"
class=
"icon-50
"
/>
<img
s
lot=
"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
s
lot=
"media"
alt=
""
class=
"icon-30"
s
rc=
"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
s
rc=
"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
s
lot=
"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
>
src/pages/app.vue
View file @
316bc7b2
...
...
@@ -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=
"nam
e"
></f7-list-item>
<f7-list-item
v-for=
"(value, name) in permissions"
:
header=
"name"
:title=
"valu
e"
></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
()
{
...
...
src/pages/categories.vue
View file @
316bc7b2
...
...
@@ -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
>
src/pages/category.vue
View file @
316bc7b2
...
...
@@ -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"
/>