Restrict visibility change play/pauses to in-view videos
Merge pull request #54 from imakewebthings/vischangefix

Restrict visibility change play/pauses to in-view videos
Implement video -> GIF conversion.

I will likely split vid2gif out into a library soon-ish so this can be
used on other meatspac-related sites, but this will do for now.
Merge pull request #53 from meatspaces/gifsave

Implement video -> GIF conversion.
Refresh waypoints on chat removal, address issue #52
Merge pull request #57 from imakewebthings/wpfreezefix

Refresh waypoints on chat removal
Rename convert2webm to convert2video.
Simplify image validation.
Remove unnecessary recent chat array reversal.
Clean up a bunch of weirdness in convert2video.

- Check filesize before doing the work to convert to a buffer (yes, I'm
  aware this changes the checked filesize by about 10 bytes, but I'm
  pretty sure we don't care).
- Ensure that file cleanup is always done and won't be accidentally
  forgotten in a future commit.
- Don't create error/finish listeners in a loop, since they're always
  the same anyway.
Clean up handling of fingerprints.

This makes the handling more similar to meatspace v1, which is:
- Clients don't calculate a user ID or care about their IP.
- The server calculates a user ID with a fingerprint+IP hash. When a
  message is posted from a client, the server calls the client back to
  tell them what their user ID was.
- Clients track some amount of their previous user ID's and use this for
  e.g. hiding the mute button on their own messages.

Somewhat unrelatedly, this change also adds a size limit check before
doing a JSON.parse on socket messages, cause like, parsing arbitrarily
sized JSON is real bad. Especially since we'd just throw the data on the
ground 2 calls down the chain.
Trigger save button once conversion is done

Fix spacing

Remove special styling for saved
Merge pull request #58 from marcusramberg/save_at_once

Make convert button save at once.
Add missing semicolons
Merge pull request #59 from marcusramberg/tidy

Add missing semicolons.
Add jshintrc's for node and browser code (taken from original meatspac).
Avoid using socket.io callback functions.

The library the iOS client is using doesn't support these well, so
instead we'll send a separate ack message. Since the web client does no
error handling we don't track any outstanding messages and just handle
the acks to update our user ID list. In a future commit we could add
error handling here.

If clients want to track the ack for a specific message, they can send a
'key' field in their message object. This key will match the one used in
the result data in the messageack.
Don't make clients double-encode messages.
Don't let users crash the server by sending malformed JSON.
Break a long line up.