Skip to content

Feature Brainstorming

mthiede edited this page Oct 6, 2013 · 6 revisions

This is a page for brainstorming on new features for Concrete.

Support for very large models

Currently Concrete becomes slow when models become very large. This is due to the fact that the whole DOM for the large model is always set up. It would be better to "render" models only partially, i.e. to create only those parts of the DOM which are actually visible. This would make a up a 2 tier rendering: first is to create the partial DOM for the model dynamically (e.g. as the user scrolls through the model), second is the browser rendering the dom.

Support for multiple views

It would be good if Concrete could display serveral views of the same model. Once DOM and model are independant, this can be realized: There could be several (parial) DOM linked to the same model.

Move to JQuery

As JQuery is used a lot more than Prototype and JQuery and Prototype are not compatible out of the box, it would be good to port Concrete to JQuery. Another benefit could be better browser compatibility.

Preserve references when elements are renamed

Currently references break when the target element is renamed (i.e. when its identifier changes) and the user has to fix the references manually. The idea would be to keep the references even if the target identifier changes. This would mean that the representation of all affected references would change automatically.

Text Editing support

Here the focus is editing of larger text like sentences or paragraphs. In the simplest case, this could be realized by means of an HTML textarea. What would be even better though is to make any HTML element's content editable. This would mean that the editor automatically has the same look as the result. It means that any mixture of different fonts, markups, etc. could be edited and it would mean that the text could freely float and break lines according the HTML rules. The idea for implementing this is simply to draw (overlay) a cursor at the position to be edited and instantly modify the HTML element's content while the user types.

Taking this one step further, it should be possible to edit models which are "rich text", similar to a WYSIWYG HTML editor or MS Word. A metamodel could contain classes for paragraphs, sentences and words. Words could have attributes like "bold" or "emphasized", a font, font size, etc. Hyperlinks, images and mathematical formulas could be mixed into the text.

Expression support

Currently, expression like models like mathematical formulas are not very convenient to create. For example for creating "a * b + c", the user would have to create a "sum" node, then a "multiplication" node on the left, then a variable reference "a" and so on.

The desired behavior would be to just type "a * b + c" and the same model is create automatically in the background. This could be realized by triggering tree rewriting on special symbols (* and + in this case). So a "*" would replace the element on the left by a multiplication node and it would but the original element as the multiplications left operand. Then it would position the cursor on the multiplications right operand placeholder.

Another issue is automatic creation of "reference" nodes. In the example above "a" is probably a reference to a variable. In order to be a valid part of an expression, the reference must be wrapped by a special model element which is derived from the expression base element. Now, when the user types "a" this wrapped node should be created automatically in the background.

Better browser support

Currently there are problems with other browsers than Firefox and Chrome. Especially Internet Explorer support is desireable given that it is often still the only browser on many user machines, especially in larger companies.

Storing view information as annotations to the model

It would be useful to be able to store/persist view information like whether a particular element has been folded or not, so that reloading that model preserves the view state as well. This could e.g. be achieved by using a 2nd meta property ("_view" would be logical, with a boolean "fold" sub property) which persists annotations like these.

Addendum: I (=/dslmeinte) found this quite easy to do. Let me fork the Concrete so I can issue pull requests.

Mac-friendly keyboard shortcuts

The current keyboard shortcuts are Ctrl-based, while Mac users are accustomed to Cmd-based shortcuts. E.g., Eclipse for Mac remaps this.

Auto-expanding aliases

Starting point for adding any element in the tree is currently typing a class name. Languages usually have elements that are heavily-used but for sake of organization and a logical structure it isn't a good idea to give these a special status. For these cases, it would be ideal to have a number of aliases (next to the class names which are already valid at a certain point) which auto-expand. An easy example would be the creation of a Feature with kind: attribute, lowerBound: 0, upperBound: 1, type: String datatype upon entering the alias 'String-attrib'.

Shuffling of elements

A simple way to move elements up or down a containment list would be most welcome. Currently, you can only achieve this by some tedious copy-and-pasting.