Hello everyone!
So Vincent asked me to send a mail to the dev list regarding the current
status of the Blockly editor project, and what needs to be done in the
coming few months, so we're all on the same page, so here goes.
Firstly, regarding the current status of the project, here's what the user
çan do:
- Create and delete Blockly blocks
- Generate code in Javascript (Show Javascript)
- Execute it
- Save the code to the page (without executing it)
However after discussion with Vincent, he raised the following concerns:
1. Show Javascript just appends content to right and does not do anything
to the existing content. Now I'm a bit confused as to what the problem is
here, because the code just gets appended to the right of the cursor
position, and that's how I wanted it to be, because that way the user can
just navigate normally to the line where he/she wants code inserted, and
click on "Show Javascript" to generate said code. So I believe this is fine.
2. Code does get saved but not interpreted and this is a problem.
3. There is no option to execute the code in view mode, this exists only in
the editor
4. There is no option to convert the generated code back to Blockly blocks.
Blockly actually does not provide this feature. In order for this to be
implemented, the AST generated using Velocity needs to be converted to XML
so it can be displayed using blocks, but I feel this would be outside the
scope of this project. IMO what we can do is push this to the end and add
this feature later if time permits. However if we provide this support for
Velocity, we won't be able to provide it for other languages, since it
would be much more complicated then and providing the back conversion
feature for just one language (ie. Velocity) doesn't make sense to me.
That's something else we need to consider. Maybe it can be implemented as
part of a separate project.
5. There is a design flaw when the page gets redirected to Blockly/Editor
for editing the content of the page. I had implemented it this way since
Clement suggested me this editor (
https://github.com/xwiki-
contrib/application-xwebide) as reference, and so I used this.
Nevertheless, it does cause some complications as the content of the page
gets edited in case the $docRef is empty which can be handled but it
doesn't make sense logically.
The solution which we agreed upon is:
For points 2 and 3, the generated code should be saved in an XObject that's
retranslated back to code when the edit page is rendered. A sheet is
attached to this XObject for view and edit modes, and the content gets
rendered appropriately. A Javascript macro is used to render the code, and
it gets executed when an execute button is pressed in the view mode.
For point 5, we decided to drop Blockly as an editor and remove the edit
menu entry and implement it as a template instead using a template page and
a template provider page, similar to how its been done in
https://github.com/xwiki-contrib/application-diagram/.
That is all! This is what I've understood so far, and if any of you has
feedback/suggestions, please get back to me ASAP! :)
Regards,
Vivek Iyer