Spine
Juin 23, 2023, 5:15
1
Bonjour,
Je migre doucement mes plugins et widgets en pur JS et je rencontre un souci avec la fonction displayDuration, la version 4.3 de cette fonction n’est pas compatible avec du pur JS.
En 4.4, la fonction attend du pur JS en 2ème argument _el
:
if (used == 3) return durationString
if (_duration._data.seconds > 0) {
durationString += _duration._data.seconds + jeedom.config.locales[lang].duration.second
used++
}
return durationString
}
jeedom.cmd.displayDuration = function(_date, _el, _type = 'duration') {
if (isElement_jQuery(_el)) _el = _el[0] //Deprecated, keep for mobile during transition
if (_type == 'date') {
moment.locale(jeeFrontEnd.language.substring(0, 2))
if (isset(jeedom.config.locales[jeeFrontEnd.language].calendar)) {
var dateString = moment(_date, 'YYYY-MM-DD HH:mm:ss').calendar(jeedom.config.locales[jeeFrontEnd.language].calendar)
} else {
var dateString = moment(_date, 'YYYY-MM-DD HH:mm:ss').calendar(jeedom.config.locales['en_US'].calendar)
}
_el.innerHTML = dateString
return true
En 4.3, la fonction attend du jQuery en 2ème argument _el
:
if (used == 3) return durationString
if (_duration._data.seconds > 0) {
durationString += _duration._data.seconds + jeedom.config.locales[lang].duration.second
used++
}
return durationString
}
jeedom.cmd.displayDuration = function(_date, _el, _type = 'duration') {
if (_type == 'date') {
moment.locale(jeeFrontEnd.language.substring(0, 2))
if (isset(jeedom.config.locales[jeeFrontEnd.language].calendar)) {
var dateString = moment(_date, 'YYYY-MM-DD HH:mm:ss').calendar(jeedom.config.locales[jeeFrontEnd.language].calendar)
} else {
var dateString = moment(_date, 'YYYY-MM-DD HH:mm:ss').calendar(jeedom.config.locales['en_US'].calendar)
}
_el.empty().append(dateString)
return true
}
Donc si je passe un widget en pur JS en 4.3 j’ai une erreur :
Du coup j’ai été obligé de faire cela :
// >= 4.4.0
// if ('#time#' == 'duration' || '#time#' == 'date') {
// jeedom.cmd.displayDuration(_options.valueDate, cmd.querySelector('.timeCmd'), '#time#')
// }
// < 4.4.0
let cmd2 = $('.cmd[data-cmd_id=#id#]')
if ('#time#' == 'duration' || '#time#' == 'date') {
jeedom.cmd.displayDuration(_options.valueDate, cmd2.find('.timeCmd'), '#time#')
} else {
cmd2.find('.timeCmd').remove()
}
Je souhaiterais (si possible) n’avoir qu’un seul code qui fonctionne en 4.3 et en 4.4 et je ne vois pas comment faire. A défaut de mieux, est-il possible de tester la version de Jeedom en JS ?
Merci d’avance.
Loic
Juin 23, 2023, 5:19
2
Bonjour
De mémoire ya une variable globale avec plein d’informations dedans dont la version du core (mais j’ai plus le nom de tête par contre elle est initialisé dans l’index.php du desktop
1 « J'aime »
Spine
Juin 23, 2023, 6:02
3
Merci pour votre retour, je vais chercher de ce côté.
Bonsoir,
Voici ce que je fait dans mes widgets perso :
if(typeof jeeFrontEnd === 'undefined') {
var jeedomVersion#id# = 4.2 // jeeFrontEnd no exist so version <= 4.2')
}
else
{
var jeedomVersion#id# = jeeFrontEnd.jeedomVersion.substr(0, 3)
}
include_file('3rdparty', 'roboto/roboto', 'css');
include_file('3rdparty', 'camingocode/camingocode', 'css');
include_file('3rdparty', 'text-security/text-security-disc', 'css');
if ($loadJquery) include_file('3rdparty', 'jquery/jquery.min', 'js');
if ($loadJquery) include_file('3rdparty', 'jquery.utils/jquery.utils', 'js');
include_file('core', 'jeedom', 'class.js');
?>
<script>
jeeFrontEnd.jeedomVersion = '<?php echo jeedom::version() ?>';
jeeFrontEnd.coreBranch = '<?php echo config::byKey('core::branch') ?>';
jeeFrontEnd.hardware_name = '<?php echo config::byKey('hardware_name') ?>';
jeeFrontEnd.clientDatetime = new Date();
jeeFrontEnd.clientServerDiffDatetime = (<?php echo microtime(TRUE); ?> * 1000) - jeeFrontEnd.clientDatetime.getTime();
jeeFrontEnd.serverTZoffsetMin = <?php echo getTZoffsetMin() ?>;
jeeFrontEnd.serverDatetime = <?php echo getmicrotime(); ?>;
JEEDOM_PRODUCT_NAME = '<?php echo $configs['product_name'] ?>';
JEEDOM_AJAX_TOKEN = '';
</script>
<?php
Après la version 4.2 a été introduit jeeFrontEnd qui contient la version (ex : 4.4.0), donc en vérifiant l’existence jeeFrontEnd on peut déja savoir si <= 4.2.
1 « J'aime »
Spine
Juin 24, 2023, 9:16
5
Bonsoir,
Ca fonctionne parfaitement en testant la version comme indiqué par @Phpvarious , merci bien.
system
A fermé ce sujet ()
Juin 25, 2023, 9:17
6
Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.