Code Monkey home page Code Monkey logo

draw's Introduction

alt text

An intuitive collaborative drawing web based tool.

Collaborative real-time drawing, sketching & painting

Fast, light weight, easy to maintain. Try the demo.

Demo

Etherdraw Demo site

Installation

On Debian Jessie.

# Install Requirements
sudo apt-get update && sudo apt-get install git libcairo2-dev libjpeg62-turbo-dev libpango1.0-dev libgif-dev build-essential g++
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash - && sudo apt-get install -y nodejs
git clone git://github.com/JohnMcLear/draw.git
cd draw
bin/run.sh 

Make a drawing! Open your browser and visit http://127.0.0.1:9002

Requirements

  • NodeJS
  • Lib Cairo
  • Lib Jpeg
  • Lib Gif

License

Apache 2 License

Donations

Donate to the Etherpad Foundation

draw's People

Contributors

byrichardpowell avatar bytesnz avatar danbeard avatar darkpurple141 avatar frnsys avatar johnmclear avatar mottosso avatar ocdtrekkie avatar ooxi avatar rugk avatar tranek avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

draw's Issues

Removed all references to Etherpad

bin/run.sh:14:   echo "Please type 'Etherpad Lite rocks my socks' if you still want to start it as root"
settings.json.template:14:  //IP and port which etherpad should bind at
settings.json.template:23:  // so that the Etherpad server can access them
settings.json.template:51:  "defaultPadText" : "Welcome to Etherpad Lite!\n\nThis pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents!\n\nGet involved with Etherpad at http:\/\/etherpad.org\n",
CONTRIBUTING.md:2:(Please talk to people on the mailing list before you change this page, see our section on [how to get in touch](https://github.com/ether/etherpad-lite#get-in-touch))
CONTRIBUTING.md:15:Also, keep it maintainable. We don't wanna end ob as the monster Etherpad was!
settings.json:14:  //IP and port which etherpad should bind at
settings.json:23:  // so that the Etherpad server can access them
settings.json:51:  "defaultPadText" : "Welcome to Etherpad Lite!\n\nThis pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents!\n\nGet involved with Etherpad at http:\/\/etherpad.org\n",

Do logic on common shapes

Speed knobs and smilie faces are the usal thing people try to draw, it might make sense to detect these types of shapes and perform some logic such as a warning or so

Drawing brush behavior counter-intuitive, opposite of most pseudo-natural brushes.

The current behavior for the brush is:

the fastest you draw, the bigger the brush size.

From my experience with a lot of non-pressure sensitive, pseudo-natural brushes tools, for example on iPad, it's the opposite of how most brushes (all?) works when they implement that dynamic size behavior.

You generally have a brush that is thin when drawing quickly, allowing for fast sketches, and that pseudo-leak paint when going slow, allowing for filling.
It kind-of mimics the behavior of a real brushes.

(I actually found myself trying to sketch fast several times, each time rediscovering that I'm supposed to go slow…)

You might want to consider reversing the behavior.

Select and delete existing paths

This might be tricky if the client and server are not synced by path ID numbers. You can set unique names to paths, but I'm not sure if that gets exported in the JSON.

Export SVG and PNG only export the rendered part of the drawing, not the full drawing

if you export from a smaller display/viewport, the exported data url only include the rendered part of the drawing.
= the drawing is clipped in comparison with the desktop version.

Make sense in term of export effectiveness (no server-side render, instant) but might trouble groups where users work with a variety of viewport sizes (most groups?).

(aside: love the data url way, no file to actually download then upload and then share is perfect for mobile devices)

Select and Draw buttons access in landscape mode on iPhone 5

At the moment, Draw is already cool to use on an iPhone 5.

But some trouble

In Safari Mobile fullscreen/landscape mode, the Select button is stuck under the "out of fullscreen" button.

In Chrome, both Draw and Select are stuck under the fold, but you can reach them by double-touching the screen and scrolling down. (interestingly, there is then a blank space under the fold, stay blank, never refreshed, can't draw in it)

Remove Jade

Since Jade is only used to assemble one static file, we should remove that dependency

UI requirements

Move artists into Etherpad Style user icon view
Move Invite some friends into some more central point with a close button
Make Opacity Slider actually change opacity
Remove text from opacity Slider
Make Clear button into icon (Trash maybe?)
Move Exports under an icon
Use jQuery Pep to make controls movable but keep opacity slider functionality, after this is done the color selector will need to be location aware so it
is always visible on screen

Rethink Clear button

Too easy to be so destructive with one click. An "Are you sure? This will clear everyone's work." popup might be a solution.

projects[room].project.activeLayer.remove(); can kill node process

/home/draw/draw/server.js:160
          projects[room].project.activeLayer.remove();
                                             ^
TypeError: Cannot call method 'remove' of null
    at Object.callback (/home/draw/draw/server.js:160:46)
    at /home/draw/draw/node_modules/ueberDB/CloneAndAtomicLayer.js:100:17
    at /home/draw/draw/node_modules/ueberDB/CacheAndBufferLayer.js:198:7
    at exports.database.get (/home/draw/draw/node_modules/ueberDB/dirty_db.js:48:3)
    at exports.database.get (/home/draw/draw/node_modules/ueberDB/CacheAndBufferLayer.js:171:20)
    at doOperation [as operatorFunction] (/home/draw/draw/node_modules/ueberDB/CloneAndAtomicLayer.js:94:18)
    at exports.channels.emit (/home/draw/draw/node_modules/ueberDB/node_modules/channels/channels.js:38:11)
    at exports.database.get (/home/draw/draw/node_modules/ueberDB/CloneAndAtomicLayer.js:62:17)
    at /home/draw/draw/server.js:155:10
    at null.<anonymous> (/home/draw/draw/node_modules/ueberDB/dirty_db.js:42:5)

Safari Mobile iOS 6 = partial view, no scrolling possible

If you start a drawing on a desktop browser and then try to access it on an iPhone 5 with Safari Mobile, you can only view/draw on the top-left corner of the space.

There is no way to use double-touch to scroll or pinch-in / pinch-out. You are stuck seeing only a portion of the drawing space.

Licensing confusion

The README says:

See http://etherpad.org - Apache 2 License

But the LICENSE file is CCPL (Share Alike I assume??). Etherpad.org also has a CC BY-SA image at the bottom of it.

So to me, I see the LICENSE file and think it's some sort of CCPL. Then I visit Etherpad.org and see the BY-SA logo at the bottom, so I assume that EtherDraw is CCPL BY-SA also.

I hope that this explains my confusion.

Assign unique ids to each sketch

Each sketch should have a unique id, enabling multiple sketches on the same server and easy collaboration by copy-pasting urls.

Add other pencils

The current stroke is nice for artistic drawings but useless for sketches. At least a plain pencil should be added

Sync clients to server periodically

Periodically (or event driven) we should enforce a sync between the clients' and the server's copy of paper.

-Sometimes path strokes aren't sent to the server (drawn faster than 100ms I think) and others are sent that differ from the stroke seen by the author (some fast strokes will come out pointy instead of rounded cloud-like).

-It's possible for two clients to send updates to the server and have them received by the server in an unpredictable order causing the server to add them to its own copy of paper in an unpredictable order so the new project items could have differing IDs than what the clients think that they have.

This would be useful for any kind of transformations on already created paper items in the project such as #46 because we essentially select the object based on its ID. We would then need to add a simple token system to the server so that only one client can transform an object at a time.

When the server is syncing, we might want to pause sending out updates and queue them up. This probably wouldn't be an issue since the server's project is in memory and the exportJSON() function is really fast, but there may be a rare situation where the server is syncing and updates that aren't a part of the sync come through to the client before the sync does and the sync obliterates those updates by overwriting the client's canvas. Those updates would have to wait until the next sync to come back.

Thoughts on syncing server to clients?

Implement token mechanism for item ownership to move/edit

I'm pretty sure that the Earth will blow up if two people try to move the same item/path at the same time.

One way to mitigate this is to implement an ownership token that's controlled serverside. Whose ever's click/drag message arrives at the server first should get the token and releases the token on mouseup (with a timeout failsafe). This would introduce a slight pause in moving an item as you wait for the server to say that it's okay to move.

Thoughts on the problem? Thoughts on server arbitrated ownership? Any better ideas?

Share past sketch

If one user draws something and another joins, the newbie cannot see what his companion drawed before

Add chat box from Etherpad

As the name suggests, however this would not work well when draw is used as an Etherpad plugin (ep_draw) with two chat boxes (one for Etherpad and one in the ep_draw window). A simple URL boolean parameter for showing chatbox should make this work where the ep_draw would point to not showing the chatbox.

/ should open new sketch

When accessing / one should be redirected to a random url like in etherpad in order to be able to easily share a sketch by copy/pasting the url.

502 Bad Gateway error on install

Hey there,
I'm just wondering if anyone has experienced a 502 Bad Gateway error after installing this plugin.

I openly admit that I have a total novice when it comes to etherpad, and using github as well, so I apologize in advance if I'm posing my question to the wrong area.

Any help or direction is appreciated!

Show selected objects to other users

If person A selects a path, everyone else should be able to see that he has that path selected.

I'm waiting on this to hear back from the paperjs folks about setting custom selection colors instead of the default blue. That way we can show the selection in the color of the user who selected it (assuming we have artist colors as suggested in #60.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.