[C++] nxi - navigateur générique

a marqué ce sujet comme résolu.

Salut,

nxi est un navigateur flexible, modulable et entièrement customisable apportant de nouvelles fonctionnalités manquantes dans les navigateur classiques.

discord https://discord.gg/d86RwPU29V

git : https://github.com/neuroshok/nxi/tree/dev

download : version dev

Fonctionnalités

  • Tout est contrôlable par des commandes basées sur un graph
  • Modules natifs compile time et runtime
  • Système de page de type node, page, explorer et custom basé sur un graph
  • Système de contextes pour créer des interactions dynamiques
  • Gestion des sessions navigateur
  • Système de style permettant de gérer plus que juste les couleurs
  • Système d’interface permettant de changer complètement l’UI
  • Fullscreen hybride (fenêtre / écran)
  • Support des thèmes w3c (partiel)
  • Support des webextensions (experimental)
  • Explorateur de fichier intégré
  • Support complet des webextensions
  • Automute des pages non focus

Aperçu

Affichage des commandes depuis le chemin main > page

Interface nxi_light en mode console

Recrutement

Si vous avez des compétences en C++ et que ça vous intéresse ou si vous avez des questions, faites moi signe !

Merci.

Et bien super ! Alors je vais présenter de nouveau le projet nxi à l’occasion de mon arrivé dans le projet et de la fusion avec Sielo car on ne va pas se mentir, @ads00 explique mal. :P

Les bases

C’est assez simple, nxi est un navigateur. Par exemple, un navigateur web est un logiciel qui utilise un moteur web pour afficher des données venant du web. Et bien nxi est multi-protocolaire et donc pas seulement un navigateur web !

Cela veut dire que nxi pourra être un navigateur web puisqu’il peut utiliser un moteur de rendu web, mais il peut aussi utiliser un moteur de rendu 3D par exemple.

Il est important de noter qu’à la base nxi devait être un navigateur nex, nex étant une sorte de protocole développé par @ads00. Mais je ne m’étendrai pas dessus puisque @ads00 a fait un post dédié à nex.

Une architecture puissante

Le gros point fort de nxi sera son architecture. L’architecture sera pensée pour fournir un système d’interfaces flexibles, génériques et modulaires. Il sera donc très simple d’intégrer toutes sortes de fonctionnalité avec de simples commandes et interfaces. Voilà une image pour illustrer brièvement :

Image utilisateur

De plus, chaque action sera liée à une commande pour rendre le tout encore plus facile à utiliser. (pour reprendre un exemple, nxi::tab_switch;interface=bidule;page=3 changera d’onglet)

Un exemple concret

Ce qui fait la force de Sielo, ce sont les espaces d’onglets. Et bien les espaces d’onglets seront simplement des interfaces dans des interfaces, il y a donc beaucoup plus de possibilités comme ce créer des "workspace" d’espaces d’onglets, ou avoir des espaces d’onglets dans des espaces d’onglets… Vous voyez la puissance de la bête ? :P

De plus, je réfléchissais à l’ajout du support des WebExtension dans Sielo. Cela aurai été un processus assez long et difficile. Or, avec nxi ce sera assez simple. Les WebExtension étant faites en JS on pourra traduire cela comme ça :

1
commande WebExtension -> commande nxi -> action sur nxi

Comment placer nxi par rapport à un navigateur web

Et bien déjà, c’est plus qu’un navigateur web comme je l’ai déjà dit. Il y a une image que j’aime beaucoup avec nxi, c’est celle de Linux.

On peut ainsi voir nxi comme le noyau avec ses distributions. Ainsi par exemple, Sielo sera simplement une "distribution" de nxi. Sielo se contentera d’apporter des configurations par défaut un peu différentes pour mettre en avant le côté navigateur web de nxi ainsi que les espaces d’onglets. Quelqu’un pourrait très bien prendre nxi, y ajouter une configuration qui utilise un moteur 3D pour afficher un "switcher" d’onglet 3D a la Windows 7, et distribuer sa build avec cette configuration par défaut.

Bien sur il sera possible de changer ces configurations et donc d’avoir le switcher 3D dans Sielo, mais nous savons tous que l’humain est relativement flemmard et donc que les configurations par défaut ont leur importance.

En conclusion

Je le sais, c’est assez compliqué à bien tout saisir. Le but de nxi est assez en profondeur et tellement générique qu’on peut voir énormément de cas d’utilisation et donc s’y perdre. De plus le concept peut paraître assez fou et va demander pas mal d’efforts à développer. Mais c’est pour ça que @ads00 a besoin d’aide et m’a finalement trouvé ! Bref, si vous avez des questions n’hésitez pas, elles seront importantes et pourront m’aider à clarifier ce post.

