--- /dev/null
+Poltergeist = (function () {
+
+ /**
+ * The MAIN class of the project
+ * @param port
+ * @param width
+ * @param height
+ * @param jsErrors
+ * @constructor
+ */
+ function Poltergeist(port, width, height, jsErrors) {
+ var self;
+ this.browser = new Poltergeist.Browser(this, width, height, jsErrors);
+
+ this.commandServer = new Poltergeist.Server(this, port);
+ this.commandServer.start();
+
+ self = this;
+
+ phantom.onError = function (message, stack) {
+ return self.onError(message, stack);
+ };
+
+ this.running = false;
+ }
+
+ /**
+ * Tries to execute a command send by a client and returns the command response
+ * or error if something happened
+ * @param command
+ * @param serverResponse
+ * @return {boolean}
+ */
+ Poltergeist.prototype.serverRunCommand = function (command, serverResponse) {
+ var error;
+ this.running = true;
+ try {
+ return this.browser.serverRunCommand(command, serverResponse);
+ } catch (_error) {
+ error = _error;
+ if (error instanceof Poltergeist.Error) {
+ return this.serverSendError(error, serverResponse);
+ }
+ return this.serverSendError(new Poltergeist.BrowserError(error.toString(), error.stack), serverResponse);
+ }
+ };
+
+ /**
+ * Sends error back to the client
+ * @param error
+ * @param serverResponse
+ * @return {boolean}
+ */
+ Poltergeist.prototype.serverSendError = function (error, serverResponse) {
+ var errorObject;
+ errorObject = {
+ error: {
+ name: error.name || 'Generic',
+ args: error.args && error.args() || [error.toString()]
+ }
+ };
+ return this.commandServer.sendError(serverResponse, 500, errorObject);
+ };
+
+ /**
+ * Send the response back to the client
+ * @param response Data to send to the client
+ * @param serverResponse Phantomjs response object associated to the client request
+ * @return {boolean}
+ */
+ Poltergeist.prototype.serverSendResponse = function (response, serverResponse) {
+ return this.commandServer.send(serverResponse, {response: response});
+ };
+
+ return Poltergeist;
+})();
+
+window.Poltergeist = Poltergeist;