Contribuir al desarrollo del núcleo

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.

Ramas de Github

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.

Desarrollo

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.

Árbol del núcleo

El código se distribuye en diferentes directorios en la raíz de Jeedom (por defecto : /var/www/html) :

Front-end

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 :

Desktop

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 :

El archivo desktop / common / js / utils.js, por lo tanto, siempre está presente y se carga una vez. Permite :

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.

Núcleo v4.2

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í.

Núcleo v4.3

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 :

jeeFrontEnd[}

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 usar jeeFrontEnd.corepage con una sintaxis corta, corresponde a un self específico de la página.

jeephp2js[}

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.

Mobile

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 :

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 :

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.

Archivos CSS

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 :

Back-end

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.

Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site web. Si vous continuez à utiliser ce site, nous supposerons que vous en êtes satisfait.