Commit b28e1a44 authored by  JosephK's avatar JosephK

[eslint] nettoyage comma-dangle

parent b0647310
{
"env": {
"jquery": true,
"browser": true,
"es6": true
},
"extends": [
"airbnb-base",
"plugin:vue/recommended"
],
"globals": {
"__webpack_public_path__": true,
"gl": false,
"gon": false,
"localStorage": false
},
"parserOptions": {
"parser": "babel-eslint"
},
"plugins": [
"filenames",
"import",
"html",
"promise"
],
"settings": {
"html/html-extensions": [".html", ".html.raw"],
"import/resolver": {
"webpack": {
"config": "./config/webpack.config.js"
}
}
},
"rules": {
"filenames/match-regex": [2, "^[a-z0-9_]+$"],
"import/no-commonjs": "error",
"no-multiple-empty-lines": ["error", { "max": 1 }],
"promise/catch-or-return": "error",
"no-underscore-dangle": ["error", { "allow": ["__"]}],
"vue/html-self-closing": ["error", {
"html": {
"void": "always",
"normal": "never",
"component": "always"
},
"svg": "always",
"math": "always"
}]
}
}
{
"bitwise" : true, // Prohibit bitwise operators (&, |, ^, etc.).
"curly" : true, // Require {} for every new block or scope.
"eqeqeq" : true, // Require triple equals i.e. `===`.
"forin" : true, // Tolerate `for in` loops without `hasOwnPrototype`.
"immed" : true, // Require immediate invocations to be wrapped in parens e.g. `( function(){}() );`
"latedef" : true, // Prohibit variable use before definition.
"newcap" : true, // Require capitalization of all constructor functions e.g. `new F()`.
"noarg" : true, // Prohibit use of `arguments.caller` and `arguments.callee`.
"noempty" : true, // Prohibit use of empty blocks.
"nonew" : true, // Prohibit use of constructors for side-effects.
"plusplus" : true, // Prohibit use of `++` & `--`.
"regexp" : true, // Prohibit `.` and `[^...]` in regular expressions.
"undef" : true, // Require all non-global variables be declared before they are used.
"strict" : false, // Require `use strict` pragma in every file.
"trailing" : true, // Prohibit trailing whitespaces.
"asi" : true, // Tolerate Automatic Semicolon Insertion (no semicolons).
"browser" : true, // Standard browser globals e.g. `window`, `document`.
"devel" : false, // Allow development statements e.g. `console.log();`.
"jquery" : true, // Enable globals exposed by jQuery JavaScript library.
"nomen" : false, // Prohibit use of initial or trailing underbars in names.
"onevar" : false, // Allow only one `var` statement per function.
"passfail" : false, // Stop on first error.
"white" : true, // Check against strict whitespace and indentation rules.
"indent" : 2 // Specify indentation spacing
}
\ No newline at end of file
/***********************************************************************
/** ****************************************************************** *
* Config des sites *
***********************************************************************/
* ******************************************************************* */
// Pour savoir à quoi correspondent les options de config, aller à la fin
// de nav.js. La variable c$ contient toutes les valeurs par défaut ainsi
// que les explications pour comprendre à quoi ça correspond.
......@@ -8,7 +8,7 @@
var l$ = l$ || {};
var n$ = n$ || {};
var i$ = i$ || undefined;
var i$Lang = i$Lang || undefined; /** À remplacer **/
var i$Lang = i$Lang || undefined; /** À remplacer */
var f$ = f$ || undefined;
// Alias
......@@ -16,43 +16,44 @@ var f$ = f$ || undefined;
// Cette variable n'est utilisée que pour charger les fichiers ext_css,
// credits et placer un tracker sur un lien de la modale Soutenir
switch (n$.site) {
case 'noenaute' : n$.site = 'pouhiou'; break;
case 'huit.re' : n$.site = 'link'; break;
case 'tontonroger' : n$.site = 'bee'; break;
case 'trouvons' : n$.site = 'bee'; break;
case 'noenaute': n$.site = 'pouhiou'; break;
case 'huit.re': n$.site = 'link'; break;
case 'tontonroger': n$.site = 'bee'; break;
case 'trouvons': n$.site = 'bee'; break;
// no default
}
// Config pour domaine et sous-domaine
if (i$(/framaboard/i, 'h')) { n$.site = 'board'; }
if (i$(/framadate/i, 'h')) { n$.site = 'date'; }
if (i$(/framacalc/i, 'h')) { n$.site = 'calc'; }
if (i$(/framaboard/i, 'h')) { n$.site = 'board'; }
if (i$(/framadate/i, 'h')) { n$.site = 'date'; }
if (i$(/framacalc/i, 'h')) { n$.site = 'calc'; }
if ( i$('mypads.framapad.org', 'h') ) { n$.site = 'mypads'; }
if ( (i$(/.framapad/i, 'h') && !i$(/mypads./i, 'h')) ||
(i$(/mypads.framapad/i, 'h') && i$('/p/')) ) {
if (i$('mypads.framapad.org', 'h')) { n$.site = 'mypads'; }
if ((i$(/.framapad/i, 'h') && !i$(/mypads./i, 'h')) ||
(i$(/mypads.framapad/i, 'h') && i$('/p/'))) {
n$.site = 'etherpad';
}
switch (n$.site) {
case 'agent':
if( i$(/framatruc/i, 'h') ) {
/** Test nouvelle config en prod **/
if (i$(/framatruc/i, 'h')) {
/** Test nouvelle config en prod */
l$ = {};
} else {
/** Config "agent" ailleurs (notamment sur /test/*.html) **/
/** Config "agent" ailleurs (notamment sur /test/*.html) */
n$.name = 'Framapic';
// Utilisation d'un hash pour switcher/test la config iframe
if(i$('#iframe')) { n$.inframe = true; }
if (i$('#iframe')) { n$.inframe = true; }
// Conf de démo par défaut
l$ = {
css: { order: '012345', ext: true },
footer: false,
fixed: true,
credits: 'pad'
credits: 'pad',
};
}
break;
break;
case 'forum':
n$.name = 'Framagora';
......@@ -62,178 +63,181 @@ switch (n$.site) {
modal: {
info: [
'Fermeture de Framagora',
[ '<p>Après 15 années d’existence, le forum historique de Framasoft, ferme ses portes. Pour les nostalgiques et les curieux, il reste toujours possible de consulter les discussions mais c’est maintenant le forum <a href="https://framacolibri.org" style="text-decoration:none"><b class="violet">Frama</b><b class="jaune">colibri</b></a> qui prend la relève.</p>',
[
'<p>Après 15 années d’existence, le forum historique de Framasoft, ferme ses portes. Pour les nostalgiques et les curieux, il reste toujours possible de consulter les discussions mais c’est maintenant le forum <a href="https://framacolibri.org" style="text-decoration:none"><b class="violet">Frama</b><b class="jaune">colibri</b></a> qui prend la relève.</p>',
'<p>Nous avions mis en place <a href="https://framacolibri.org" style="text-decoration:none"><b class="violet">Frama</b><b class="jaune">colibri</b></a> en 2015 pour permettre aux bénévoles souhaitant participer aux projets de Framasoft de s’organiser sur un forum vierge et moderne. Aujourd’hui, la dynamique est bien là.</p>',
'<p>Nous y avons donc reporté les quelques catégories de Framagora qui étaient encore un peu actives&nbsp;:<p><ul>',
'<li><a href="https://framacolibri.org/c/framasoft-vous/cherche-logiciel-libre-pour">Cherche logiciel libre pour…</a></li>',
'<li><a href="https://framacolibri.org/c/framasoft-vous/ask-frama">Questions / réponses</a></li>',
'<li><a href="https://framacolibri.org/c/qualite/framakey">Framakey</a></li>',
'<li><a href="https://framacolibri.org/c/qualite">Améliorons ensemble les outils Framasoft</a></li>',
'<li><a href="https://framacolibri.org/c/framasoft-vous/presentations">Présentation des membres</a></li>',
' <li><a href="https://framacolibri.org/c/framasoft-vous/cherche-logiciel-libre-pour">Cherche logiciel libre pour…</a></li>',
' <li><a href="https://framacolibri.org/c/framasoft-vous/ask-frama">Questions / réponses</a></li>',
' <li><a href="https://framacolibri.org/c/qualite/framakey">Framakey</a></li>',
' <li><a href="https://framacolibri.org/c/qualite">Améliorons ensemble les outils Framasoft</a></li>',
' <li><a href="https://framacolibri.org/c/framasoft-vous/presentations">Présentation des membres</a></li>',
'</ul>',
'<p>Si vous avez des questions, on se retrouve là-bas… <img src="https://framacolibri.org/images/emoji/emoji_one/wink.png?v=0" alt=";)" style="width:20px"/></p><p class="text-center"><a href="https://framacolibri.org" class="btn btn-default"><b>https://</b><b class="violet">frama</b><b class="jaune">colibri</b><b>.org</b></a></p>'
].join('')
]
'<p>Si vous avez des questions, on se retrouve là-bas… <img src="https://framacolibri.org/images/emoji/emoji_one/wink.png?v=0" alt=";)" style="width:20px"/></p><p class="text-center"><a href="https://framacolibri.org" class="btn btn-default"><b>https://</b><b class="violet">frama</b><b class="jaune">colibri</b><b>.org</b></a></p>',
].join(''),
],
},
footer: false
footer: false,
};
break;
break;
case 'bag':
l$ = { mute: i$('framabag.org/u') };
break;
break;
case 'bee':
l$ = {
js: {
ext: function() {
if( jQuery('.explain').length ) { jQuery('#q').focus(); }
ext: function () {
if (jQuery('.explain').length) { jQuery('#q').focus(); }
jQuery('.footer').hide();
jQuery('body').css('margin-bottom','0');
}
}
jQuery('body').css('margin-bottom', '0');
},
},
};
break;
break;
case 'bin':
l$ = {
js: { video: true },
modal: {
don: ['onstart', 'd’utiliser', 'utiliser '+n$.name]
}
don: ['onstart', 'd’utiliser', 'utiliser ' + n$.name],
},
};
break;
break;
case 'blog':
l$ = {
js: { audio: true, video: true },
optin: ['#commentform #email'],
fixed : true
fixed: true,
};
break;
break;
case 'board':
if (i$('.framaboard')) { // dans Kanboard
l$ = {
js: {
b$: 'html',
ext: function() {
ext: function () {
jQuery('h1 .logo a').html('<b class="violet">Frama</b><b class="vert">board</b>');
jQuery('h1 .logo').removeClass('logo');
jQuery(
'a[href$="?controller=UserCreationController&action=show&remote=1"],'+
'a[href^="/?controller=UserViewController&action=external"],'+
'input[name="is_ldap_user"]')
jQuery([
'a[href$="?controller=UserCreationController&action=show&remote=1"]',
'a[href^="/?controller=UserViewController&action=external"]',
'input[name="is_ldap_user"]'].join())
.parent().hide();
}
},
},
css: { order: '015234', b$: false, ext: true },
footer: false,
mute: true
mute: true,
};
} else {
l$.optin = ['#registration #email'];
}
break;
break;
case 'book':
l$ = {
fixed : true,
modal: { don: ['a[href*="download-monitor/download.php?id="]'] }
fixed: true,
modal: { don: ['a[href*="download-monitor/download.php?id="]'] },
};
break;
break;
case 'bookin':
l$ = {
js: {
ext: function() { jQuery('.ui-page').css('margin-top','-42px'); }
ext: function () { jQuery('.ui-page').css('margin-top', '-42px'); },
},
css: { ext: i$('framabookin.org/b') },
mute: i$('framabookin.org/b'),
fixed: true,
footer: !i$('framabookin.org/b')
footer: !i$('framabookin.org/b'),
};
break;
break;
case 'bot' :
case 'bot':
l$ = { mute: true, footer: false };
break;
break;
case 'calc':
// Calcs à onglets sont dans des frame
try {
if(top.location.href.indexOf('framacalc.org/=') > -1) {
document.getElementById("framanav_container").style="height:42px; opacity:0";
n$.inframe = false;
}
} catch(e) { }
if (window.top.location.href.indexOf('framacalc.org/=') > -1) {
document.getElementById('framanav_container').style = 'height:42px; opacity:0';
n$.inframe = false;
}
} catch (e) {
// continue regardless of error
}
if (i$('framacalc.org/_start') || i$('https://framacalc.org/', 'u')) {
// Si on est sur la page d'accueil
l$.modal = {
don: ['a[href*="framacalc.org/"]', 'd’utiliser', 'créer un calc']
don: ['a[href*="framacalc.org/"]', 'd’utiliser', 'créer un calc'],
};
l$.js = {ext : function(){ jQuery('#drop label:eq(0)').hide(); }};
l$.js = { ext: function () { jQuery('#drop label:eq(0)').hide(); } };
} else if (i$('lite.framacalc.org/_start') || i$('https://lite.framacalc.org/', 'u')) {
// Si on est sur la page d'accueil
l$.modal = {
don: ['a[href*="lite.framacalc.org/"]', 'd’utiliser', 'créer un calc']
don: ['a[href*="lite.framacalc.org/"]', 'd’utiliser', 'créer un calc'],
};
l$.js = {ext : function(){ jQuery('#drop label:eq(0)').hide(); }};
l$.js = { ext: function () { jQuery('#drop label:eq(0)').hide(); } };
} else { // dans Ethercalc
l$ = {
js: {
ext: function() { jQuery(window).trigger('resize'); }
ext: function () { jQuery(window).trigger('resize'); },
},
css: {
b$: !n$.inframe,
ext: true
ext: true,
},
mobile: false,
mute: true,
footer: false,
host: 'ovh'
host: 'ovh',
};
}
break;
break;
case 'carte':
l$.modal = { don: ['a.btn-primary[href*="/map/new/"]', 'd’utiliser', 'créer une carte'] };
if(i$('/map/') && !n$.inframe) {
if (i$('/map/') && !n$.inframe) {
l$.mute = true;
l$.footer = false;
l$.css = { ext: true };
}
break;
break;
case 'clic':
l$ = {
js: {
b$: 'html',
ext: function() {
ext: function () {
jQuery('body > .navbar-default').css('background-color', '#fff');
jQuery('body').css('background-color', '#eee');
}
}
},
},
};
break;
break;
case 'colibri':
l$ = {
css: { ext: true },
mute: true,
footer: false
footer: false,
};
break;
break;
case 'connard' :
case 'connard':
l$ = {
css: { frama: false },
mute: true,
icons: { keep: true },
footer: false
footer: false,
};
break;
break;
case 'contact':
l$ = {
......@@ -242,395 +246,371 @@ switch (n$.site) {
fixed: true,
optin: ['#wpcf7-f24-p5-o1 .wpcf7-email'],
};
break;
break;
case 'date':
l$.js = { ext: i$('framadate.org', 'h') };
if( i$Lang('fr') ) {
if (i$Lang('fr')) {
l$.modal = { don: ['a[href*="create_poll.php?"]', 'd’utiliser', 'créer un sondage'] };
if( i$('create_poll.php?') ) {
if (i$('create_poll.php?')) {
l$.optin = ['#formulaire input#email'];
}
}
break;
break;
case 'degooglisons-internet':
l$ = { mute: true };
break;
break;
case 'dvd':
l$ = {
js: { video : true },
js: { video: true },
modal: { don: ['a[href*="iso.framadvd.org"]'] },
fixed: true
fixed: true,
};
break;
break;
case 'drive':
l$ = {
fixed: true,
};
if( (i$('index.php/app') && !i$('registration')) || i$('index.php/setting') ) {
if ((i$('index.php/app') && !i$('registration')) || i$('index.php/setting')) {
l$.footer = false;
l$.mute = true;
} else {
l$.js = { video: true };
}
break;
break;
case 'drop':
l$.js = {
ext: function(){
if( !i$('https://framadrop.org/', 'u') ) {
$('main .row:last,main hr:last').hide();
}
},
video: true
ext: function () {
if (!i$('https://framadrop.org/', 'u')) {
$('main .row:last,main hr:last').hide();
}
},
video: true,
};
break;
break;
case 'games':
l$.modal = { don: ['.play a', 'd’utiliser', 'jouer'] };
break;
break;
case 'key':
l$ = {
js: {
ext: function () {
jQuery('#sidebar a.wikilink[href$="SideBar?action=edit"]').attr('href',window.location.href+'?action=edit'); // Bouton edit
jQuery('#sidebar div[style*="background-color: rgb(238"]:contains("Framablog")').hide(); // Flux RSS Framablog
}
},
fixed: true,
modal: { don: ['a[href*="files.framakey.org"]'] }
};
break;
l$.modal = { don: ['a[href*="framaclic.org"]'] };
break;
case 'libre':
l$ = {
js: {
ext: function() {
if(n$.inframe) {
f$('.main-container').addClass('container-fluid').removeClass('container ombre').css({'margin':'0','padding-top':'10px','padding-bottom':'10px'});
ext: function () {
if (n$.inframe) {
f$('.main-container').addClass('container-fluid').removeClass('container ombre').css({ 'margin': '0', 'padding-top': '10px', 'padding-bottom': '10px' });
f$('#page-header,.region-navigation-wrapper,.region-sidebar-first-wrapper,.region-content-wrapper .breadcrumb,.region-content-wrapper .tabs--primary,#region-content .view-title,#region-content .view-interets-voisins').hide();
f$('.region-content-wrapper').css({'width':'100%','float':'none','margin':'0'});
f$('a').attr('target','_blank');
f$('body').css('background','white');
f$('.region-content-wrapper').css({ 'width': '100%', 'float': 'none', 'margin': '0' });
f$('a').attr('target', '_blank');
f$('body').css('background', 'white');
}
}
},
},
alert: [
'info',
[ '<b class="violet">Frama</b><b class="bleu">libre</b>, l’annuaire des logiciels libres de l’association <b class="violet">Frama</b><b class="orange">soft</b>, ',
[
'<b class="violet">Frama</b><b class="bleu">libre</b>, l’annuaire des logiciels libres de l’association <b class="violet">Frama</b><b class="orange">soft</b>, ',
'<a href="https://framablog.org/2017/03/21/framalibre-lannuaire-du-libre-renait-entre-vos-mains/" title="consulter l’annonce sur le Framablog">fait peau neuve</a>.<br>',
'Certains liens prééxistants ne sont plus valides. <a href="https://contact.framasoft.org/foire-aux-questions/#libre_v2">Vous avez du mal à vous y retrouver ?</a>'
].join('')
]
'Certains liens prééxistants ne sont plus valides. <a href="https://contact.framasoft.org/foire-aux-questions/#libre_v2">Vous avez du mal à vous y retrouver ?</a>',
].join(''),
],
};
break;
break;
case 'link':
l$ = {
js: { video: true },
modal: {
don : ['onstart', 'd’utiliser', 'utiliser '+n$.name]
}
don: ['onstart', 'd’utiliser', 'utiliser ' + n$.name],
},
};
break;
break;
case 'listes':
l$ = {
js: {
ext: function() {
ext: function () {
f$('footer:not([id])').remove();
f$('header .row, main.row').addClass('ombre');
f$('header h1').css('margin-top','30px');
f$('main').css('margin-bottom','30px');
}
}
f$('header h1').css('margin-top', '30px');
f$('main').css('margin-bottom', '30px');
},
},
};
break;
break;
case 'maestro':
l$ = {
js: { b$: 'html'},
mute: i$('/p/')
js: { b$: 'html' },
mute: i$('/p/'),
};
break;
break;
case 'mindmap':
if(i$('framindmap.org/mindmaps')) { // Dans Mindmaps
if (i$('framindmap.org/mindmaps')) { // Dans Mindmaps
l$ = {
js: { j$: 'noConflict' },
css: { ext: true },
mute: true,
footer: false
footer: false,
};
} else { // Dans Wisemapping (et accueil)
l$ = {
js: { video: true },
css: { b$: false, ext: true },
optin: ['#user #email'],
mute: (!i$('framindmap.org/c/login') && !i$('framindmap.org/c/user/registration'))
mute: (!i$('framindmap.org/c/login') && !i$('framindmap.org/c/user/registration')),
};
if(i$('framindmap.org/c/maps/') && !i$('/edit')) {
l$.modal = { don: ['onstart', 'd’utiliser', 'utiliser '+n$.name] };
if (i$('framindmap.org/c/maps/') && !i$('/edit')) {
l$.modal = { don: ['onstart', 'd’utiliser', 'utiliser ' + n$.name] };
}
if(i$('framindmap.org/c/maps') && i$('/edit')) {
if (i$('framindmap.org/c/maps') && i$('/edit')) {
// [Fix] Suppression de la nav dans l'éditeur
var f$_navcontainer = document.getElementById('framanav_container');
f$_navcontainer.parentNode.removeChild(f$_navcontainer);
}
}
break;
break;
case 'minetest':
l$.js = { video: true };
if(i$('/carte/')) {
if (i$('/carte/')) {
l$.mute = true;
l$.footer = false;
}
break;
break;
case 'my':
if(i$('source=bookmarklet')) {
if (i$('source=bookmarklet')) {
n$.inframe = true;
l$ = {
js: {
ext: function() {
jQuery('#loginform').append(
[ '<p class="alert alert-warning"><b>Rappel&nbsp;:</b> MyFrama sert à ',
'regrouper en un même endroit vos liens (notament vos pads, calcs, sondages, etc). ',
'Il ne permet <strong>pas de créer un compte unique</strong> pour ',
'accéder à l’ensemble des services de Framasoft.</p>'
].join('')
);
}
ext: function () {
jQuery('#loginform').append([
'<p class="alert alert-warning"><b>Rappel&nbsp;:</b> MyFrama sert à ',
'regrouper en un même endroit vos liens (notament vos pads, calcs, sondages, etc). ',
'Il ne permet <strong>pas de créer un compte unique</strong> pour ',
'accéder à l’ensemble des services de Framasoft.</p>',
].join(''));
},
},
mute: true,
footer: false
footer: false,
};
} else {
l$ = {
js: {
ext: function() {
if(n$.inframe) {
ext: function () {
if (n$.inframe) {
f$('#linklist').addClass('container-fluid').removeClass('container');
f$('#pageheader').hide();
f$('a').attr('target','_blank');
f$('a').attr('target', '_blank');
}
}
}
},
},
};
}
break;
break;
case 'news':
if(i$('framanews.org/ttrss')) {
if (i$('framanews.org/ttrss')) {
l$ = {
js: {
ext: function() { jQuery(window).trigger('resize'); }
ext: function () { jQuery(window).trigger('resize'); },
},
css: { ext: true },
mute: true,
footer: false
footer: false,
};
}
break;
break;
case 'pack':
l$ = {
modal: { don: ['onstart', 'd’utiliser','utiliser '+n$.name] },
modal: { don: ['onstart', 'd’utiliser', 'utiliser ' + n$.name] },
mute: i$('/admin'),
footer: !i$('/admin')
footer: !i$('/admin'),
};
break;
break;
//-- <framapad> --------------------------------------------------------
// <framapad> --------------------------------------------------------
case 'pad':
l$ = {
js: { video: true },
modal: { don: ['a[href*=".framapad.org/p/"]', 'd’utiliser','créer un pad'] }
modal: { don: ['a[href*=".framapad.org/p/"]', 'd’utiliser', 'créer un pad'] },
};
break;
break;
case 'mypads':
n$.name = 'Framapad';
l$ = {
js: {
ext: true
ext: true,
},
mute: true,
footer: false,
credits: 'pad'
credits: 'pad',
};
break;
break;
case 'etherpad': // dans Etherpad
n$.name = 'Framapad';
l$ = {
js: {
ext: function () {
jQuery('#loading').delay(2000).append('<p class="small">Si le pad refuse de s’afficher, essayez de télécharger<br/>l’export <a href="'+location.href+'/export/html">html</a> ou <a href="'+location.href+'/export/txt">txt</a> de votre document et <a href="https://contact.framasoft.org/#framapad">contactez-nous</a>.</p>');
if(!n$.inframe) {
var addMaestroBtn = setInterval(function() {
if(jQuery('#editbar .menu_right').length && !jQuery('#maestroBtn').length ) {
jQuery('#editbar .menu_right').prepend(
[ '<li id="maestroBtn"><a title="Ajouter une visio-conférence" href="'+n$.maestro+'">',
'<button class="buttonicon fa fa-video-camera" style="top:0 !important;"></button><span class="sr-only">Visio-conférence</span>',
'</a></li>'
].join('')
);
jQuery('#loading').delay(2000).append('<p class="small">Si le pad refuse de s’afficher, essayez de télécharger<br/>l’export <a href="' + location.href + '/export/html">html</a> ou <a href="' + location.href + '/export/txt">txt</a> de votre document et <a href="https://contact.framasoft.org/#framapad">contactez-nous</a>.</p>');
if (!n$.inframe) {
var addMaestroBtn = setInterval(function () {
if (jQuery('#editbar .menu_right').length && !jQuery('#maestroBtn').length) {
jQuery('#editbar .menu_right').prepend([
'<li id="maestroBtn"><a title="Ajouter une visio-con