ForgeComposants
fr

Composants

j-Flow

jComponent 20 · jcomponent@20 component Exemple chargé avec jComponent 20
  • les identifiants ne peuvent pas contenir le caractère __

Configuration :

  • width {Number} une largeur du concepteur de flux, par défaut : 6000
  • height {Number} une hauteur du concepteur Flow, par défaut : 6000
  • grid {Number} une taille de grille d'arrière-plan, par défaut : 25
  • Rembourrage interne paddingX {Number}, par défaut : 6
  • curvedlines {Boolean} active les lignes courbes, par défaut : false
  • infopath {String} un chemin vers la variable/méthode, réponse : { zoom: Number, selected: Object }
  • undopath {String} un chemin vers la variable/méthode, la réponse est un tableau d'objets
  • redopath {String} un chemin vers la variable/méthode, la réponse est un tableau d'objets
  • ondrop {String} un chemin vers la méthode fn(dropmeta, grid)
  • onmake {String} un chemin vers la méthode fn(el, com), elle est exécutée lors de la création du composant
  • ondone {String} un chemin vers la méthode fn(el, com), elle est exécutée lors de la création du composant
  • onmove {String} un chemin vers la méthode fn(el, com/group, type), elle est exécutée lorsque le composant/groupe se déplace
  • onremove {String} un chemin vers la méthode fn(el, com), elle est exécutée lorsque le composant est supprimé
  • onconnect {String} un chemin vers la méthode fn(meta), elle est exécutée lorsque les deux composants sont connectés
  • ondisconnect {String} un chemin vers la méthode fn(meta), elle est exécutée lorsque les deux composants sont déconnectés
  • NOUVEAU onpause {String} un chemin vers la méthode fn(path, is), il est exécuté lorsque la sortie/entrée est en pause
  • steplines {Boolean} active les lignes de pas (par défaut : false)
  • Rayon d'animation animationradius {Number} en pixels (par défaut : 5)
  • contextmenu {String} un chemin vers function(e, type, component/meta) (le type peut être map, component, connection, group)
  • dblclick {String} un chemin vers function(component)
  • outputoffsetX {Number} un décalage X par défaut pour le point de sortie (par défaut : 10)
  • outputoffsetY {Number} un décalage Y par défaut pour le point de sortie (par défaut : 12)
  • inputoffsetX {Number} un décalage X par défaut pour le point d'entrée (par défaut : 10)
  • inputoffsetY {Number} un décalage Y par défaut pour le point d'entrée (par défaut : 12)
  • snapping {Number} snapping en pixels (par défaut : 0 = désactivé)
  • multiple {Boolean} permet la sélection multiple du composant (par défaut : true)
  • history {Number} un nombre d'étapes dans l'historique d'annulation/rétablissement (par défaut : 100)
  • animationlimit {Number} un nombre maximum de points pour toutes les animations (par défaut : 100)
  • animationlimitconnection {Number} un nombre maximum de points par connexion (par défaut : 5)
  • allowpause {Boolean} permet de faire une pause sur les sorties/entrées (par défaut : true)
  • markers {Boolean} ajoute des marqueurs fléchés à la connexion (par défaut : true)

Commandes :

  • flow.refresh recalcule les positions
  • flow.selected.disconnect déconnecte la connexion sélectionnée
  • flow.selected.remove supprime le composant sélectionné
  • flow.selected.clear supprime le composant ou la connexion sélectionné
  • flow.zoom effectue un zoom, argument : type (peut être : in, out, reset ou percentage {Number}), deuxième argument optionnel : percentage
  • flow.undo exécute l'étape d'annulation
  • flow.redo effectue une étape de rétablissement
  • flow.reset réinitialise l'éditeur
  • flow.components.add ajoute un nouveau composant, argument : component_declaration
  • flow.components.find trouve un composant, argument : component_id
  • flow.clean nettoie les données et les connexions inexistantes
  • flow.traffic(componentid__outputid, { count: 3, speed: 3, limit: 20, delay: 50, reverse: false }) charge l'animation
    • L'animation reverse peut être activée en ajoutant _ comme caractère de départ de l'identifiant _componentid__outputid
  • NEW flow.groups.find trouve un groupe, argument : group_id
  • NOUVEAU flow.check une nouvelle alternative plus rapide à la commande flow.refresh
  • NEW flow.find recherche un composant ou un groupe, argument : component_id ou group_id

