concrete 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +32 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +87 -0
- data/concrete/basic_inline_editor.js +73 -0
- data/concrete/clipboard.js +72 -0
- data/concrete/concrete.js +58 -0
- data/concrete/constraint_checker.js +297 -0
- data/concrete/editor.js +964 -0
- data/concrete/element_extension.js +68 -0
- data/concrete/external_identifier_provider.js +112 -0
- data/concrete/helper.js +63 -0
- data/concrete/identifier_provider.js +168 -0
- data/concrete/inline_editor.js +55 -0
- data/concrete/metamodel_provider.js +171 -0
- data/concrete/model_interface.js +429 -0
- data/concrete/scroller.js +106 -0
- data/concrete/selector.js +302 -0
- data/concrete/template_provider.js +141 -0
- data/concrete/ui/abstract_dialog.js +80 -0
- data/concrete/ui/concrete_ui.js +28 -0
- data/concrete/ui/create_module_dialog.js +55 -0
- data/concrete/ui/images/close.png +0 -0
- data/concrete/ui/images/document-new.png +0 -0
- data/concrete/ui/images/document-save.png +0 -0
- data/concrete/ui/images/edit-find-replace.png +0 -0
- data/concrete/ui/images/emblem-symbolic-link.png +0 -0
- data/concrete/ui/images/help-browser.png +0 -0
- data/concrete/ui/images/minus_11px.png +0 -0
- data/concrete/ui/images/plus_11px.png +0 -0
- data/concrete/ui/images/preferences-system.png +0 -0
- data/concrete/ui/images/process-stop.png +0 -0
- data/concrete/ui/images/system-search.png +0 -0
- data/concrete/ui/layout_manager.js +54 -0
- data/concrete/ui/module_browser.js +88 -0
- data/concrete/ui/module_editor.js +217 -0
- data/concrete/ui/open_element_dialog.js +90 -0
- data/concrete/ui/preferences_dialog.js +75 -0
- data/concrete/ui/proceed_dialog.js +52 -0
- data/concrete/ui/search_replace_dialog.js +323 -0
- data/concrete/ui/style.css +296 -0
- data/concrete/ui/toolbar.js +74 -0
- data/concrete/ui/workbench.js +165 -0
- data/doc/concrete_developers_guide.html +1054 -0
- data/doc/concrete_developers_guide.txt +502 -0
- data/doc/concrete_users_guide.html +694 -0
- data/doc/concrete_users_guide.txt +223 -0
- data/example/formula_editor/example_data/example1.json +11 -0
- data/example/formula_editor/formula_editor.html +83 -0
- data/example/formula_editor/sqrt_horz.png +0 -0
- data/example/formula_editor/sqrt_vert.png +0 -0
- data/example/formula_editor/style.css +31 -0
- data/example/metamodel_editor/edit.rb +54 -0
- data/example/metamodel_editor/example_data/formula_metamodel.json +18 -0
- data/example/metamodel_editor/example_data/meta_metamodel.json +22 -0
- data/example/metamodel_editor/example_data/statemachine_metamodel.json +32 -0
- data/example/metamodel_editor/metamodel_editor.html +120 -0
- data/example/metamodel_editor/metamodel_editor2.html +135 -0
- data/example/metamodel_editor/metamodel_editor3.html +151 -0
- data/example/metamodel_editor/style.css +8 -0
- data/example/metamodel_editor/style2.css +19 -0
- data/example/metamodel_editor/style3.css +35 -0
- data/example/minimal_editor/minimal_editor.html +43 -0
- data/example/statemachine_editor/example_data/example1.json +11 -0
- data/example/statemachine_editor/state_background.png +0 -0
- data/example/statemachine_editor/statemachine_editor0.html +55 -0
- data/example/statemachine_editor/statemachine_editor1.html +62 -0
- data/example/statemachine_editor/statemachine_editor2.html +103 -0
- data/example/statemachine_editor/style0.css +8 -0
- data/example/statemachine_editor/style1.css +32 -0
- data/example/statemachine_editor/style2.css +43 -0
- data/example/themes/cobalt.css +176 -0
- data/example/themes/dialog-error.png +0 -0
- data/example/themes/dialog-information.png +0 -0
- data/example/themes/dialog-warning.png +0 -0
- data/example/themes/dots_12px.png +0 -0
- data/example/themes/fold_button_dots_when_hidden.css +18 -0
- data/example/themes/fold_button_plus_minus.css +21 -0
- data/example/themes/fold_button_plus_when_hidden.css +18 -0
- data/example/themes/light_blue.css +177 -0
- data/example/themes/minus_11px.png +0 -0
- data/example/themes/minus_13px.png +0 -0
- data/example/themes/minus_9px.png +0 -0
- data/example/themes/plus_11px.png +0 -0
- data/example/themes/plus_13px.png +0 -0
- data/example/themes/plus_9px.png +0 -0
- data/example/themes/white.css +177 -0
- data/lib/concrete/concrete_syntax_provider.rb +63 -0
- data/lib/concrete/config.rb +36 -0
- data/lib/concrete/file_cache_map.rb +88 -0
- data/lib/concrete/index_builder.rb +108 -0
- data/lib/concrete/metamodel/concrete_mmm.rb +45 -0
- data/lib/concrete/metamodel/ecore_to_concrete.rb +80 -0
- data/lib/concrete/server.rb +92 -0
- data/lib/concrete/util/logger.rb +24 -0
- data/lib/concrete/util/string_writer.rb +17 -0
- data/lib/concrete/working_set.rb +41 -0
- data/rakefile +33 -0
- data/redist/prototype.js +4320 -0
- data/redist/scriptaculous/builder.js +136 -0
- data/redist/scriptaculous/controls.js +991 -0
- data/redist/scriptaculous/dragdrop.js +975 -0
- data/redist/scriptaculous/effects.js +1130 -0
- data/redist/scriptaculous/scriptaculous.js +60 -0
- data/redist/scriptaculous/slider.js +275 -0
- data/redist/scriptaculous/sound.js +55 -0
- data/redist/scriptaculous/unittest.js +568 -0
- data/test/concrete_test.rb +5 -0
- data/test/file_cache_map_test.rb +90 -0
- data/test/file_cache_map_test/testdir/fileA +1 -0
- data/test/index_builder_test.rb +68 -0
- data/test/index_builder_test/ecore_index.js +85 -0
- data/test/index_builder_test/ecore_index_expected.js +85 -0
- data/test/integration/external_elements_test.html +114 -0
- data/test/metamodel_test.rb +40 -0
- data/test/metamodel_test/concrete_mmm_expected.js +19 -0
- data/test/metamodel_test/concrete_mmm_generated.js +19 -0
- data/test/metamodel_test/concrete_mmm_regenerated.js +19 -0
- data/test/unit/external_identifier_provider_test.html +138 -0
- data/test/unit/identifier_provider_test.html +269 -0
- data/test/unit/metamodel_provider_test.html +318 -0
- data/test/unit/model_interface_test.html +257 -0
- data/test/unit/template_provider_test.html +171 -0
- data/test/unit/test.css +90 -0
- data/test/working_set_test.rb +54 -0
- data/test/working_set_test/file1.txt +0 -0
- data/test/working_set_test/file2 +0 -0
- data/test/working_set_test/subdir/file3.xml +0 -0
- metadata +201 -0
@@ -0,0 +1,223 @@
|
|
1
|
+
= Concrete Users Guide =
|
2
|
+
|
3
|
+
_Concrete_ is a generic model editor which can be configured for different
|
4
|
+
domain specific languages (DSLs). When you use it, you use it for a predefined DSL.
|
5
|
+
The DSL describes what the model may look like, both from a content and a visual point of view.
|
6
|
+
See the Developers Guide if you want to setup your own DSL.
|
7
|
+
|
8
|
+
This document describes the usage of the editor, independant of any specific DSL.
|
9
|
+
|
10
|
+
|
11
|
+
== Models ==
|
12
|
+
|
13
|
+
Models consist of +elements+ which may have attributes, references to other elements and may contain other elements.
|
14
|
+
|
15
|
+
+Attributes+ can take one or more primitive values. Currently
|
16
|
+
primitive values are of type +String+, +Integer+, +Float+, +Boolean+, or custom defined +Enum+ datatypes. +Enum+ types have
|
17
|
+
a name and consist of a set of string literals, each of which is a valid instance of the type.
|
18
|
+
|
19
|
+
+References+ point to one or more other elements. References can not point to or take primitive values.
|
20
|
+
|
21
|
+
+Containment+ relationships are references with the difference that the contained element is part of the parent element,
|
22
|
+
whereas the referenced element normally is not (there may be exceptions). When the parent element is deleted, the contained
|
23
|
+
elements are also deleted. When the parent element is collapsed the contained elements are hidden.
|
24
|
+
|
25
|
+
Attributes, reference and containmend relationships are called _features_ of an element. Features have names,
|
26
|
+
although they may not be visible.
|
27
|
+
|
28
|
+
Attributes and references contain _values_ whereas containment relationships contain _elements_.
|
29
|
+
|
30
|
+
|
31
|
+
== Navigation and Selection ==
|
32
|
+
|
33
|
+
=== Selecting Elements/Values ===
|
34
|
+
|
35
|
+
For all editing commands described below, at least one element or attribute/reference value needs to be selected.
|
36
|
+
Selection can be done with the arrow keys (+Left+, +Right+, +Up+, +Down+), with +Tab+ and +Shift-Tab+ or with the mouse.
|
37
|
+
|
38
|
+
Selection with the mouse is straightforward, just click the element.
|
39
|
+
|
40
|
+
Using the key +Tab+ and +Shift-Tab+, the next/previous element/value can be selected with respect to the logical order
|
41
|
+
(instead of the graphical order on the screen). If an element has other elements or values inside, +Tab+ will select
|
42
|
+
the first child, and so on.
|
43
|
+
|
44
|
+
In contrast to the tab keys, the arrow keys select with respect to the graphical position on the screen.
|
45
|
+
Press one of +Left+, +Right+, +Up+, +Down+, to move the selection in the respective direction.
|
46
|
+
When an element has other elements or values inside, the next selected element may be one of these elements.
|
47
|
+
In order to know if the next selected element is inside or outside of the current element, you need to be aware of
|
48
|
+
the current _cursor_ position. The _cursor_ is a little dot on the border of the selected element/value.
|
49
|
+
If the cursor is on the left border and you press +Right+, the next selected element will be inside of the
|
50
|
+
current element (given that it has child elements). Otherwise, if you press +Left+, the next selected element
|
51
|
+
will be outside, left of the current element (given that there are elements on the left). The same is true for the
|
52
|
+
other directions, of course. If the next element would be outside but there are no elements in this direction, the
|
53
|
+
parent element will be selected.
|
54
|
+
|
55
|
+
Hold +Shift+ down shift while moving the selection with any of the methods described above to extend to selection (_multi select_).
|
56
|
+
|
57
|
+
=== Navigating References ===
|
58
|
+
|
59
|
+
When you move the mouse over a valid reference value while prssing +Ctrl+, the reference target will be highlighted.
|
60
|
+
However, you might not see the target if it is outside of the visible area on the screen.
|
61
|
+
|
62
|
+
You can click the left mouse button on a valid reference value while pressing +Ctrl+ to select the reference target.
|
63
|
+
This will automatically scroll to make the target visible.
|
64
|
+
|
65
|
+
References can also be followed by pressing +Alt-Right+ while a valid reference value is selected. This will select
|
66
|
+
the target element and scroll to make it visible. By pressing +Alt-Left+ you can go back the references in reverse order.
|
67
|
+
|
68
|
+
=== Folding ===
|
69
|
+
|
70
|
+
Elements with containment relationships can be collapsed using +Ctrl-Left+. This will hide the containment relationships
|
71
|
+
including the contained elements. In order to expand the element again, press +Ctrl-Right+.
|
72
|
+
|
73
|
+
You can collapse and expand elements recursively using +Ctrl-Shift-Left+ and +Ctrl-Shift-Right+. This will also
|
74
|
+
collapse/expand child elements.
|
75
|
+
|
76
|
+
In addition to this, empty features may collapse depending on the DSL configuration. This happens when you leave
|
77
|
+
the currently selected element (i.e. select another element which is not a child). You can show all hidden featurs
|
78
|
+
be pressing +Shift-Return+. This command also expands the current element.
|
79
|
+
|
80
|
+
All collapsing commands also work with multiple elements selected.
|
81
|
+
|
82
|
+
Depending on the DSL, folding may also be triggered by clicking on the fold button (e.g. a plus or minus sign).
|
83
|
+
|
84
|
+
|
85
|
+
== Editing ==
|
86
|
+
|
87
|
+
=== Edit Mode ===
|
88
|
+
|
89
|
+
Whenever you want to actually edit text (e.g. to edit an attribute value or choose an element's type) you need to be in _edit mode_.
|
90
|
+
The easiest way to enter edit mode is by just typing text while an element/value is selected. More explicitly you may also
|
91
|
+
click the element or value while it is already selected or press +F2+ or +Ctrl-Space+.
|
92
|
+
|
93
|
+
You can leave edit mode and cancel your edit by pressing +Esc+ or click the mouse somewhere outside of the current edit box.
|
94
|
+
|
95
|
+
In order to leaave edit mode and actually use your changes, press +Return+, +Tab+ or +Shift-Tab+.
|
96
|
+
If an error is detected with your input (e.g. because you entered letters for an Integer value),
|
97
|
+
you can not successfully leave edit mode. In this case, either correct your input or cancel edit mode.
|
98
|
+
|
99
|
+
If a set of completion options is available for the current element/value, a dropdown box will be shown in edit mode
|
100
|
+
when you start typing. You can bring up the dropdown box without typing by pressing one of the arrow keys.
|
101
|
+
|
102
|
+
|
103
|
+
=== Creating Elements ===
|
104
|
+
|
105
|
+
Elements can be created on toplevel or as children in a containment relationship. If in either place, there are no
|
106
|
+
other elements yet, an empty placeholder element will be shown.
|
107
|
+
In this case, select the placeholder, enter edit mode and type the name of the element class to be created.
|
108
|
+
Once in edit mode, a dropdown box appears showing possible completion options.
|
109
|
+
|
110
|
+
If an element should be added to a set of existing elements, select one of the existing ones and press +Return+.
|
111
|
+
This will insert a placeholder after the selected element and immediately enter edit mode.
|
112
|
+
|
113
|
+
When an element is created, all features are shown although they are empty. Depending on the configuration of the
|
114
|
+
editor, empty features may be hidden when you select a different element which is not a child. In oder to
|
115
|
+
show the hidden features again, press +Shift-Return+.
|
116
|
+
|
117
|
+
=== Changing the Element Type ===
|
118
|
+
|
119
|
+
When you enter edit mode while an element is selected, the element's type can be changed. When the type changes,
|
120
|
+
feature values will be preserved for features which also exist in the new type.
|
121
|
+
|
122
|
+
=== Deleting Elements ===
|
123
|
+
|
124
|
+
Elements can be deleted by pressing +Del+. This also works if multiple elements are selected.
|
125
|
+
|
126
|
+
=== Editing Attribute Values ===
|
127
|
+
|
128
|
+
In a newly created element, no attribute values exist. You can create an attribute value by entering edit mode on
|
129
|
+
an empty value placeholder. As with elements, pressing +Return+ on a value will insert another value, pressing +Del+ removes the value.
|
130
|
+
In case the attribute to be edited is hidden, press +Shift-Return+ to show it.
|
131
|
+
|
132
|
+
=== Editing Reference Values ===
|
133
|
+
|
134
|
+
Reference values can be edited in the same way as attribute values. The content of a reference value is the identifier
|
135
|
+
of the referenced element. Use the dropdown box in edit mode to choose one of the possible target elements.
|
136
|
+
Note, that only elements with an identifier can be referenced.
|
137
|
+
|
138
|
+
=== Copy and Paste ===
|
139
|
+
|
140
|
+
Both element and values can be cut, copied and pasted with +Ctrl-X+, +Ctrl-C+ and +Ctrl-V+ respectively. This also works
|
141
|
+
with multiples elements selected. Note however, that you can not paste an attribute or reference value where an element
|
142
|
+
is expected and vice versa.
|
143
|
+
|
144
|
+
|
145
|
+
== Hover Information ==
|
146
|
+
|
147
|
+
Some information is show only when moving the mouse over a model element or value. Make sure to focus the editor first,
|
148
|
+
otherwise the hovers will not appear.
|
149
|
+
|
150
|
+
|
151
|
+
=== Errors ===
|
152
|
+
|
153
|
+
The DSL defines constraints on possible models. For example, for some attributes only a single value might be
|
154
|
+
allowed, whereas for other attributes you may provide more than one value.
|
155
|
+
If a constraint is violated for an element or feature, the element/feature will be marked as erroneous.
|
156
|
+
Move the mouse over such an element in order to show the error message in a popup window.
|
157
|
+
|
158
|
+
|
159
|
+
=== Model Information ===
|
160
|
+
|
161
|
+
Depending on the concrete syntax, the feature names might be hidden. When moving the mouse over a model value, the name of the
|
162
|
+
feature that value belongs to will be shown. Also for references, the full identifier will be shown.
|
163
|
+
|
164
|
+
|
165
|
+
== Workbench ==
|
166
|
+
|
167
|
+
Some editors might use the "workbench" functionality which comes with _Concrete_. The workbench features:
|
168
|
+
|
169
|
+
* a module index view
|
170
|
+
* a module editor view
|
171
|
+
* following references across modules
|
172
|
+
* finding elements based on a index ("open element")
|
173
|
+
* search/replace functionality
|
174
|
+
* switchable layouts via the preferences dialog
|
175
|
+
|
176
|
+
Using the workbench should be pretty much self-explanatory. Some of the commands can be invoked using hotkeys which are described
|
177
|
+
in the command reference below.
|
178
|
+
|
179
|
+
|
180
|
+
== Command Reference ==
|
181
|
+
|
182
|
+
.Keyboard
|
183
|
+
[frame="topbot",grid="none"]
|
184
|
+
|=======================
|
185
|
+
| Left, Right, Up, Down | move selection
|
186
|
+
| Tab, Shift-Tab | move selection in sequential order, select first child if available, stop editing when in edit mode
|
187
|
+
| Shift-Left, Shift-Right, Shift-Up, Shift-Down | extend selection (multi select)
|
188
|
+
| Ctrl-A | select all
|
189
|
+
| Return | insert new element/value after current element/value, stop editing when in edit mode
|
190
|
+
| Del | delete selected element/value(s)
|
191
|
+
| start typing, F2, Ctrl-Space | edit selected element/value (enter edit mode)
|
192
|
+
| Esc | stop editing when in edit mode
|
193
|
+
| Ctrl-C | copy selection to clipboard
|
194
|
+
| Ctrl-X | cut selection to clipboard
|
195
|
+
| Ctrl-V | insert from clipboard after selected element/value
|
196
|
+
| Ctrl-Left | collapse element
|
197
|
+
| Ctrl-Shift-Left | collapse element and all child elements
|
198
|
+
| Ctrl-Right | expand element
|
199
|
+
| Ctrl-Shift-Right | expand element and all child elements
|
200
|
+
| Shift-Return | show hidden features (auto-hide features will hide again when selection leaves the element)
|
201
|
+
| Alt-Right | select reference target (jump to reference target) if a reference is selected
|
202
|
+
| Alt-Left | jump back references in reverse order
|
203
|
+
|=======================
|
204
|
+
|
205
|
+
.Mouse
|
206
|
+
[frame="topbot",grid="none"]
|
207
|
+
|=======================
|
208
|
+
| Left Click | move selection, stop editing when in edit mode
|
209
|
+
| Shift-Left Click | extend selection (multi select)
|
210
|
+
| Left click already selected element/value | edit selected element/value (enter edit mode)
|
211
|
+
| Hover over element/value | show errors if present
|
212
|
+
| Ctrl-Hover over reference | highlight reference target
|
213
|
+
| Ctrl-Left Click | select reference target (jump to reference target)
|
214
|
+
|=======================
|
215
|
+
|
216
|
+
.Workbench Commands
|
217
|
+
[frame="topbot",grid="none"]
|
218
|
+
|=======================
|
219
|
+
| Ctrl-Shift-S | save model
|
220
|
+
| Ctrl-Shift-F | open search/replace dialog
|
221
|
+
| Ctrl-Shift-E | open "open element" dialog
|
222
|
+
|=======================
|
223
|
+
|
@@ -0,0 +1,11 @@
|
|
1
|
+
[{"_class": "Sqrt", "expr":
|
2
|
+
{"_class": "Fraction", "expr1":
|
3
|
+
{"_class": "Mult", "expr1":
|
4
|
+
{"_class": "Value", "value": "33"}, "expr2":
|
5
|
+
{"_class": "Sqrt", "expr":
|
6
|
+
{"_class": "Fraction", "expr1":
|
7
|
+
{"_class": "Value", "value": "5"}, "expr2":
|
8
|
+
{"_class": "Plus", "expr1":
|
9
|
+
{"_class": "Value", "value": "100"}, "expr2":
|
10
|
+
{"_class": "Value", "value": "7"}}}}}, "expr2":
|
11
|
+
{"_class": "Value", "value": "6"}}}]
|
@@ -0,0 +1,83 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<link rel="stylesheet" href="../themes/cobalt.css" type="text/css" />
|
4
|
+
<link rel="stylesheet" href="style.css" type="text/css" />
|
5
|
+
<script src="../../redist/prototype.js" type="text/javascript"></script>
|
6
|
+
<script src="../../redist/scriptaculous/scriptaculous.js" type="text/javascript"></script>
|
7
|
+
<script src="../../concrete/concrete.js" type="text/javascript"></script>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
<div id="templates1" style="display: none">
|
11
|
+
<div class="ct_element ctc_Fraction" style="display: inline-block">
|
12
|
+
<div class="ct_containment ctn_expr1" style="text-align: center; border-bottom: 1px solid white"><span style="display: inline-block; padding: 3px"><span class="ct_slot"></span></span></div>
|
13
|
+
<div class="ct_containment ctn_expr2" style="text-align: center"><span style="display: inline-block; padding: 3px"><span class="ct_slot"></span></span></div>
|
14
|
+
</div>
|
15
|
+
<div class="ct_element ctc_Sqrt" style="display: inline-block">
|
16
|
+
<div>
|
17
|
+
<div class="ct_containment ctn_expr" style=""><span style="display: inline-block; padding: 3px"><span class="ct_slot"></span></span></div>
|
18
|
+
</div>
|
19
|
+
</div>
|
20
|
+
<div class="ct_element ctc_Mult" style="display: inline-block">
|
21
|
+
(<span class="ct_containment ctn_expr1" style="vertical-align: middle"><span class="ct_slot"></span></span>
|
22
|
+
<span class="ct_handle" style="vertical-align: middle">*</span>
|
23
|
+
<span class="ct_containment ctn_expr2" style="vertical-align: middle"><span class="ct_slot"></span></span>)
|
24
|
+
</div>
|
25
|
+
<div class="ct_element ctc_Plus" style="display: inline-block">
|
26
|
+
(<span class="ct_containment ctn_expr1" style="vertical-align: middle"><span class="ct_slot"></span></span>
|
27
|
+
<span class="ct_handle" style="vertical-align: middle">+</span>
|
28
|
+
<span class="ct_containment ctn_expr2" style="vertical-align: middle"><span class="ct_slot"></span></span>)
|
29
|
+
</div>
|
30
|
+
<span class="ct_element ctc_Value">
|
31
|
+
<span class="ct_handle">v</span>
|
32
|
+
(<span class="ct_attribute ctn_value"><span class="ct_slot"></span></span>)
|
33
|
+
</span>
|
34
|
+
<span class="ct_element ctc_Neg">
|
35
|
+
<span class="ct_handle"></span>
|
36
|
+
-(<span class="ct_containment ctn_expr"><span class="ct_slot"></span></span>)
|
37
|
+
</span>
|
38
|
+
</div>
|
39
|
+
<div id="metamodel1" style="display: none">
|
40
|
+
[{"_class": "Datatype", "name": "String"},
|
41
|
+
{"_class": "Class", "name": "Expression", "abstract": true},
|
42
|
+
{"_class": "Class", "name": "Sqrt", "superTypes": "Expression", "features":
|
43
|
+
{"_class": "Feature", "name": "expr", "kind": "containment", "lowerLimit": 1, "upperLimit": 1, "type": "Expression"}},
|
44
|
+
{"_class": "Class", "name": "Fraction", "superTypes": "Expression", "features": [
|
45
|
+
{"_class": "Feature", "name": "expr1", "kind": "containment", "lowerLimit": 1, "upperLimit": 1, "type": "Expression"},
|
46
|
+
{"_class": "Feature", "name": "expr2", "kind": "containment", "lowerLimit": 1, "upperLimit": 1, "type": "Expression"}]},
|
47
|
+
{"_class": "Class", "name": "Mult", "superTypes": "Expression", "features": [
|
48
|
+
{"_class": "Feature", "name": "expr1", "kind": "containment", "lowerLimit": 1, "upperLimit": 1, "type": "Expression"},
|
49
|
+
{"_class": "Feature", "name": "expr2", "kind": "containment", "lowerLimit": 1, "upperLimit": 1, "type": "Expression"}]},
|
50
|
+
{"_class": "Class", "name": "Plus", "superTypes": "Expression", "features": [
|
51
|
+
{"_class": "Feature", "name": "expr1", "kind": "containment", "lowerLimit": 1, "upperLimit": 1, "type": "Expression"},
|
52
|
+
{"_class": "Feature", "name": "expr2", "kind": "containment", "lowerLimit": 1, "upperLimit": 1, "type": "Expression"}]},
|
53
|
+
{"_class": "Class", "name": "Neg", "superTypes": "Expression", "features":
|
54
|
+
{"_class": "Feature", "name": "expr", "kind": "containment", "lowerLimit": 1, "upperLimit": 1, "type": "Expression"}},
|
55
|
+
{"_class": "Class", "name": "Value", "superTypes": "Expression", "features":
|
56
|
+
{"_class": "Feature", "name": "value", "kind": "attribute", "lowerLimit": 1, "upperLimit": 1, "type": "String"}}]
|
57
|
+
</div>
|
58
|
+
<div class="ct_editor" id="editor1">
|
59
|
+
</div>
|
60
|
+
<br/>
|
61
|
+
<textarea id="clipboard1" style="background-color: white; color: black; border: 1px solid grey" cols="80" rows="10" wrap="off"></textarea>
|
62
|
+
</div>
|
63
|
+
<script type="text/javascript" language="javascript" charset="utf-8">
|
64
|
+
// <![CDATA[
|
65
|
+
var tp = new Concrete.TemplateProvider($("templates1"));
|
66
|
+
var mp = new Concrete.MetamodelProvider($("metamodel1").textContent.evalJSON());
|
67
|
+
var ip = new Concrete.QualifiedNameBasedIdentifierProvider("name");
|
68
|
+
var cb = new Concrete.Clipboard($("clipboard1"));
|
69
|
+
var ed = new Concrete.Editor($("editor1"), tp, mp, ip, {clipboard: cb});
|
70
|
+
|
71
|
+
Event.observe(window, 'click', function(event) {
|
72
|
+
ed.handleEvent(event)
|
73
|
+
});
|
74
|
+
Event.observe(window, 'keydown', function(event) {
|
75
|
+
ed.handleEvent(event)
|
76
|
+
});
|
77
|
+
Event.observe(window, 'mousemove', function(event) {
|
78
|
+
ed.handleEvent(event);
|
79
|
+
});
|
80
|
+
// ]]>
|
81
|
+
</script>
|
82
|
+
</body>
|
83
|
+
</html>
|
Binary file
|
Binary file
|
@@ -0,0 +1,31 @@
|
|
1
|
+
|
2
|
+
/* Metamodel Specific Styles
|
3
|
+
*****************************************************************************/
|
4
|
+
|
5
|
+
/* overwrite indentation of contained elements (default) */
|
6
|
+
|
7
|
+
.ct_containment {
|
8
|
+
padding: 0;
|
9
|
+
}
|
10
|
+
|
11
|
+
.ct_containment .ct_element {
|
12
|
+
margin: 0;
|
13
|
+
}
|
14
|
+
|
15
|
+
.ct_containment > .ct_slot > .ct_inline_editor {
|
16
|
+
margin: 0;
|
17
|
+
}
|
18
|
+
|
19
|
+
/* use images for the square root */
|
20
|
+
|
21
|
+
div.ctc_Sqrt {
|
22
|
+
padding-left: 19px; background: url(sqrt_vert.png) no-repeat left bottom;
|
23
|
+
}
|
24
|
+
|
25
|
+
div.ctc_Sqrt.ct_selected {
|
26
|
+
padding-left: 19px; background: url(sqrt_vert.png) no-repeat left bottom #001120;
|
27
|
+
}
|
28
|
+
|
29
|
+
div.ctc_Sqrt > div {
|
30
|
+
background: url(sqrt_horz.png) no-repeat right top;
|
31
|
+
}
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'webrick'
|
2
|
+
|
3
|
+
#
|
4
|
+
# Simple ajax interaction with Concrete editor
|
5
|
+
#
|
6
|
+
# Adapt the path to the browser (Firefox or Chrome) below.
|
7
|
+
# Startup the browser before you run this script, otherwise it might hang.
|
8
|
+
#
|
9
|
+
Browser = "firefox"
|
10
|
+
Port = 1234
|
11
|
+
|
12
|
+
class ConcreteServer
|
13
|
+
|
14
|
+
def initialize(file)
|
15
|
+
@file = file
|
16
|
+
@server = WEBrick::HTTPServer.new(:Port => Port)
|
17
|
+
@server.mount_proc("/") do |req, res|
|
18
|
+
handleRequest(req, res)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def start
|
23
|
+
@server.start do |sock|
|
24
|
+
@server.run(sock)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def handleRequest(req, res)
|
31
|
+
if req.path == "/"
|
32
|
+
res.body = File.read("metamodel_editor.html").sub("<!-- json model here -->", File.read(@file))
|
33
|
+
elsif req.path == "/save"
|
34
|
+
File.open(@file, "w") {|f| f.write(req.body)}
|
35
|
+
elsif req.path == "/exit"
|
36
|
+
@server.shutdown
|
37
|
+
elsif req.path == "/favicon.ico"
|
38
|
+
# ignore
|
39
|
+
else
|
40
|
+
res.body = File.read("../.."+req.path)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
if (ARGV.size == 0)
|
47
|
+
puts "Usage: edit.rb <json file>"
|
48
|
+
exit
|
49
|
+
end
|
50
|
+
|
51
|
+
# if the browser is not yet running the following line might block
|
52
|
+
system "#{Browser} http://localhost:#{Port}/"
|
53
|
+
ConcreteServer.new(ARGV[0]).start
|
54
|
+
|
@@ -0,0 +1,18 @@
|
|
1
|
+
[{"_class": "Datatype", "name": "String"},
|
2
|
+
{"_class": "Class", "name": "Expression", "abstract": true},
|
3
|
+
{"_class": "Class", "name": "Sqrt", "superTypes": "Expression", "features":
|
4
|
+
{"_class": "Feature", "name": "expr", "kind": "containment", "lowerLimit": 1, "upperLimit": 1, "type": "Expression"}},
|
5
|
+
{"_class": "Class", "name": "Fraction", "superTypes": "Expression", "features": [
|
6
|
+
{"_class": "Feature", "name": "expr1", "kind": "containment", "lowerLimit": 1, "upperLimit": 1, "type": "Expression"},
|
7
|
+
{"_class": "Feature", "name": "expr2", "kind": "containment", "lowerLimit": 1, "upperLimit": 1, "type": "Expression"}]},
|
8
|
+
{"_class": "Class", "name": "Mult", "superTypes": "Expression", "features": [
|
9
|
+
{"_class": "Feature", "name": "expr1", "kind": "containment", "lowerLimit": 1, "upperLimit": 1, "type": "Expression"},
|
10
|
+
{"_class": "Feature", "name": "expr2", "kind": "containment", "lowerLimit": 1, "upperLimit": 1, "type": "Expression"}]},
|
11
|
+
{"_class": "Class", "name": "Plus", "superTypes": "Expression", "features": [
|
12
|
+
{"_class": "Feature", "name": "expr1", "kind": "containment", "lowerLimit": 1, "upperLimit": 1, "type": "Expression"},
|
13
|
+
{"_class": "Feature", "name": "expr2", "kind": "containment", "lowerLimit": 1, "upperLimit": 1, "type": "Expression"}]},
|
14
|
+
{"_class": "Class", "name": "Neg", "superTypes": "Expression", "features":
|
15
|
+
{"_class": "Feature", "name": "expr", "kind": "containment", "lowerLimit": 1, "upperLimit": 1, "type": "Expression"}},
|
16
|
+
{"_class": "Class", "name": "Value", "superTypes": "Expression", "features":
|
17
|
+
{"_class": "Feature", "name": "value", "kind": "attribute", "lowerLimit": 1, "upperLimit": 1, "type": "String"}}]
|
18
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
[
|
2
|
+
{"_class": "Datatype", "name": "String"},
|
3
|
+
{"_class": "Datatype", "name": "Integer"},
|
4
|
+
{"_class": "Datatype", "name": "Boolean"},
|
5
|
+
{"_class": "Enum", "name": "FeatureKindType", "literals": ["attribute", "reference", "containment"]},
|
6
|
+
{"_class": "Class", "name": "Classifier", "abstract": true, "features": {"_class": "Feature", "name": "name", "kind": "attribute", "lowerLimit": 1, "upperLimit": 1, "type": "String"}},
|
7
|
+
{"_class": "Class", "name": "Datatype", "superTypes": "Classifier"},
|
8
|
+
{"_class": "Class", "name": "Enum", "superTypes": "Datatype", "features": {"_class": "Feature", "name": "literals", "kind": "attribute", "lowerLimit": 1, "upperLimit": -1, "type": "String"}},
|
9
|
+
{"_class": "Class", "name": "Class", "superTypes": "Classifier", "features": [
|
10
|
+
{"_class": "Feature", "name": "superTypes", "kind": "reference", "upperLimit": -1, "type": "Class"},
|
11
|
+
{"_class": "Feature", "name": "features", "kind": "containment", "upperLimit": -1, "type": "Feature"},
|
12
|
+
{"_class": "Feature", "name": "abstract", "kind": "attribute", "upperLimit": 1, "type": "Boolean"}
|
13
|
+
]},
|
14
|
+
{"_class": "Class", "name": "Feature", "features": [
|
15
|
+
{"_class": "Feature", "name": "name", "kind": "attribute", "lowerLimit": 1, "upperLimit": 1, "type": "String"},
|
16
|
+
{"_class": "Feature", "name": "kind", "kind": "attribute", "lowerLimit": 1, "upperLimit": 1, "type": "FeatureKindType"},
|
17
|
+
{"_class": "Feature", "name": "lowerLimit", "kind": "attribute", "upperLimit": 1, "type": "Integer"},
|
18
|
+
{"_class": "Feature", "name": "upperLimit", "kind": "attribute", "upperLimit": 1, "type": "Integer"},
|
19
|
+
{"_class": "Feature", "name": "type", "kind": "reference", "lowerLimit": 1, "upperLimit": 1, "type": "Classifier"}
|
20
|
+
]}
|
21
|
+
]
|
22
|
+
|