Repository navigation
The architecture of the new Dahu is pretty much self explanatory. We subdivide the project into many modules. Each module has its own purpose. This architecture is defined as follow :
<dahu>
├── build.gradle
├── driver
│ ├── build.gradle
│ ├── src
│ │ ├── Driver1.java
│ │ ├── Driver2.java
├── common
│ ├── build.gradle
│ ├── src
├── core (only js, html, scss)
│ ├── build.gradle
│ ├── app
| | ├── app.html
| | ├── components
| | ├── scripts
│ │ │ ├── dahuapp.js
│ │ │ ├── dahubridge.js
│ │ │ ├── configs
│ │ │ ├── modules
│ │ │ │ ├── kernel
│ │ │ │ | ├── module1.js
│ │ │ │ | ├── module2.js
│ │ │ │ ├── compiler.js
│ │ │ │ ├── events.js
│ │ │ │ └── requestReponse.js
│ │ │ ├── models
│ │ │ │ ├── model1.js
│ │ │ │ └── model2.js
│ │ │ ├── collections
│ │ │ │ ├── collections1.js
│ │ │ │ └── collections2.js
│ │ │ ├── views
│ │ │ │ ├── view1.js
│ │ │ │ └── view2.js
│ │ │ ├── controllers
│ │ │ │ ├── controller1.js
│ │ │ │ └── controller2.js
| | ├── styles
│ │ │ │ └── app.scss
├── editor
│ ├── build.gradle
│ ├── src
│ │ ├── DahuApp.java
│ │ ├── kernel
│ │ | ├── module
│ │ │ │ ├── kernelModule1.java
│ │ │ │ ├── kernelModule2.java
│ │ | ├── DahuAppKernel.java
├── CHANGELOG
├── COPYING
└── LICENSE
Drivers are Java utilities to export low level functionalities to the Core module. In the drivers we only use static methods, with no JavaFX interface whatsoever. Among the drivers we find:
filesystem
logger
keyboard
media (screen & mouse)
Kernel model are Java utilities that use Drivers to provide usable methods to the JavaScript API. Among the kernel modules we find :
filesystem
logger
keyboard
media (screen & mouse)
browser
The Editor is the JavaFx User Interface in which is executed Dahuapp. In order for the Dahuapp to run in the JavaFx Webview, the editor provides kernel modules ,as described earlier, that expose additional functionalities to the JavaScript API.
The core is written in BackBoneJs (models : http://backbonejs.org) with the extension MarionetteJs (views, controllers and layouts : https://github.com/marionettejs/backbone.marionette). We use also the Backbone.Wreqr extension which provide a simple infrastructure for decoupling Backbone and Backbone.Marionette application modules and components. It includes support for message passing (events, commands, etc.). As for the views templates, we use HandlebarsJS (http://handlebarsjs.com)
It is divided in multiple sub-modules that are self-explanatory, such as :
modules (here we have a bridge between Java Kernel modules and JavaScript, the event aggregator ...)
collections
views
layouts
templates
models
dahuapp.js (the main javascript application that is loaded when the application starts)
The frontend is responsible of rendering a Dahu presentation. The new frontend was migrated to DeckJS, a tool used for building HTML5 presentation. It provides some interesting functionalities that Dahu presentations need.
The current state of the application is yet to be completed. We reached the following limits in our development :
The current editor provides a list of important features such as :
Create, Open and Save projects
Start, Stop the capture mode
Take screenshots
Add and edit tooltips
Add and edit actions (move, appear and disappear)
Clean, generate and preview presentations
To this list of features, we need to add (N.B : this list in not exhaustive) :
Add notes to a screen with an HTML editor.
Personalize the shortcuts (currently it's : F7 to take a screenshot and ESC to stop the capture mode)
Personalize the layout of the application (adapt the css style to have a better output,
transform the toolbar from native JavaFx to HTML).
The current viewer provides a list of important features such as :
Integrate DeckJS.
Create slide-show like presentation (navigable with arrow keys).
Show mouse cursor in correct position
Show tooltips in correct position
To this list of features, we need to add (N.B : this list in not exhaustive) :
Handle actions (appear, disappear and move)
Table of contents ( this is already provided by a DeckJs extension https://github.com/barraq/deck.ext.js)
The output isn't well resizable, in fact a problem still occur when we use percentage in css file. For now the size and position of all object are set in our handlebars' templates, to make our window resizable we should modify the css content in our views instead using jQuery.
We have made our tooltip draggable in the editor, however sometimes "it jumps" instead of translating.