__TODOLIST__ : VHIGH>HIGH>MID>LOW Idea : write another html file (visualize.html) where you can "point" items, but cannot modify the file. You should be able to "walk", but do nothing else. Oh, and chat. Very Important. Maybe the visualized file should be a xlink from a "normal" selvage page ? not sure about that bit. Clientside: -[HIGH] differentiate "root" from "work" where needed -- BLOCKING for layers -[MID-HIGH] layers (...) -[MID] history (lol)(serverside too !) -[MID] copy/paste (only local unfortunately. A js application has no possibility to work with the OS on this :( ) [note : almost done. need server work !] -[MID] change ellipses (and rects) into paths -[MID] markers -[MID] align/distribute -[MID] prettier UI (neverending wip) -[MID] nice ui for gradients -[MID] link for raw SVG generated by server -[LOW-MID] substitution in loaded styles -[LOW-MID] path creation : "z" -[LOW-MID] path operations (need maths for intersection points) -[LOW-MID] better hand paths (smoothing) -[LOW] white borders for resize, etc. arrows -[LOW] resize arrows after zoom has changed, with a timeout to avoid lag -[LOW] rows/columns -[MID] link for readonly -[MID] undo/redo client side -[LOW] grid/guides/rule -[LOW] Patterns -[LOW] clones (...) -[LOW] right click contextmenu -[LOW] spirals (when i understand WHAT IS a spiral :-] ) -[LOW] ellipse mode buttons(incomplete ellipses) -[LOW] tabs (open several files in same window - to have some working file2file copypaste) -[LOW] imitate etherpad for drawing selection dialog -[LOW] enter in drawing selection dialog activates the GO button -[VLOW] paint bucket Debug: -[HIGH]Copy/Paste -[VHIGH]as soon as some server inconsistency appears, debug it ! (none found at the moment) -[HIGH] first approach (impossibility of typing sometimes) -[MID] sometimes i lose the keyboard focus and cannot get it back (why !?) -[MID]Better gradient UI -[MID-HIGH] other bugs -[LOW] paraxial preview debug Serverside: -[HIGH] load/save/[clone : dependency on support] -[MID] copypaste work -[MID] history -[half-done][VHIGH] improve disk usage and general behavior -[HIGH] check for XSS vulns (i dont think there are any atm) -[LOW] undo/redo server side -[] Doc: -[LOW]Write other doc. Notes : [1 -- solved] the bounding box is not very well computed for paths. This is due to the fact that its size is based on the (loosely computed) bounding rect without taking the transforms into account, then *this* rectangle is rotated/transformed and the given bbox is the bbox of this rect. Which has no reason to be the bbox of the element, of course. To circumvent this, the paths should NOT be transformed. NEVER. (or temporarily, since it seems to be quicker to render. np with temporary things. ) Instead, the path should be *modified* when a transformation is applied (each point should suffer the transformation[dont forget _center]). This way, BBox should work as intended (mayhaps. It's worth the try, at least.) If not, i may have to construct the Bboxes myself, but I DONT WANT THAT (and it would awesomely slow the entire thing. Another idea would be onlyto compute it when absolutely needed and accomodate with buggy bbox elsewhere) . [2 -- later] I may need to implement path orientation detection to do path operations (?) [3]Implementation notes : -lib/ has jquery and jquerytools -svg/ has all js concerning js objects independantly from the editor point of view. __class inheritance__ : manipulable < Svgobject < container < {group,svg} Svgobject < {path,ellipse,rect} path < star Matrix, Point, Segment, Angle are classes used in various places. -img/ has all images used in the UI. -/ has editor-related files : -index.html is the main html file (along with a.css) -inkscape.js : initialization file with most used globals -zoom.js controls the user viewbox -websocket.js controls the interaction with the server -ui*.js controls various UI elements: arrows & selection boxes -selection.js controls the selection object (which derives from class manipulable) -mouse/mouse.js controls action of mouse in the canvas, redirecting to whatever action function is needed, on a high level. -mouse/mode*.js controls mouse action modes (chosen from toolbox) -layer.js may implement layers (layer > group) one day -kb.js controls action of keyboard. [4]Some methods come from svg.js library I found on the web. I started the project with only it, but I had to change so many things that I preferred after a while just drop it, keep what I was interested in, and modify it for my needs. Thanks to wout from github for what is his.