/**
 * The MIT License (MIT)
 * 
 * Copyright (c) 2015 Famous Industries Inc.
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */

'use strict';

/**
 * Channels are being used for interacting with the UI Thread when running in
 * a Web Worker or with the ThreadManager/ Compostior when running in single
 * threaded mode (no Web Worker).
 *
 * @class Channel
 * @constructor
 */
function Channel() {
    if (typeof self !== 'undefined' && self.window !== self) {
        this._enterWorkerMode();
    }
}


/**
 * Called during construction. Subscribes for `message` event and routes all
 * future `sendMessage` messages to the Main Thread ("UI Thread").
 * 
 * Primarily used for testing.
 * 
 * @method  _enterWorkerMode
 * @private
 */ 
Channel.prototype._enterWorkerMode = function _enterWorkerMode() {
    this._workerMode = true;
    var _this = this;
    self.addEventListener('message', function onmessage(ev) {
        _this.onMessage(ev.data);
    });
};

/**
 * Meant to be overriden by `Famous`.
 *
 * @type {Function} Assigned method will be invoked for every received message.
 */
Channel.prototype.onMessage = null;

/**
 * Sends a message to the ThreadManager.
 *
 * @param  {Any}    message Arbitrary message object.
 */
Channel.prototype.sendMessage = function sendMessage (message) {
    if (this._workerMode) {
        self.postMessage(message);
    } else {
        this.onmessage(message);
    }
};

/**
 * Meant to be overriden by the ThreadManager when running in the UI Thread.
 * Used for preserving API compatibility with Web Workers.
 * When running in Web Worker mode, this property won't be mutated.
 *
 * @private
 * @type {Function}     Assigned method will be invoked for every message
 *                      posted by `famous-core`
 */
Channel.prototype.onmessage = null;

/**
 * Sends a message to the manager of this channel (the `Famous` singleton) by
 * invoking `onMessage`.
 * Used for preserving API compatibility with Web Workers.
 *
 * @private
 * @alias onMessage
 */
Channel.prototype.postMessage = function postMessage(message) {
    return this.onMessage(message);
};

module.exports = Channel;

@@ -24,17 +24,16 @@
 (MIT)%0A *
- 
 %0A * Copy
@@ -68,25 +68,24 @@
 ries Inc.%0A *
- 
 %0A * Permissi
@@ -526,17 +526,16 @@
 ions:%0A *
- 
 %0A * The 
@@ -658,25 +658,24 @@
 Software.%0A *
- 
 %0A * THE SOFT
@@ -1672,25 +1672,24 @@
 Thread%22).%0A *
- 
 %0A * Primaril
@@ -1710,17 +1710,16 @@
 ting.%0A *
- 
 %0A * @met
@@ -1755,17 +1755,16 @@
 vate%0A */
- 
 %0AChannel
@@ -2026,36 +2026,16 @@
 ous%60.%0A *
-%0A * @type %7BFunction%7D
  Assigne
@@ -2087,16 +2087,52 @@
 essage.%0A
+ *%0A * @type %7BFunction%7D%0A * @override%0A
  */%0AChan
@@ -2671,41 +2671,8 @@
 *%0A *
- @private%0A * @type %7BFunction%7D    
  Ass
@@ -2721,32 +2721,8 @@
 sage
-%0A *                     
  pos
@@ -2741,16 +2741,53 @@
 us-core%60
+.%0A *%0A * @type %7BFunction%7D%0A * @override
 %0A */%0ACha

Fix JSDoc warnings in /core