Added a way to closed the extended chat window
Added a way to closed the extended chat window
Changed to not use inline JavaScript
disconnect client if it submits an already accepted changeset based on an old revision
Added function to switch to a different pad without having to reload the whole page.
Fallback for browsers that don't support window.history.pushstate
Cleaning up switchToPad functionality so that we only need one call to the server("SWITCH_TO_PAD") instead of two (cleaning session info and client ready).
Also Clearing chat messages when switchToPad is called in pad.js instead of having the server tell the client to clear the chat messages.
Checking if the author for the sessions match instead of comparing the entire session.
Merge tag '1.4.1' into develop

1.4.1
Merge branch 'develop' of github.com:ether/etherpad-lite into develop
Merge branch 'develop' of github.com:ether/etherpad-lite into develop
Merge branch 'develop' of github.com:ether/etherpad-lite into develop
Merge branch 'develop' of github.com:ether/etherpad-lite into develop
Restore pad to new location at a given revision

This script gives an admin with shell access the ability to restore a
pad at a given revision by essentially rebuilding it at a new location
with data associated with the original pad.  The upsides to creating a
new pad vs. changing the original are: 1) avoiding service disruptions
(no deletes, no moving targets - builds from previous revision); and 2)
preservation of data (no deletes, no overwriting of the source pad).
The most obvious downside is the pad has a new ID which could require
folks to update their links, bookmarks, etc. to point at the new
location.
Merge branch 'develop' of github.com:ether/etherpad-lite into develop
Simplify the rebuild process

The majority of the information needed to build the new pad can be
communicated by simply cloning the rev using a db.set().
use cheerio instead of jsdom
so yeah, prolly can do this anyway?
mheh no browser requirement at all
really recreate socketio-client in expressCreateServer, fixes #2342

When using plugins, the express server gets restarted. When we do that,
the socketio-server should also get restarted. It doesn't. That means
that all the events in SocketIORouter.js are bound twice, which causes
chaos all over etherpad.

This changes our socketio.js so it fully recreates the io-instance when
we restart the server.

introduced in 95e7b0f15609fc850b71717a672abd02237a0f33, but catching
that would have been hard.