Quieres contribuir al desarrollo del Jeedom Core ?
Estos son los conceptos básicos que debe conocer :
Antes de enviar un PR, actualice su alfa para verificar que el error aún no se haya solucionado. Y sincroniza tu repositorio de github.
Comprueba que lo que estás arreglando no cause otros errores. La mayoría de las funciones principales son llamadas por diferentes páginas front-end o por otras funciones principales y complementos. Haga una búsqueda en el Core para ver/comprender dónde se utilizan las funciones y, en caso de duda, informe el problema y su corrección en Comunidad.
Para participar en el desarrollo de Jeedom, debes tener una cuenta Github.
El código principal es de código abierto y está disponible aquí.
Las actualizaciones se realizan en estas ramas de acuerdo con la configuración de Jeedom Configuración → Sistema → Configuración / Actualizaciones / Mercado.
RP (Solicitudes de extracción) siempre debe hacerse en la rama alfa.
Asimismo, para participar en discusiones sobre Comunidad, registrarse como desarrollador : Jeedom dev.
Para ayudar al desarrollo del Core, debe dominar uno o más de los siguientes idiomas:
También es deseable tener conocimiento del entorno Linux.
El código se distribuye en diferentes directorios en la raíz de Jeedom (por defecto : /var/www/html) :
La interfaz de Jeedom funciona como un sitio web, desde php interconectado con SQL y js/CSS.
Inicialmente, el navegador carga el archivo `/ index.php :
/ core / php / core.inc.php
./ desktop / php / index.php
o Mobile mobile / html / home.html
según los parámetros de la URL.La interfaz de Jeedom funciona según el principio de una página. Una vez cargadas, las diferentes páginas se muestran cambiando el contenido de un contenedor.
El archivo principal de Desktop es / desktop / php / index.php
.
Cada página tiene al menos dos parámetros en la URL. Ejemplo :
https://my.dns1.jeedom.com/index.php?v = d & p = tablero
:
En este caso, el archivo / desktop / php / index.php
cargará el archivo / desktop / php / dashboard.php
en el div div_pageContainer
. Esto también cargará el archivo / desktop / js / dashboard.js
, incluidas las funciones js específicas para la visualización de esta página (aquí, el panel).
El archivo / desktop / php / index.php
también se encarga de :
desktop / common / js / utils.js
El archivo desktop / common / js / utils.js
, por lo tanto, siempre está presente y se carga una vez. Permite :
div_pageContainer
.Entonces los archivos de índice.php y utilidades.js proporciona la estructura y las funciones básicas de la interfaz.
Luego, el contenido de la página llamada se carga desde el escritorio / php / page.php y desktop / js / page.js.
Estos archivos de contenido, puramente orientados a la interfaz, pueden acceder a las funciones Core (clases / core / class
) directamente en php, o en js gracias a las clases js ( / core / js
) a través de llamadas ajax (/ core / ajax
).
Las funciones internas del Core están, por lo tanto, bien separadas, para la operación interna (Back-end), pero son accesibles a través de la interfaz. Asimismo, cada página tiene su propio código php y js. Esto le permite desarrollar y mantener mejor el código, pero también optimizar el rendimiento cargando solo las clases y funciones necesarias.
Desde Core v4.2, todas las funciones js del archivo desktop/common/js/utils.js
están aislados en un espacio de nombres jeedomUtils{}
.
Por ejemplo, la función anterior en la ventana raíz loadPage()
se convierte en jeedomUtils.loadPage()
.
Por razones de compatibilidad con versiones anteriores de complementos, las funciones antiguas aún se declaran y quedarán obsoletas en una versión posterior. Ver la lista aquí.
Continuando desde la versión 4.2, las páginas frontales del escritorio se han aislado para evitar hacer referencia a variables y funciones en la ventana raíz. Esto protege contra posibles colisiones de declaraciones y facilita la lectura y comprensión del código, así como su depuración.
El archivo core/js/jeedom.class.js
declara dos nuevos espacios de nombres :
Algunas variables globales ahora están en este espacio de nombres :
jeeFrontEnd = {
__description: 'Objeto global donde cada página principal registra sus propias funciones y variables en su nombre de subobjeto.',
jeedom_firstUso: '',
language: '',
userProfils: {},
planEditOption: {state: falso, chasquido: falso, cuadrícula: falso, tamaño de cuadrícula: falso, resaltar: true},
//cargar el historial de la página:
PAGINA ANTERIOR: null,
UBICACIÓN_ANTERIOR: null,
NO_POPSTAT: false,
modifyWithoutSave: false,
//@index.php
serverDatetime: null,
clientServerDiffDatetime: null,
serverDatetime: null,
serverTZoffsetMin: null,
}
Ejemplo típico para desktop/js/corepage.js :
"uso estricto"
si (!jeeFrontEnd.corepage) {
jeeFrontEnd.corepage = {
myVar: 'oneVar',
init: function() {
window.jeeP = este // acceso directo a la raíz
},
postInit: function() {
//Hacer cosas una vez cargada la página
},
myFunction: función(_var) {
var myFuncContextVar = esto.miVar + ' -> ' + _var
console.log(myFuncContextVar)
}
}
}
jeeFrontEnd.corepage.init()
$(function() {
jeeFrontEnd.corepage.postInit()
})
$('#myButton').on('click', function() {
jeeP.myFunction('prueba')
})
Por lo tanto, el espacio de nombres de la página no se volverá a crear al volver a esta misma página. Además, la variable
jeeP
permite usarjeeFrontEnd.corepage
con una sintaxis corta, corresponde a unself
específico de la página.
Se usa para pasar variables de un script php al front-end js. Por ejemplo :
enviarVarToJS([
'jeephp2js.myjsvar1' => init('tipo', ''),
'jeephp2js.myjsvar2' => configuración::byKey('habilitar CustomCss')
]);
Puis
$(function() {
si (jeephp2js.mijsvar1 == '1') { ... }
})
El espacio de nombres jeephp2js{} se vacía en el cambio de página para evitar cualquier variable residual inesperada.
La interfaz de escritorio responde y se adapta al tamaño del navegador. Sin embargo, algunas cosas, como editar un escenario, serían complicadas en una pantalla pequeña. Además, en un teléfono inteligente al aire libre, en 3G o incluso 4G, es importante optimizar la velocidad de la pantalla. Por eso Jeedom tiene una interfaz móvil, más ligera y adaptada a pantallas pequeñas.
La página de referencia es / mobile / html / index.html
, que se encarga de :
mobile / js / application.js
El archivo mobile / js / application.js
contiene funciones comunes a todas las páginas.
En cuanto a la interfaz de escritorio, la página llamada consta de dos archivos :
/ mobile / html / home.html
: el código html./ mobile / js / home.js
: las funciones js específicas de esta página.Una diferencia notable en Mobile es la ausencia de páginas PHP. Por lo tanto, la generación de código se basa en las clases js, que siempre pueden llamar a funciones Core con llamadas ajax.
Core CSS se basa principalmente en estos archivos :
Los temas contienen CSS específico para cada tema, incluidos colors.css.
Orden de carga de CSS en el escritorio :
En curso
La interfaz es una cosa, pero, por supuesto, su Jeedom siempre está activo, para ejecutar escenarios, crons, registros, historias, etc.
El Back-end se basa en las mismas clases php que el Front-end, presente en / core / class /
. Cada parte de Jeedom tiene su propia clase php, en particular :
etc.