Ajout d'un nouveau composant :

  • le composant crée automatiquement l'ID du composant
  • connections est {Object}
// Component declaration
var component = {
	x: 100,
	y: 50,
	html: 'Component test',

	outputs: ['1 output name', '2 output name'],
	// or
	// outputs: [{ id: 'A', name: 'A output name' }, { id: 'B', name: 'B output name', color: '#FF8E37' }],

	connections: { '0': [{ id: '0002', index: '2', disabled: false }] }, // Look to the connection object below
	// or
	// connections: { 'A': [{ id: '0002', index: 'B', disabled: false }] },

	actions: { select: true, move: true, disabled: false, remove: true, connect: true }
};

// Appends component
CMD('flow.components.add', component);
// Connection object
// connections: { '0': [CONNECTION_OBJECT1, CONNECTION_OBJECT2, CONNECTION_OBJECT3] }
{
	id: 'TARGET_ID_COMPONENT',
	index: '0', // An input index or index id, must be string!!!
	disabled: false // Optional, it's the connection disabled? Disabled connection can't be removed
}

Débit de sortie :

  • renvoie Object quelles clés sont ID des composants
{
	'F1562743923216': { x: 1, y: 1, connections: [], ... },
	'F1562743965303': { x: 1, y: 1, connections: [], ... },

	// Contains paused endpoints
	paused: { 'input__COMPONENTID__INDEXID': 1, 'output__COMPONENTID__INDEXID': 1 },

	// Contains groups
	groups: [{ id: 'GroupID', name: 'Name', x: 100, y: 100, width: 100, height: 100, background: 'rgba(0,0,0,0.1)', color: '#000', border: 'rgba(0,0,0,0.1)' }, ...];
}

Bon à savoir :

  • chaque composant (dans le Flow) contient la classe f-COMPONENTNAME
  • La classe selectable dans l'élément composant permet de copier du texte et désactive le déplacement
  • connections prend en charge type:"transform" avec ligne pointillée

Utilisez-le avec <ui-component name="flow">. Lorsque le composant n'est pas encore chargé, jComponent le télécharge lors de la première utilisation depuis l'adresse dans DEF.fallback (le CDN Componentator par défaut). Auteur : Peter Širka. Source : le référentiel de composants Componentator, licence MIT.

example.html
<style>
	.toolbar { margin-bottom: 10px; }
	.toolbar button { min-width: 26px; height: 24px; background-color: transparent; border: 0; font-size: 12px; color: gray; }
	.toolbar button span { margin-left: 3px; }
	.toolbar button[name="remove"] { color: red !important; }
	.toolbar button:disabled { color: #C0C0C0 !important; cursor: not-allowed; }
	.toolbar button:hover { color: black; }
	.toolbar button:first-child { border-left: 0; }
</style>

<div class="toolbar">
	<button is="is-button" path="floweditor.undo" config="enabled:value && value.length > 0;click:floweditor_undo" disabled="disabled"><i class="ti ti-undo"></i></button>
	<button is="is-button" path="floweditor.redo" config="enabled:value && value.length > 0;click:floweditor_redo" disabled="disabled"><i class="ti ti-redo"></i></button>
	<button is="is-button" path="floweditor.info.selected" config="enabled;click:floweditor_remove" name="remove" disabled="disabled"><i class="ti ti-trash"></i></button>
</div>

<ui-component name="flow" path="flowmodel" config="width:6000;height:6000;grid:26;infopath:floweditor.info;undopath:floweditor.undo;redopath:floweditor.redo"></ui-component>

<script>

	var flowmodel = {
		groups: [{ id: 'G12345', name: 'My group', x: 50, y: 50, width: 300, height: 300 }],
		'F1562743923216': { x: 100, y: 150, html: 'Component 1', outputs: ['Done', 'Error'], connections: { '0': [{ id: 'F1562743965303', index: '2', disabled: false }] }},
		'F1562743965303': { x: 500, y: 250, html: 'Component 2', inputs: ['1', '2', '3'] }
	};

	var floweditor = {};

	function floweditor_undo() {
		CMD('flow.undo');
	}

	function floweditor_redo() {
		CMD('flow.redo');
	}

	function floweditor_remove() {
		CMD('flow.selected.clear');
	}

	// Extend buttons for using Web components
	customElements.define('is-button', class extends HTMLButtonElement {
		constructor() {
			super();
			setTimeout(NEWUIBIND, 2, this);
		}
	}, { extends: 'button' });

</script>