-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathROADMAP
72 lines (54 loc) · 2.99 KB
/
ROADMAP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
Controllers
===========
ExpressionController
--------------------
- Receives all user input events e.g. clicking on symbols, beginning to drag symbols, dropping symbols, etc
- Provides a framework for passing events down a callback chain to let plugins register special actions
- The controller will wrap the following callbacks from scriptaculous and pass them down the event chain, with modified arguements:
- onDrop - a draggable is dropped on a droppable
- arguments: event, draggable, droppable
- onHover - a draggable is hovered over a droppable
- arguments: event, draggable, droppable
- onDragStart - when a draggable is picked up
- arguments: event, draggable
- onDrag - called repeatedly as a draggable object is moved
- arguments: event, draggable
- onDragEnd - called when a drag is ended - not implemented since same use case as OnDrop?
- arguments: event, draggable
Each controller will have an events chain which is an array of instances of classes descended from Logic. Each will be tried in turn and if it responds to the callback then it will be executed. If it returns true the termination will be stopped. Any other value and the chain will continue to be executed.
LineController
--------------
- References an ExpressionController for the expression on that line
- Also provides callbacks for taking a new line, etc
SelectedExpressionController
----------------------------
- Receives click events from the selected expression
- Responsible for reporting on the content of the selection so the view can be drawn properly
ModifiedExpressionController
----------------------------
- Responsible for the expression that may be manipulated to replace the selection.
Views
=====
ExpressionView
--------------
- Bound to an ExpressionController and responsible for drawing the expression with JsMath
LineView
--------
- Draws a line with an expression and adds buttons for new lines etc
SelectionView + others?
-----------------------
- Draws the selected expression along with the UI to manipulate it. Will reference SelectedExpressionController and ModifiedExpressionController.
Models
------
ExpressionList, Fraction, Symbol
--------------------------------
- Used to build up a tree-like representation of an expression.
- Symbols have 'tags' denoting their properties. These are assigned so that logic plugins know which symbols to act on. Tags can be set globally (e.g. 'addition' on all symbols with the symbol '+', '-', '±', etc), or on a per-instance basis (e.g. 'matrix' on one instance of 'M'). Plugins will also need to be able to define custom properties on symbols, change their rendering, etc
Plugins
-------
- Callback chains will be used wherever possible to let plugins hook in logic. Possible plugins:
- Exponentiation dragging - dragging the b out of exp(a + b) will give exp(a)exp(b)
- Associativity - dragging c out of a(b + c + d) gives a(b + d) + ac
- Tensors
- Integration measures
- Numerical simplification and prefactor extraction