Display the list of apps with nice cards (#537)

* [enh] Display the list of apps with nice cards
* [fix] notworking and uppercase issue in app search
This commit is contained in:
ljf (zamentur) 2017-09-05 22:38:25 +02:00 committed by Alexandre Aubin
parent 1923192205
commit 9ccdf22d16
13 changed files with 512 additions and 468 deletions

View file

@ -28,9 +28,8 @@
* [Avec OVH](/OVH_fr)
* [Accéder à son domaine depuis le réseau local](/dns_local_network_fr)
* [Nom de domaine en Nohost.me](/dns_nohost_me_fr)
* [Applications officielles](/apps_fr)
* [Applications](/apps_fr)
* [Mettre à jour ses applications](app_update_fr)
* [Applications en cours](apps_in_progress_fr)
* [Applications souhaitées](apps_wishlist_fr)
* [Nextcloud](app_nextcloud_fr)
* [Fournisseurs daccès à Internet](/isp_fr)

275
apps.md
View file

@ -1,44 +1,133 @@
#Official apps
# Apps
<img src="/images/roundcube.png" width=50>
<img src="/images/ttrss.png" width=50>
<img src="/images/wordpress.png" width=50>
<img src="/images/transmission.png" width=50>
<img src="/images/logo-jirafeau.jpeg" width=50>
<img src="/images/Logo-wallabag-svg.svg" width=50>
<img src="/images/Searx_logo.svg" width=50>
<img src="/images/rainloop_logo.png" width=40>
<img src="/images/Nextcloud_Logo.svg" width=70>
<img src="/images/privatebin_icon.svg" width=40>
<a class="btn btn-lg btn-default disabled" href="/apps_en">Official apps</a> <a class="btn btn-lg btn-default" href="/apps_in_progress_en">Apps in progress</a> <a class="btn btn-lg btn-default" href="/apps_wishlist_en">Apps wishlist</a>
<div class="clearfix" style="margin-bottom: 1em;">
<div class="btn btn-default btn-xs pull-right" data-toggle="collapse" data-target="#app-accordion .collapse">View all</div>
<div class="input-group">
<span class="input-group-addon" id="basic-addon1"><span class="glyphicon glyphicon-search"></span></span>
<input type="text" id="filter-app-cards" class="form-control" placeholder="Search for apps..." aria-describedby="basic-addon1"/>
<div class="input-group-btn">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span id="app-cards-list-filter-text">Only official apps</span> <span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href="#" id="app-cards-list-validated">Only official apps</a></li>
<li><a href="#" id="app-cards-list-working">Only working apps</a></li>
<li><a href="#" id="app-cards-list-working-inprogress">In progress/not working apps</a></li>
<li><a href="#" id="app-cards-list-all-apps">All apps</a></li>
</ul>
</div>
</div>
<br />
<div id="community-app-list-warrant" class="alert alert-danger">
<p>Only apps tagged <span class="label label-success label-as-badge">validated</span> are officially supported by the package team. </p>
<div class="panel-group" id="app-accordion"></div>
<p>Apps tagged <span class="label label-success label-as-badge">working</span>, <span class="label label-warning label-as-badge">inprogress</span>, <span class="label label-danger label-as-badge">notworking</span> are from community repository, you can test and use them **at your own risk**.</p>
<p>Important: it's the application maintaineur that qualify his application as working, not the YunoHost core team. Install it at your own risks. We won't provide support for it.</p>
</div>
<div class="alert alert-info">The packagers will appreciate your remarks. If you install them and find issues, or ideas for improvement, do not hesitate to file issues directly on their repositories project page.</div>
<div class="app-cards-list" id="app-cards-list"></div>
<div class="alert alert-warning">If you don't find the app you are searching for, you can search it in community app repository (working, inprogress and not working apps) or fill the <a href="/apps_wishlist_en">apps wishlist</a>.</div>
<style>
/*=================================================
Search bar
=================================================*/
#filter-app-cards, #app-cards-list {
width:100%;
}
/*===============================================*/
/*=================================================
Force return space after card list
=================================================*/
#app-cards-list:after {
content:'';
display:block;
clear: both;
}
/*===============================================*/
/*=================================================
App card
=================================================*/
.app-card {
margin-bottom:10px;
width:270px;
float:left;
min-height: 1px;
margin-right: 10px;
}
/*===============================================*/
/*=================================================
App card body
=================================================*/
.app-card .panel-body > h3 {
margin-top:0;
margin-bottom:5px;
font-size:1.2em;
}
.app-card .category {
height:50px;
}
.app-card .category .label, .app-card-date-maintainer {
font-size:0.7em;
}
.app-card-date-maintainer {
text-align:right;
max-height: 18px;
}
.app-card-desc {
height:100px;
}
/*===============================================*/
/*=================================================
App card footer
=================================================*/
.app-card .btn-group {
width:100%;
margin-left: 0px;
}
.app-card > .btn-group > .btn{
border-bottom:0;
}
.app-card > .btn-group > .btn:first-child {
border-left:0;
border-top-left-radius:0;
}
.app-card > .btn-group > .btn:last-child {
border-right:0;
border-top-right-radius:0;
margin-left: 0px;
}
/*===============================================*/
</style>
<script type="text/template" id="app-template2">
<div class="app-card_{app_id} app-card panel panel-default">
<script type="text/template" id="app-template">
<div class="panel panel-default">
<div class="panel-heading">
<div class="panel-title">
<a data-toggle="collapse" data-parent="#app-accordion" href="apps_en/#app_{app_id}">{app_name} <em><small>({app_id})</small></em></a>
</div>
</div>
<div class="panel-collapse collapse app_{app_id}">
<div class="panel-body">
<p><strong>Description</strong>: {app_description}</p>
<p><strong>Last update (UTC)</strong>: {app_update}</p>
<p><strong>Level</strong>: {app_level}</p>
<p><strong>Maintainer</strong>: {app_maintainer} <small class="text-muted">({app_mail})</small></p>
<p><strong>Git repository</strong>: <a href="{app_git}" target="_blank">{app_git}</a> <small class="text-muted">({app_branch})</small></p>
<a href="#/app_{app_id}" target="_blank" class="btn btn-default">Documentation</a>
<h3>{app_name}</h3>
<div class="category"></div>
<div class="app-card-desc">{app_description}</div>
<div class="app-card-date-maintainer">
<span class="glyphicon glyphicon-refresh"></span> {app_update} -
<span class="glyphicon glyphicon-user"></span> {app_maintainer}
</div>
</div>
<div class="btn-group" role="group">
<a href="{app_git}" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Code</a>
<a href="#/app_{app_id}_en" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-book" aria-hidden="true"></span> Doc</a>
<a href="https://install-app.yunohost.org/?app={app_id}" target="_BLANK" type="button" class="btn btn-{app_install_bootstrap} col-sm-4 active"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Install</a>
</div>
</div>
</script>
<br />
<div class="alert alert-info">All official applications are under free licenses.</div>
<script>
function timeConverter(UNIX_timestamp) {
@ -51,30 +140,118 @@ function timeConverter(UNIX_timestamp) {
var min = a.getMinutes();
if (hour < 10) { hour = '0' + hour; }
if (min < 10) { min = '0' + min; }
var time = date+' '+month+' '+year+' at '+hour+':'+min;
var time = date+' '+month+' '+year;//+' at '+hour+':'+min
return time;
}
$(document).ready(function () {
$.getJSON('https://app.yunohost.org/official.json', function(app_list) {
// Cast as array
var app_list = $.map(app_list, function(el) { return el; });
// Hide warrant about community list
$('#community-app-list-warrant').hide();
var filters = ["validated"];
function filter(){
var filters_text = filters.map(function(el) { return '.app-' + el;}).join(', ');
var valThis = $('#filter-app-cards').val().toLowerCase();
$('.app-card').each(function(){
var text = $(this).find('h3').text().toLowerCase();
(text.indexOf(valThis) == 0 && $(this).find(filters_text).length > 0) ? $(this).show() : $(this).hide();
});
(filters.indexOf("working") == -1) ?$('#community-app-list-warrant').hide():$('#community-app-list-warrant').show();
}
//=================================================
// Search & filter bar event
//=================================================
$('#filter-app-cards').keyup(filter);
$('#app-cards-list-validated').click(function(){
filters = ["validated"];
$('#app-cards-list-filter-text').text($('#app-cards-list-validated').text());
filter();
});
$('#app-cards-list-working').click(function(){
filters = ["validated", "working"];
$('#app-cards-list-filter-text').text($('#app-cards-list-working').text());
filter();
});
$('#app-cards-list-working-inprogress').click(function(){
filters = ["notworking", "inprogress"];
$('#app-cards-list-filter-text').text($('#app-cards-list-working-inprogress').text());
filter();
});
$('#app-cards-list-all-apps').click(function(){
filters = ["validated", "working", "inprogress", "notworking"];
$('#app-cards-list-filter-text').text($('#app-cards-list-all-apps').text());
filter();
});
//=================================================
//=================================================
// Upload apps lists
//=================================================
var app_list={};
$.when(
$.getJSON('https://app.yunohost.org/community.json', {}, function(community) {
app_list.community = $.map(community, function(el) { return el; });
}),
$.getJSON('https://app.yunohost.org/official.json', {}, function(official) {
app_list.official = $.map(official, function(el) { return el; });
})
).then(function() {
app_list = app_list.official.concat(app_list.community);
// Sort alpha
app_list.sort(function(a, b){
if (a.manifest.id > b.manifest.id) {return 1;}
else if (a.manifest.id < b.manifest.id) {return -1;}
return 0;
a_state = (a.state == "validated")?4:(a.state == "working")?3:(a.state == "inprogress")?2:1;
b_state = (b.state == "validated")?4:(b.state == "working")?3:(b.state == "inprogress")?2:1;
if (a_state < b_state || a_state == b_state && a.level < b.level || a_state == b_state && a.level == b.level && a.manifest.id > b.manifest.id) {return 1;}
else if (a.manifest.id == b.manifest.id) {return 0;}
return -1;
});
$.each(app_list, function(k, infos) {
app_id = infos.manifest.id;
html = $('#app-template').html()
app_install_bootstrap = "success";
if (infos.state === "validated") {
app_state_bootstrap = "success";
} else if (infos.state === "working") {
app_state_bootstrap = "success";
} else if (infos.state === "inprogress") {
app_state_bootstrap = "warning";
app_install_bootstrap = "danger";
} else if (infos.state === "notworking") {
app_state_bootstrap = "danger";
app_install_bootstrap = "danger";
}
if (infos.level == null ) {
infos.level = '?';
}
if (infos.level == 0 ) {
app_level_bootstrap = "danger";
app_install_bootstrap = "danger";
} else if (infos.level <= 2) {
app_level_bootstrap = "warning";
app_install_bootstrap = "danger";
} else if (infos.level >= 7) {
app_level_bootstrap = "success";
} else {
app_level_bootstrap = "default";
}
// Fill the template
html = $('#app-template2').html()
.replace(/{app_id}/g, app_id)
.replace(/{app_name}/g, infos.manifest.name)
.replace('{app_description}', infos.manifest.description.en)
.replace(/{app_git}/g, infos.git.url)
.replace('{app_branch}', infos.git.branch)
.replace('{app_level}', infos.level)
.replace('{app_update}', timeConverter(infos.lastUpdate));
.replace('{app_update}', timeConverter(infos.lastUpdate))
.replace('{app_state_bootstrap}', app_state_bootstrap)
.replace('{app_install_bootstrap}', app_install_bootstrap);
if (infos.manifest.developer) {
html = html
@ -88,9 +265,19 @@ $(document).ready(function () {
.replace('{app_mail}', infos.manifest.maintainer.email);
}
$('#app-accordion').append(html);
$('.app_'+ app_id).attr('id', 'app_'+ app_id);
// Fill the template
$('#app-cards-list').append(html);
$('.app-card_'+ app_id).attr('id', 'app-card_'+ app_id);
$('.app-card_'+ app_id + ' .category').append(' <span class="label label-'+app_level_bootstrap+' label-as-badge">'+infos.level+'</span>');
$('.app-card_'+ app_id + ' .category').append(' <span class="label label-'+app_state_bootstrap+' label-as-badge app-'+infos.state+'">'+infos.state+'</span>');
if (infos.manifest.license && infos.manifest.license != 'free') {
$('.app-card_'+ app_id + ' .category').append(' <span class="label label-default">'+infos.manifest.license+'</span>');
}
});
filter();
});
//=================================================
});
</script>

View file

@ -1,49 +1,138 @@
#Apps officielles
# Apps
<img src="/images/roundcube.png" width=50>
<img src="/images/ttrss.png" width=50>
<img src="/images/wordpress.png" width=50>
<img src="/images/transmission.png" width=50>
<img src="/images/logo-jirafeau.jpeg" width=50>
<img src="/images/Logo-wallabag-svg.svg" width=50>
<img src="/images/Searx_logo.svg" width=50>
<img src="/images/rainloop_logo.png" width=40>
<img src="/images/Nextcloud_Logo.svg" width=70>
<img src="/images/privatebin_icon.svg" width=40>
<a class="btn btn-lg btn-default" href="/apps_fr" disabled>Apps officielles</a> <a class="btn btn-lg btn-default" href="/apps_in_progress_fr">Apps en cours</a> <a class="btn btn-lg btn-default" href="/apps_wishlist_fr">Apps souhaitées</a>
<div class="clearfix" style="margin-bottom: 1em;">
<div class="btn btn-default btn-xs pull-right" data-toggle="collapse" data-target="#app-accordion .collapse">Tout déplier</div>
<div class="input-group">
<span class="input-group-addon" id="basic-addon1"><span class="glyphicon glyphicon-search"></span></span>
<input type="text" id="filter-app-cards" class="form-control" placeholder="Rechercher des apps..." aria-describedby="basic-addon1"/>
<div class="input-group-btn">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span id="app-cards-list-filter-text">Apps officielles seulement</span> <span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href="#" id="app-cards-list-validated">Apps officielles seulement</a></li>
<li><a href="#" id="app-cards-list-working">Apps "working" seulement</a></li>
<li><a href="#" id="app-cards-list-working-inprogress">Apps "in progress"/"not working"</a></li>
<li><a href="#" id="app-cards-list-all-apps">Toutes les apps</a></li>
</ul>
</div>
</div>
<br />
<div id="community-app-list-warrant" class="alert alert-danger">
<p>Seules les apps marquées <span class="label label-success label-as-badge">validated</span> sont officiellement supportées par l'équipe d'empaquetage. </p>
<div class="panel-group" id="app-accordion"></div>
<p>Les apps marquées <span class="label label-success label-as-badge">working</span>, <span class="label label-warning label-as-badge">inprogress</span>, <span class="label label-danger label-as-badge">notworking</span> sont des applications non officielles maintenues par la communauté, vous pouvez les tester et les utiliser **à vos risques et périls**.</p>
<p>Important: c'est le mainteneur de l'application qui définit son application comme "working" et non pas l'équipe d'empaquetage de Yunohost. Installez ces apps à vos risques et périls. Nous ne fournissons pas de support pour elles.</p>
</div>
<div class="alert alert-info">Les empaqueteurs apprécieront vos remarques. Si vous installez leurs apps et trouvez des dysfonctionnement, ou si vous avez des idées d'amélioration, n'hésitez pas à créer des tickets directement sur les pages de dépots des projets.</div>
<div class="app-cards-list" id="app-cards-list"></div>
<div class="alert alert-warning">Si vous ne trouvez pas l'applications que vous recherchez, vous pouvez la rechercher dans les apps communautaires (working, inprogress et notworking) ou remplir la <a href="/apps_wishlist_fr">liste d'apps souhaitées</a>.</div>
<style>
/*=================================================
Search bar
=================================================*/
#filter-app-cards, #app-cards-list {
width:100%;
}
/*===============================================*/
/*=================================================
Force return space after card list
=================================================*/
#app-cards-list:after {
content:'';
display:block;
clear: both;
}
/*===============================================*/
/*=================================================
App card
=================================================*/
.app-card {
margin-bottom:10px;
width:270px;
float:left;
min-height: 1px;
margin-right: 10px;
}
/*===============================================*/
/*=================================================
App card body
=================================================*/
.app-card .panel-body > h3 {
margin-top:0;
margin-bottom:5px;
font-size:1.2em;
}
.app-card .category {
height:50px;
}
.app-card .category .label, .app-card-date-maintainer {
font-size:0.7em;
}
.app-card-date-maintainer {
text-align:right;
max-height: 18px;
}
.app-card-desc {
height:100px;
}
/*===============================================*/
/*=================================================
App card footer
=================================================*/
.app-card .btn-group {
width:100%;
margin-left: 0px;
}
.app-card > .btn-group > .btn{
border-bottom:0;
}
.app-card > .btn-group > .btn:first-child {
border-left:0;
border-top-left-radius:0;
}
.app-card > .btn-group > .btn:last-child {
border-right:0;
border-top-right-radius:0;
margin-left: 0px;
}
/*===============================================*/
</style>
<script type="text/template" id="app-template2">
<div class="app-card_{app_id} app-card panel panel-default">
<script type="text/template" id="app-template">
<div class="panel panel-default">
<div class="panel-heading">
<div class="panel-title">
<a data-toggle="collapse" data-parent="#app-accordion" href="#app_{app_id}">{app_name} <em><small>({app_id})</small></em></a>
</div>
</div>
<div class="panel-collapse collapse app_{app_id}">
<div class="panel-body">
<p><strong>Description</strong> : {app_description}</p>
<p><strong>Dernière mise à jour (UTC)</strong> : {app_update}</p>
<p><strong>Niveau</strong>: {app_level}</p>
<p><strong>Mainteneur</strong> : {app_maintainer} <small class="text-muted">({app_mail})</small></p>
<p><strong>Dépôt git</strong> : <a href="{app_git}" target="_blank">{app_git}</a> <small class="text-muted">({app_branch})</small></p>
<a href="#/app_{app_id}_fr" target="_blank" class="btn btn-default">Documentation</a>
<h3>{app_name}</h3>
<div class="category"></div>
<div class="app-card-desc">{app_description}</div>
<div class="app-card-date-maintainer">
<span class="glyphicon glyphicon-refresh"></span> {app_update} -
<span class="glyphicon glyphicon-user"></span> {app_maintainer}
</div>
</div>
<div class="btn-group" role="group">
<a href="{app_git}" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Code</a>
<a href="app_{app_id}_fr" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-book" aria-hidden="true"></span> Doc</a>
<a href="https://install-app.yunohost.org/?app={app_id}" target="_BLANK" type="button" class="btn btn-{app_install_bootstrap} col-sm-4 active">Installer</a>
</div>
</div>
</script>
<br />
<div class="alert alert-info">Toutes les applications officielles sont sous licences libres.</div>
<script>
function timeConverter(UNIX_timestamp) {
var a = new Date(UNIX_timestamp*1000);
var months = ['janvier','février','mars','avril','mai','juin','juillet','août','septembre','octobre','novembre','décembre'];
var months = ['January','February','March','April','May','June','July','August','September','October','November','December'];
var year = a.getFullYear();
var month = months[a.getMonth()];
var date = a.getDate();
@ -51,33 +140,118 @@ function timeConverter(UNIX_timestamp) {
var min = a.getMinutes();
if (hour < 10) { hour = '0' + hour; }
if (min < 10) { min = '0' + min; }
var time = date+' '+month+' '+year+' à '+hour+':'+min;
var time = date+' '+month+' '+year;//+' at '+hour+':'+min
return time;
}
$(document).ready(function () {
$.getJSON('https://app.yunohost.org/official.json', function(app_list) {
// Cast as array
var app_list = $.map(app_list, function(el) { return el; });
// Hide warrant about community list
$('#community-app-list-warrant').hide();
var filters = ["validated"];
function filter(){
var filters_text = filters.map(function(el) { return '.app-' + el;}).join(', ');
var valThis = $('#filter-app-cards').val().toLowerCase();
$('.app-card').each(function(){
var text = $(this).find('h3').text().toLowerCase();
(text.indexOf(valThis) == 0 && $(this).find(filters_text).length > 0) ? $(this).show() : $(this).hide();
});
(filters.indexOf("working") == -1) ?$('#community-app-list-warrant').hide():$('#community-app-list-warrant').show();
}
//=================================================
// Search & filter bar event
//=================================================
$('#filter-app-cards').keyup(filter);
$('#app-cards-list-validated').click(function(){
filters = ["validated"];
$('#app-cards-list-filter-text').text($('#app-cards-list-validated').text());
filter();
});
$('#app-cards-list-working').click(function(){
filters = ["validated", "working"];
$('#app-cards-list-filter-text').text($('#app-cards-list-working').text());
filter();
});
$('#app-cards-list-working-inprogress').click(function(){
filters = ["notworking", "inprogress"];
$('#app-cards-list-filter-text').text($('#app-cards-list-working-inprogress').text());
filter();
});
$('#app-cards-list-all-apps').click(function(){
filters = ["validated", "working", "inprogress", "notworking"];
$('#app-cards-list-filter-text').text($('#app-cards-list-all-apps').text());
filter();
});
//=================================================
//=================================================
// Upload apps lists
//=================================================
var app_list={};
$.when(
$.getJSON('https://app.yunohost.org/community.json', {}, function(community) {
app_list.community = $.map(community, function(el) { return el; });
}),
$.getJSON('https://app.yunohost.org/official.json', {}, function(official) {
app_list.official = $.map(official, function(el) { return el; });
})
).then(function() {
app_list = app_list.official.concat(app_list.community);
// Sort alpha
app_list.sort(function(a, b){
if (a.manifest.id > b.manifest.id) {return 1;}
else if (a.manifest.id < b.manifest.id) {return -1;}
return 0;
a_state = (a.state == "validated")?4:(a.state == "working")?3:(a.state == "inprogress")?2:1;
b_state = (b.state == "validated")?4:(b.state == "working")?3:(b.state == "inprogress")?2:1;
if (a_state < b_state || a_state == b_state && a.level < b.level || a_state == b_state && a.level == b.level && a.manifest.id > b.manifest.id) {return 1;}
else if (a.manifest.id == b.manifest.id) {return 0;}
return -1;
});
$.each(app_list, function(k, infos) {
app_id = infos.manifest.id;
if (typeof infos.manifest.description.fr === 'undefined') {
infos.manifest.description.fr = infos.manifest.description.en;
app_install_bootstrap = "success";
if (infos.state === "validated") {
app_state_bootstrap = "success";
} else if (infos.state === "working") {
app_state_bootstrap = "success";
} else if (infos.state === "inprogress") {
app_state_bootstrap = "warning";
app_install_bootstrap = "danger";
} else if (infos.state === "notworking") {
app_state_bootstrap = "danger";
app_install_bootstrap = "danger";
}
html = $('#app-template').html()
if (infos.level == null ) {
infos.level = '?';
}
if (infos.level == 0 ) {
app_level_bootstrap = "danger";
app_install_bootstrap = "danger";
} else if (infos.level <= 2) {
app_level_bootstrap = "warning";
app_install_bootstrap = "danger";
} else if (infos.level >= 7) {
app_level_bootstrap = "success";
} else {
app_level_bootstrap = "default";
}
// Fill the template
html = $('#app-template2').html()
.replace(/{app_id}/g, app_id)
.replace(/{app_name}/g, infos.manifest.name)
.replace('{app_description}', infos.manifest.description.fr)
.replace(/{app_git}/g, infos.git.url)
.replace('{app_branch}', infos.git.branch)
.replace('{app_level}', infos.level)
.replace('{app_update}', timeConverter(infos.lastUpdate));
.replace('{app_update}', timeConverter(infos.lastUpdate))
.replace('{app_state_bootstrap}', app_state_bootstrap)
.replace('{app_install_bootstrap}', app_install_bootstrap);
if (infos.manifest.developer) {
html = html
@ -91,9 +265,19 @@ $(document).ready(function () {
.replace('{app_mail}', infos.manifest.maintainer.email);
}
$('#app-accordion').append(html);
$('.app_'+ app_id).attr('id', 'app_'+ app_id);
// Fill the template
$('#app-cards-list').append(html);
$('.app-card_'+ app_id).attr('id', 'app-card_'+ app_id);
$('.app-card_'+ app_id + ' .category').append(' <span class="label label-'+app_level_bootstrap+' label-as-badge">'+infos.level+'</span>');
$('.app-card_'+ app_id + ' .category').append(' <span class="label label-'+app_state_bootstrap+' label-as-badge app-'+infos.state+'">'+infos.state+'</span>');
if (infos.manifest.license && infos.manifest.license != 'free') {
$('.app-card_'+ app_id + ' .category').append(' <span class="label label-default">'+infos.manifest.license+'</span>');
}
});
filter();
});
//=================================================
});
</script>

View file

@ -1,134 +0,0 @@
# Apps in progress
<img src="/images/freshrss_logo.png" width=40>
<img src="/images/Icons_mumble.svg" width=40>
<img src="/images/Lutim_small.png" width=30>
<img src="/images/PluXml-logo_transparent.png" width=60>
<img src="/images/Etherpad.svg" width=40>
<img src="/images/gogs.svg" width=40>
<img src="/images/movim_logo.png" width=40>
<img src="/images/duniter-logo.svg" width=40>
<img src="/images/Zeronet_logo.png" width=40>
<img src="/images/jappix.png" width=50>
<a class="btn btn-lg btn-default" href="/apps_en">Official apps</a>
<a class="btn btn-lg btn-default disabled" href="/apps_in_progress_en">Apps in progress</a>
<a class="btn btn-lg btn-default" href="/apps_wishlist_en">Apps wishlist</a>
The following applications are being packaged on by a growing number of packagers.
<div class="alert alert-danger">They are **NOT** validated by the packaging team, and as such, **no official support is provided** for them.<br>
You can test and use them **at your own risk**.
</div>
You can install them through the [administration web interface](/admin) by choosing "Install custom app", or using the [moulinette](/moulinette):
```bash
yunohost app install https://github.com/<packager>/<app_repository>
```
The packagers will appreciate your remarks. If you test them and find issues, or ideas for improvement, do not hesitate to file issues directly on their repositories project page.
<div class="clearfix" style="margin-bottom: 1em;">
<div class="btn btn-default btn-xs pull-right" data-toggle="collapse" data-target="#app-accordion2-notworking .collapse">Collapse broken</div>
<div class="btn btn-default btn-xs pull-right" data-toggle="collapse" data-target="#app-accordion2-inprogress .collapse">Collapse in progress</div>
<div class="btn btn-default btn-xs pull-right" data-toggle="collapse" data-target="#app-accordion2-working .collapse">Collapse working</div>
</div>
<h2>Declared as working applications</h2>
<p><b style="color: red">Important: it's the application maintaineur that qualify his application as working, not the YunoHost core team. Install it at your own risks. We won't provide support for it.</b></p>
<div class="panel-group" id="app-accordion2-working"></div>
<h2>Work in progress applications</h2>
<p>Those are <b>not yet finished</b> applications, we <b>strongly advise against installing them</b> except if you know what you are doing.</p>
<div class="panel-group" id="app-accordion2-inprogress"></div>
<h2>Broken applications</h2>
<p>Do <b>NOT</b> install them, they are here as reference while they aren't fixed.</p>
<div class="panel-group" id="app-accordion2-notworking"></div>
<script type="text/template" id="app-template2">
<div class="panel panel-default panel-{app_state_bootstrap}">
<div class="panel-heading">
<div class="panel-title">
<a data-toggle="collapse" data-parent="#app-accordion" href="apps_in_progress/#app_{app_id}">{app_name} <em><small>({app_id})</small></em></a>
</div>
</div>
<div class="panel-collapse collapse app_{app_id}">
<div class="panel-body">
<p><strong>Description</strong>: {app_description}</p>
<p><strong>Last update (UTC)</strong>: {app_update}</p>
<p><strong>Level</strong>: {app_level}</p>
<p><strong>Maintainer</strong>: {app_maintainer} <small class="text-muted">({app_mail})</small></p>
<p><strong>Git repository</strong>: <a href="{app_git}" target="_blank">{app_git}</a> <small class="text-muted">({app_branch})</small></p>
<p><strong>Software license</strong>: {app_license}</p>
</div>
</div>
</script>
<script>
function timeConverter(UNIX_timestamp) {
var a = new Date(UNIX_timestamp*1000);
var months = ['January','February','March','April','May','June','July','August','September','October','November','December'];
var year = a.getFullYear();
var month = months[a.getMonth()];
var date = a.getDate();
var hour = a.getHours();
var min = a.getMinutes();
if (hour < 10) { hour = '0' + hour; }
if (min < 10) { min = '0' + min; }
var time = date+' '+month+' '+year+' at '+hour+':'+min;
return time;
}
$(document).ready(function () {
$.getJSON('https://app.yunohost.org/community.json', function(app_list) {
// Cast as array
var app_list = $.map(app_list, function(el) { return el; });
// Sort alpha
app_list.sort(function(a, b){
if (a.manifest.id > b.manifest.id) {return 1;}
else if (a.manifest.id < b.manifest.id) {return -1;}
return 0;
});
$.each(app_list, function(k, infos) {
app_id = infos.manifest.id;
if (infos.state === "working") {
app_state_bootstrap = "default";
} else if (infos.state === "inprogress") {
app_state_bootstrap = "warning";
} else if (infos.state === "notworking") {
app_state_bootstrap = "danger";
}
html = $('#app-template2').html()
.replace(/{app_id}/g, app_id)
.replace(/{app_name}/g, infos.manifest.name)
.replace('{app_description}', infos.manifest.description.en)
.replace(/{app_git}/g, infos.git.url)
.replace('{app_branch}', infos.git.branch)
.replace('{app_level}', infos.level)
.replace('{app_update}', timeConverter(infos.lastUpdate))
.replace('{app_state}', infos.state)
.replace('{app_state_bootstrap}', app_state_bootstrap)
.replace('{app_license}', infos.manifest.license);
if (infos.manifest.developer) {
html = html
.replace('{app_maintainer}', infos.manifest.developer.name)
.replace('{app_mail}', infos.manifest.developer.email);
}
if (infos.manifest.maintainer) {
html = html
.replace('{app_maintainer}', infos.manifest.maintainer.name)
.replace('{app_mail}', infos.manifest.maintainer.email);
}
$('#app-accordion2-' + infos.state).append(html);
$('.app_'+ app_id).attr('id', 'app_'+ app_id);
});
});
});
</script>

View file

@ -1,137 +0,0 @@
# Apps en cours
<img src="/images/freshrss_logo.png" width=40>
<img src="/images/Icons_mumble.svg" width=40>
<img src="/images/Lutim_small.png" width=30>
<img src="/images/PluXml-logo_transparent.png" width=60>
<img src="/images/Etherpad.svg" width=40>
<img src="/images/gogs.svg" width=40>
<img src="/images/movim_logo.png" width=40>
<img src="/images/duniter-logo.svg" width=40>
<img src="/images/Zeronet_logo.png" width=40>
<img src="/images/jappix.png" width=50>
<a class="btn btn-lg btn-default" href="/apps_fr">Apps officielles</a>
<a class="btn btn-lg btn-default disabled" href="/apps_in_progress_fr">Apps en cours</a>
<a class="btn btn-lg btn-default" href="/apps_wishlist_fr">Apps souhaitées</a>
De plus en plus dapplications sont mises à disposition par les packagers.
<div class="alert alert-danger">Ces applications **nont pas** été validées par léquipe YunoHost et **ne sont pas** officiellement prises en charge.<br>Vous pouvez les tester et les utiliser à **vos risques et périls**.
</div>
Elles sont installables avec l[interface web dadministration](/admin) ou avec la moulinette :
```bash
yunohost app install https://github.com/<packageur>/<dépôt_app>
```
Nhésitez pas à vous créer un compte GitHub pour faire part de vos remarques aux packagers (sous forme d«&nbsp;issues&nbsp;») ou à leur proposer des améliorations (sous forme de «&nbsp;pull requests&nbsp;»).
<div class="clearfix" style="margin-bottom: 1em;">
<div class="btn btn-default btn-xs pull-right" data-toggle="collapse" data-target="#app-accordion2-notworking .collapse">Déplier cassées</div>
<div class="btn btn-default btn-xs pull-right" data-toggle="collapse" data-target="#app-accordion2-inprogress .collapse">Déplier en cours</div>
<div class="btn btn-default btn-xs pull-right" data-toggle="collapse" data-target="#app-accordion2-working .collapse">Déplier fonctionnelles</div>
</div>
<h2>Applications dites fonctionnelles</h2>
<p><b style="color: red">Remarque : c'est le mainteneur de l'application qui la décrit comme fonctionnelle, pas l'équipe de YunoHost. Installez la à vos risques et péril et soyez conscient que ne fournirons aucune assistance dessus.</b></p>
<div class="panel-group" id="app-accordion2-working"></div>
<h2>Applications en cours de développement</h2>
<p>Il s'agit d'application <b>pas encore fonctionnelles</b> mais en cours de développement, nous vous <b>déconseillons fortement de les installer</b> sauf si vous savez ce que vous faites.</p>
<div class="panel-group" id="app-accordion2-inprogress"></div>
<h2>Applications cassées</h2>
<p>Ne les installez <b>PAS</b>, elles sont là pour référence le temps d'être réparées.</p>
<div class="panel-group" id="app-accordion2-notworking"></div>
<script type="text/template" id="app-template2">
<div class="panel panel-default panel-{app_state_bootstrap}">
<div class="panel-heading">
<div class="panel-title">
<a data-toggle="collapse" data-parent="#app-accordion" href="#app_{app_id}">{app_name} <em><small>({app_id})</small></em></a>
</div>
</div>
<div class="panel-collapse collapse app_{app_id}">
<div class="panel-body">
<p><strong>Description</strong> : {app_description}</p>
<p><strong>Dernière mise à jour (UTC)</strong> : {app_update}</p>
<p><strong>Niveau</strong>: {app_level}</p>
<p><strong>Mainteneur</strong> : {app_maintainer} <small class="text-muted">({app_mail})</small></p>
<p><strong>Dépôt git</strong> : <a href="{app_git}" target="_blank">{app_git}</a> <small class="text-muted">({app_branch})</small></p>
<p><strong>Licence de lapplication</strong> : {app_license}</p>
</div>
</div>
</script>
<script>
function timeConverter(UNIX_timestamp) {
var a = new Date(UNIX_timestamp*1000);
var months = ['janvier','février','mars','avril','mai','juin','juillet','août','septembre','octobre','novembre','décembre'];
var year = a.getFullYear();
var month = months[a.getMonth()];
var date = a.getDate();
var hour = a.getHours();
var min = a.getMinutes();
if (hour < 10) { hour = '0' + hour; }
if (min < 10) { min = '0' + min; }
var time = date+' '+month+' '+year+' at '+hour+':'+min;
return time;
}
$(document).ready(function () {
$.getJSON('https://app.yunohost.org/community.json', function(app_list) {
// Cast as array
var app_list = $.map(app_list, function(el) { return el; });
// Sort alpha
app_list.sort(function(a, b){
if (a.manifest.id > b.manifest.id) {return 1;}
else if (a.manifest.id < b.manifest.id) {return -1;}
return 0;
});
$.each(app_list, function(k, infos) {
app_id = infos.manifest.id;
if (typeof infos.manifest.description.fr === 'undefined') {
infos.manifest.description.fr = infos.manifest.description.en;
}
if (infos.state === "working") {
app_state_bootstrap = "default";
} else if (infos.state === "inprogress") {
app_state_bootstrap = "warning";
} else if (infos.state === "notworking") {
app_state_bootstrap = "danger";
}
html = $('#app-template2').html()
.replace(/{app_id}/g, app_id)
.replace(/{app_name}/g, infos.manifest.name)
.replace('{app_description}', infos.manifest.description.fr)
.replace(/{app_git}/g, infos.git.url)
.replace('{app_branch}', infos.git.branch)
.replace('{app_level}', infos.level)
.replace('{app_update}', timeConverter(infos.lastUpdate))
.replace('{app_state}', infos.state)
.replace('{app_state_bootstrap}', app_state_bootstrap)
.replace('{app_license}', infos.manifest.license);
if (infos.manifest.developer) {
html = html
.replace('{app_maintainer}', infos.manifest.developer.name)
.replace('{app_mail}', infos.manifest.developer.email);
}
if (infos.manifest.maintainer) {
html = html
.replace('{app_maintainer}', infos.manifest.maintainer.name)
.replace('{app_mail}', infos.manifest.maintainer.email);
}
$('#app-accordion2-' + infos.state).append(html);
$('.app_'+ app_id).attr('id', 'app_'+ app_id);
});
});
});
</script>

View file

@ -1,6 +1,6 @@
# Apps wishlist
<a class="btn btn-lg btn-default" href="/apps_en">Official apps</a> <a class="btn btn-lg btn-default" href="/apps_in_progress_en">Apps in progress</a> <a class="btn btn-lg btn-default disabled" href="/apps_wishlist_en">Apps wishlist</a>
<div class="alert alert-info">Before to add an app in wishlist please check your app is not already in official or community list: see the <a href="/apps_en">apps list</a></div>
The following list is a compiled wishlist of applications that would be nice-to-have.
@ -29,7 +29,6 @@ The following list is a compiled wishlist of applications that would be nice-to-
- [Commafeed](https://github.com/Athou/commafeed)
- [Converse.js](https://conversejs.org)
- [Coquelicot](https://coquelicot.potager.org) [package](https://github.com/M5oul/coquelicot_ynh)
- [Cryptpad](https://github.com/xwiki-labs/cryptpad)
- [Cronkeep](https://github.com/cronkeep/cronkeep)
- [CronWeb](https://github.com/fisherinnovation/CronWeb)
- [Croodle](https://github.com/jelhan/croodle) Schedule a date or to do a poll on a general topics, with client-side encryption.
@ -53,7 +52,6 @@ The following list is a compiled wishlist of applications that would be nice-to-
- [GetSimple CMS](http://get-simple.info)
- [Git-annex](http://git-annex.branchable.com)
- [Gitit](http://gitit.net)
- [GitLab](http://gitlab.org)
- [Goaccess](https://goaccess.io) Web log analyser (replaces piwik without js tracking scripts)
- [Gollum](https://github.com/gollum/gollum)
- [Goploader](https://github.com/Depado/goploader)
@ -113,7 +111,6 @@ The following list is a compiled wishlist of applications that would be nice-to-
- [pdfy](https://github.com/joepie91/pdfy)
- [PeerTube](https://github.com/Chocobozzz/PeerTube)
- [Pelias](https://github.com/pelias/pelias)
- [Pelican](http://blog.getpelican.com)
- [Peps](https://github.com/MLstate/PEPS)
- [PHPList](http://www.phplist.com)
- [PHProxy](http://sourceforge.net/projects/poxy)
@ -130,7 +127,6 @@ The following list is a compiled wishlist of applications that would be nice-to-
- [Request Tracker](https://bestpractical.com)
- [Respawn 2.0](https://github.com/broncowdd/respawn)
- [Restya](http://restya.com)
- [uMap](https://umap.openstreetmap.fr/en)
- [Scramble, Browser-based PGP web mail](https://github.com/dcposch/scramble)
- [Scribbleton](https://scribbleton.com)
- [ShareLatex](https://www.sharelatex.com)
@ -143,7 +139,6 @@ The following list is a compiled wishlist of applications that would be nice-to-
- [Streama](https://github.com/dularion/streama)
- [Streisand](https://github.com/jlund/streisand)
- [SVG-Edit](https://github.com/SVG-Edit/svgedit)
- [Sympa](http://www.sympa.org)
- [Taskwarrior](https://taskwarrior.org)
- [Taiga](https://taiga.io)
- [TorChat](https://github.com/prof7bit/TorChat)
@ -158,11 +153,9 @@ The following list is a compiled wishlist of applications that would be nice-to-
- [WebODF](http://webodf.org)
- [webSync](http://furier.github.io/websync)
- [WebTorrent](https://github.com/feross/webtorrent)
- [Wekan](http://wekan.io)
- [WID](https://wid.chorem.com/site/home)
- [Wisemapping](http://www.wisemapping.com)
- [Xonotic](http://xonotic.org)
- [Yacy](http://yacy.net) [package](https://github.com/M5oul/yacy_ynh)
- [YellowCMS](http://datenstrom.se/yellow)
- [YesWiki](http://yeswiki.net/wa.php?wiki=AccueiL)
- [ZeroTier](https://github.com/zerotier/ZeroTierOne)

View file

@ -1,7 +1,3 @@
# Apps souhaitées
<a class="btn btn-lg btn-default" href="/apps_fr">Apps officielles</a>
<a class="btn btn-lg btn-default" href="/apps_in_progress_fr">Apps en cours</a>
<a class="btn btn-lg btn-default disabled" href="/apps_wishlist_fr">Apps souhaitées</a>
La liste des applications souhaitées nest maintenue quen <a href="/apps_wishlist_en">version anglaise</a>. Merci de vous y référer.

View file

@ -87,7 +87,7 @@ This Python script checks:
### Publish and ask for testing your application
* Publishing a [post on the Forum](https://forum.yunohost.org/) with the [`App integration` category](https://forum.yunohost.org/c/app-integration), to ask for testing and feedback on your application.
* Ask your application to be added to the [app repository](https://github.com/YunoHost/apps) to be displayed in the [non-official apps list](apps_in_progress_en). Specify its progress state: `notworking`, `inprogress`, or `working`.
* Ask your application to be added to the [app repository](https://github.com/YunoHost/apps) to be displayed in the [non-official apps list](apps_en). Specify its progress state: `notworking`, `inprogress`, or `working`.
- Subscribe to the [Apps mailing list](https://list.yunohost.org/cgi-bin/mailman/listinfo/apps) to be informed about packaging evolution.

View file

@ -69,7 +69,7 @@ Il sagit dun script Python qui vérifie :
### Publiez et demandez des tests de votre application
* Demandez des tests et des retours sur votre application en publiant un [post sur le Forum](https://forum.yunohost.org/) dans la [catégorie `App integration`](https://forum.yunohost.org/c/app-integration).
* Faire une demande dajout de votre application dans le [dépôt des applications](https://github.com/YunoHost/apps) afin quelle soit affichée dans [la liste des apps non officielles](apps_in_progress_fr). Préciser également son état davancement : `notworking`, `inprogress` ou `working`.
* Faire une demande dajout de votre application dans le [dépôt des applications](https://github.com/YunoHost/apps) afin quelle soit affichée dans [la liste des apps non officielles](apps_fr). Préciser également son état davancement : `notworking`, `inprogress` ou `working`.
- Inscrivez-vous à la [mailing list Apps](https://list.yunohost.org/cgi-bin/mailman/listinfo/apps) pour être tenu au courant des évolutions du packaging.

View file

@ -42,8 +42,7 @@
* [Internet service provider](/isp)
* [Generic configuration of the ISP router](/isp_box_config)
* Applications
* [Official applications](/apps_en)
* [Non-official applications](/apps_in_progress_en)
* [Applications](/apps_en)
* [Update applications](app_update_en)
* Administration
* Command-line
@ -70,17 +69,7 @@
* [User interface](user_interface)
* [Configure email client](email_configure_client_en)
* [Instant messaging usage](/XMPP)
* [Official applications](/apps)
* [Baikal](/app_baikal_en)
* [Firefox Sync](/app_ffsync_en)
* [Tiny Tiny RSS](/app_ttrss_en)
* [Transmission](/app_transmission_en)
* [Radicale](/app_radicale)
* [RoundCube](/app_roundcube_en)
* [Minidlna](app_minidlna_en)
* [Wallabag v2](/app_wallabag2)
* [Community applications](/apps_in_progress_en)
* [LimeSurvey](/app_limesurvey_en)
* [Applications](/apps)
* [Contributor guide](/contribute)
* Developement
@ -96,7 +85,6 @@
* [Trap usage](packaging_apps_trap_fr)
* [Applications levels](packaging_apps_levels_fr)
* [YEP - YunoHost Enhancement Proposals](packaging_apps_guidelines_fr)
* [Applications in progress](/apps_in_progress_en)
* [Wishlist of applications](/apps_wishlist_en)
* [Contributing to the YunoHost core](/dev)
* [Creation of system packages](/build_system_en)

View file

@ -49,7 +49,6 @@
* [Orange](/isp_orange_fr)
* Applications
* [Applications officielles](/apps_fr)
* [Applications non officielles](/apps_in_progress_en)
* [Mise à jour des applications](app_update_fr)
* Administration
* En ligne de commande
@ -78,19 +77,7 @@
* [Interface utilisateur](user_interface)
* [Configurer un client email](email_configure_client_fr)
* [Utiliser la messagerie instantanée XMPP](/XMPP_fr)
* [Applications officielles](/apps_fr)
* [Baïkal](/app_baikal_fr)
* [Firefox Sync](/app_ffsync_fr)
* [Jappix](/app_jappix_fr)
* [Nextcloud](app_nextcloud_fr)
* [Tiny Tiny RSS](/app_ttrss_fr)
* [Transmission](/app_transmission_fr)
* [Radicale](/app_radicale_fr)
* [RoundCube](/app_roundcube_fr)
* [Minidlna](app_minidlna_fr)
* [Wallabag v2](/app_wallabag2_fr)
* [Applications communautaires](/apps_in_progress_fr)
* [LimeSurvey](/app_limesurvey_fr)
* [Applications](/apps_fr)
* [Guide du contributeur](/contribute_fr)
* Développement
@ -110,7 +97,6 @@
* [Usage de trap](packaging_apps_trap_fr)
* [Niveaux des applications](packaging_apps_levels_fr)
* [YEP - YunoHost Enhancement Proposals](packaging_apps_guidelines_fr)
* [Packages dapplications en cours de développement](/apps_in_progress_fr)
* [Liste de proposition dapplications](/apps_wishlist_fr)
* [Contribuer au cœur de YunoHost](/dev_fr)
* [Création de paquets système](/build_system_fr)

View file

@ -4,13 +4,4 @@
* [User interface](user_interface)
* [Configure an email client](/email)
* [Instant messaging usage](/XMPP)
* [Official applications](/apps)
* [Baikal](/app_baikal_en)
* [Firefox Sync](/app_ffsync_en)
* [Tiny Tiny RSS](/app_ttrss_en)
* [Transmission](/app_transmission_en)
* [Radicale](/app_radicale)
* [RoundCube](/app_roundcube_en)
* [Wallabag v2](/app_wallabag2)
* [Community applications](/apps_in_progress_en)
* [LimeSurvey](/app_limesurvey_en)
* [Applications](/apps)

View file

@ -3,13 +3,4 @@
* [Linterface utilisateur](user_interface)
* [La messagerie électronique (email)](/email_fr)
* [La messagerie instantanée et les réseaux sociaux XMPP](/XMPP_fr)
* [Les applications officielles](/apps_fr)
* [Firefox Sync](/app_ffsync_fr)
* [Jappix](/app_jappix_fr)
* [Tiny Tiny RSS](/app_ttrss_fr)
* [Transmission](/app_transmission_fr)
* [Radicale](/app_radicale_fr)
* [RoundCube](/app_roundcube_fr)
* [Wallabag v2](/app_wallabag2_fr)
* [Applications communautaires](/apps_in_progress_fr)
* [LimeSurvey](/app_limesurvey_fr)
* [Les applications](/apps_fr)