Je compte donc sur vous !

+1 -0

C’est encore en test, ça va servir pour gérer les contextes.

Par exemple, quand tu entres une recherche dans la barre de commande, tu peux choisir de faire la recherche dans le contexte actuel (auto) ou un autre (web pour lancer une recherche web, explorer pour rechercher dans le système de fichiers, page pour rechercher dans le document actuel etc …)

Auto peut également déduire le contexte depuis la commande, par exemple http://... changera le contexte en web, /path/... changera le contexte en explorer etc …

Salut,

Voici quelques news :

  • gestion des thèmes w3c
  • gestion des events natifs sur windows

!(https://cdn.discordapp.com/attachments/359684243108003842/628028786851708958/2019–09–30_02–38–22.mp4)

  • test d’une interface minimaliste

!(https://cdn.discordapp.com/attachments/359684243108003842/631889378565947395/2019–10–10_18–20–56.mp4)

Salut,

Voila quelques news en vidéo (https://i.imgur.com/d9odgTh.mp4)

  • Les suggestions peuvent être de différents types (commande, page, text)
  • Les commandes peuvent avoir des paramètres, la barre de commande se met en mode "param" quand une commande a besoin de paramètres utilisateur
  • Une commande peut ajouter des suggestions pour ses paramètres
  • Une commande peut avoir un mode preview qui permet d’exécuter la commande avec le paramètre sélectionné dans les suggestions
  • Une commande peut avoir des raccourcis de type {combo} + {sequence}. Par exemple pour {CTRL ALT} {N, T}, la commande associée est exécutée lorsque CTRL + ALT est maintenu puis la séquence N, T est entrée.
  • Les raccourcis affichent les suggestions des commandes associées qui match le combo/séquence en cours

A suivre :

  • On rend le code plus propre pour tout ce qui a été testé plus haut :p
  • On continue le système de pages
  • On ajoute des commandes liées aux pages
  • On trouve une solution pour visualiser le graph de page
  • Puis plein d’autres trucs trop funs !

Salut,

Ajout d’un système de contextes : https://i.imgur.com/Gi8Dv2i.mp4

On est dans le contexte "command", les suggestions de commandes sont affichées, on tape une commande qui requiert des paramètres, donc on passe dans le contexte "command_executor", les suggestions chercheront dans les suggestions de paramètre de la commande.

On peut être sur plusieurs contextes en même temps, si on est sur le contexte "page" et "command" en même temps, la recherche de suggestion se fera sur la liste des commandes et des pages ouvertes.

Les contextes sont applicables aux commandes et aux raccourcis.

Salut, Quelques news :

  • ajout de fonctionnalités pour les graphs
  • switch de pages via la molette quand on cible le page_node
  • gestions des pages / menus via les clicks souris (left/middle pour focus/suppression)
  • sauvegarde des pages via ndb
  • les images pour le style s’affichent maintenant dans le command_menu
  • ajout d’une interface de test pour visualiser les node_page
  • ajout des icones pour les pages

Salut,

Voila un test des différents types de modules disponibles :

module js avec api webext

document.body.style.border = "5px solid blue";
document.body.innerHTML = "prout" + document.body.innerHTML;

function test(activeInfo) {
    document.getElementById("zeta").innerHTML = "current page id : " + activeInfo.tabId;
}

browser.tabs.onActivated.addListener( test );

module dynamique

#include <nxi/api.hpp>
int nxi_module_load(nxi::api::core& nxi)
{
    nxi.command_system().add("nxi_dyn", [&](const nxi::values&)
    {
        nxi.error("dyn module command triggered");
    });
}

module compile time

void nxi_static::on_load()
{
    auto cmd = nxi::command("nxi_static", "action", [this](const nxi::values&)
    {
        nxi_core_.error("nxi_static module is loaded");
    });

    nxi_core_.command_system().add(std::move(cmd));
}

Si quelqu’un veut m’aider à implémenter tout ça https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Browser_support_for_JavaScript_APIs je dis pas non :p

Salut,

L’ancien système de session a été renommé en "user". Les nouvelles sessions permettent d’avoir plusieurs configurations via ces sessions(cookies, thèmes, historique etc ..) et de les associer à des pages.

Plusieurs sessions peuvent être activent en même temps (ce qui permet d’afficher les pages de plusieurs sessions) mais une seule peut être focus (une nouvelle page sera ouverte dans la session focus)

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte