Bonjour,

Je suis actuellement entrain d'essayer d'utiliser twig avec electron tout en essayant de créer un MVC pour la lisibilité et bien organiser mon code. Mais je rencontre un problème lorsque je veux écouter la requête et retourner le fichier twig

Voici mon code de départ

require('./autoloader.js');

const electron      = require('electron');
const app           = electron.app;           // Module to control application life.
const BrowserWindow = electron.BrowserWindow; // Module to create native browser window.
const path          = require('path');
const url           = require('url');
var twig            = require('twig').twig;

// Keep a global reference of the window object, if you don't, the window will
// be closed automatically when the JavaScript object is garbage collected.
let mainWindow;

// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on('ready', function(){
    const protocol = electron.protocol;

    // listen l'url avec le protocole file
    protocol.interceptBufferProtocol('file', function (request, callback) {
        // supprime "file://" de l'url
        var reqPath = path.normalize(request.url.substr(7))

        // check si le fichier à charger à l'extension twig
        if (path.extname(reqPath) === '.twig') {
          // retourne le HTML du fichier twig en remplaçant les variables
          var html = twig({ref: reqPath}).render({name: 'kévin'});

          callback({ mimeType: 'text/html', data: new Buffer(html) })
        } 
        else {
          var file = readFileSync(reqPath);
          callback({ mimeType: mime.lookup(reqPath), data: file })
        }
      }
    , function (err) {
        if (err) {
          console.error('Failed')
        } 
      }
  )

   // Create the browser window.
  mainWindow = new BrowserWindow({width: 800, height: 600})
  // Open the DevTools.
  mainWindow.webContents.openDevTools();

  // lance la home page
  mainWindow.loadURL(path.join(__dirname, 'index.twig'));

  // Emitted when the window is closed.
  mainWindow.on('closed', function () {
    // Dereference the window object, usually you would store windows
    // in an array if your app supports multi windows, this is the time
    // when you should delete the corresponding element.
    mainWindow = null
  })
});

app.on('activate', function () {
  // On OS X it's common to re-create a window in the app when the
  // dock icon is clicked and there are no other windows open.
  if (mainWindow === null) {
    createWindow()
  }
})

// In this file you can include the rest of your app's specific main process
// code. You can also put them in separate files and require them here.

Ce que je veux

J'aimerais pouvoir écouter toutes les requête file:// pour ensuite les dispatcher au controller avant de les lancés au controllers je voudrais faire fonctionner le système avec twig.
Si quelqu'un à déja utiliser twig avec electron ou connais mon problème je serais ravis qu'on m'éclaire sur le problème.

Ce que j'obtiens

Lorsque je lance l'application j'ai un message d'erreur qui est le suivant :

DevTools was disconected from the page 
Once page is reloaded, DevTools will automatically reconnect.

J'ai essayer de m'inspirer avec la lib "electron-jade-protocol" car il n'existe pas de lib electron-twig.
voici l'url vers le code : https://github.com/maael/electron-jade-protocol/blob/master/index.js

J'ai également regarder la doc ainsi que chercher sur internet une aide mais aucun résultat.

merci d'anvance pour votre aide :)

5 réponses


Peut etre regrdé du coté de cette lib

ksta
Auteur

En effet j'avais déja regarder cette lib mais elle utilise React et j'aimerais éviter d'utiliser des MVC front-end. J'évite d'en utiliser car j'en connais aucun il faudrais donc que j'aprenne également un fraworke en plus de Electron. Merci comme même pour ton aide :)

react n'est pas un framework mais une librairie c'est différent, il n'est en aucun cas lié a un mvc ou autre, react est une librairie au meme titre que jquery. ca te permet juste de deoucpé ta vue en composant ce n'est pas du tous comme angular ou autre.

ksta
Auteur

A ok je pensais que c'était un framework. Jte remercie pour cette explication. je vais essayer. Mais j'aimerais aussi comprendre comment fonctionne electron avec les protocole car je ne pourrais pas faire se que je veux par la suite si je suis juste dépendant d'une lib. J'aime comprendre l'intérieur avant d'optimiser.

Je vais commencer par sa mais si tu sais ou si quelqu'un peut m'expliquer les protocole j'en serais ravie. merci encore pour ton aide

Bonjour,
un package electron-twig est désormait disponible.