      1 /**
      2  * @namespace
      3  */
      4 var Ozone = Ozone ? Ozone : {};
      5
      6 /**
      7  * @ignore
      8  * @namespace
      9  */
     10 Ozone.launcher = Ozone.launcher ? Ozone.launcher : {};
     11
     12 (function() {
     13
     14     var launchChannelName = "_WIDGET_LAUNCHER_CHANNEL";
     15
     16     /**
     17      *  @deprecated Since OWF 3.7.0  You should use <a href="#.getInstance">Ozone.launcher.WidgetLauncher.getInstance</a>
     18      *  @constructor  widgetEventingController - Ozone.eventing.Widget object
     19      *  @param  {Ozone.eventing.Widget} [widgetEventingController] - widget eventing object which handles eventing for the widget
     20      *  @description This object is used launch other widgets.  To do so it requires a widgetEventingController
     21      *
     22      */
     23     Ozone.launcher.WidgetLauncher = function() {
     24         if (Ozone.launcher.WidgetLauncher.instance == null) {
     25             this.version = Ozone.version.owfversion + Ozone.version.widgetLauncher
     26
     27             Ozone.launcher.WidgetLauncher.instance = this;
     28         }
     29
     30         return Ozone.launcher.WidgetLauncher.instance;
     31     };
     32
     33     Ozone.launcher.WidgetLauncher.prototype = {
     34
     35       /**
     36        * @description launches a Widget based on the config
     37        * @param {Object} config object see example for structure
     38        * @param {Function} callback a function to be called once after the launchWidget is executed
     39        *
     40        * @example
     41        *
     42        * //Example for launching a widget
     43        * var widgetEventingController = Ozone.eventing.Widget.getInstance();
     44        * var widgetLauncher = Ozone.launcher.WidgetLauncher.getInstance(this.widgetEventingController);
     45        * var data = {
     46        *   channel: channel,
     47        *   message: message
     48        * };
     49        * var dataString = Ozone.util.toString(data);
     50        * widgetLauncher.launchWidget({
     51        *     universalName: 'universal name of widget to launch',  //universalName or guid maybe identify the widget to be launched
     52        *     guid: 'guid of widget to launch',
     53        *     title: 'title to replace the widgets title' the title will only be changed if the widget is opened.
     54        *     titleRegex: optional regex used to replace the previous title with the new value of title
     55        *     launchOnlyIfClosed: true, //if true will only launch the widget if it is not already opened.
     56        *                               //if it is opened then the widget will be restored
     57        *     data: dataString  //initial launch config data to be passed to a widget only if the widget is opened.  this must be a string
     58        * });
     59        *
     60        */
     61         launchWidget: function(config,callback) {
     62             //send message to launch a widget
     63
     64             if (config.titleRegex != null && config.titleRegex instanceof RegExp) {
     65                 config.titleRegex = config.titleRegex.toString();
     66             }
     67
     68             var jsonString = gadgets.json.stringify(config);
     69             gadgets.rpc.call('..', launchChannelName, callback, OWF.getIframeId(), jsonString);
     70         }
     71     };
     72
     73     /**
     74      *  @constructor none
     75      *  @description Utility functions for a widget that has been launched
     76      *
     77      */
     78     Ozone.launcher.WidgetLauncherUtils = {
     79       /**
     80        * @description gets initial launch config data for this widget if it was just launched
     81        * @returns {Object} data object which contains initial information for the widget
     82        * @example
     83        *
     84        * var launchConfig = Ozone.launcher.WidgetLauncherUtils.getLaunchConfigData();
     85        * if (launchConfig != null) {
     86        *   var data = Ozone.util.parseJson(launchConfig);  //in this example the data object has two fields: channel and message
     87        *   if (data != null) {
     88        *       //do something with the data
     89        *       scope.subscribeToChannel(data.channel);
     90        *       scope.addToGrid(null,data.message,data.channel);
     91        *   }
     92        * }
     93        *
     94        */
     95         getLaunchConfigData: function() {
     96             var launchConfig = null;
     97
     98             //check for data in window.name
     99             var configParams = Ozone.util.parseWindowNameData();
    100             if (configParams != null) {
    101
    102                 //get launchConfig
    103                 launchConfig = configParams.data;
    104             }
    105
    106             return launchConfig;
    107         }
    108     };
    109
    110     /**
    111      *  @description Retrieves Ozone.eventing.Widget Singleton instance. This object is used launch other widgets.
    112      *  @example
    113      *  this.widgetLauncher = Ozone.launcher.WidgetLauncher.getInstance(this.widgetEventingController);
    114      */
    115     Ozone.launcher.WidgetLauncher.getInstance = function() {
    116         if (Ozone.launcher.WidgetLauncher.instance == null) {
    117             Ozone.launcher.WidgetLauncher.instance = new Ozone.launcher.WidgetLauncher();
    118         }
    119         return Ozone.launcher.WidgetLauncher.instance;
    120     };
    121
    122 }());
    123