[PORTAL-16 PORTAL-18] Widget ms; staging
[portal.git] / ecomp-portal-FE-common / client / app / views / widget-catalog / widget-catalog.controller.js
index 2b0cc5c..859b9a8 100644 (file)
-/*-\r
- * ================================================================================\r
- * ECOMP Portal\r
- * ================================================================================\r
- * Copyright (C) 2017 AT&T Intellectual Property\r
- * ================================================================================\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- * \r
- *      http://www.apache.org/licenses/LICENSE-2.0\r
- * \r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- * ================================================================================\r
- */\r
-'use strict';\r
-(function () {\r
-\r
-    class WidgetCatalogCtrl {\r
-        constructor(widgetsService, $log, $cookies, $scope, conf, beReaderService, widgetsCatalogService, userProfileService,dashboardService,$compile, ngDialog) {\r
-            \r
-               $scope.editWidgetModalPopup = function(availableData, resourceType) {\r
-                       $scope.editData = JSON.stringify(availableData);\r
-                       $scope.availableDataTemp = $scope.availableData;\r
-                       ngDialog.open({\r
-                                       templateUrl : 'app/views/dashboard/dashboard-widget-manage.html',\r
-                                       controller : 'CommonWidgetController',\r
-                                       resolve : {\r
-                                               message : function message() {\r
-                                                       var message = {\r
-                                                               type : resourceType,\r
-                                                               availableData : $scope.editData\r
-                                                       };\r
-                                                       return message;\r
-                                               }\r
-                                       }\r
-                               }).closePromise.then(needUpdate => {    \r
-                                       if(resourceType=='NEWS'){\r
-                                               $scope.updateNews();\r
-                                       }else if(resourceType=='EVENTS'){\r
-                                               $scope.updateEvents();\r
-                                       }else if(resourceType=='IMPORTANTRESOURCES'){\r
-                                               $scope.updateImportRes();\r
-                                       }\r
-                 });           \r
-               };\r
-               \r
-               $scope.WidgetCatView = [];  \r
-               $scope.applyPresentationDetailsToWidgetsCatalog = function(widgetsReturned){\r
-                       var rowNo = 0;\r
-                       for (var i = 0; i < widgetsReturned.length; i++) {\r
-                       $scope.WidgetCatView[i] = {\r
-                       sizeX : 2,\r
-                       sizeY : 2,\r
-                       headerText:'',\r
-                       widgetIdentifier : '',\r
-                       url : '',\r
-                       widgetid: '',\r
-                       attrb:'',\r
-                       select: false,\r
-                       };\r
-                       $scope.WidgetCatView[i].widgetid = widgetsReturned[i].id;\r
-                       $scope.WidgetCatView[i].headerText = widgetsReturned[i].headerName;\r
-\r
-                       if(widgetsReturned[i].headerName === 'widget-news'){\r
-                       $scope.WidgetCatView[i].widgetIdentifier = 'NEWS';\r
-                       }\r
-                       else\r
-                       if(widgetsReturned[i].headerName === 'widget-resources'){\r
-                       $scope.WidgetCatView[i].widgetIdentifier = 'IMPORTANTRESOURCES';\r
-                       }\r
-                       else\r
-                       if(widgetsReturned[i].headerName === 'widget-events'){\r
-                       $scope.WidgetCatView[i].widgetIdentifier = 'EVENTS';\r
-                       }\r
-\r
-                       $scope.WidgetCatView[i].url = widgetsReturned[i].url;\r
-                       $scope.WidgetCatView[i].attrb = widgetsReturned[i].attrs;\r
-                       $scope.WidgetCatView[i].select = widgetsReturned[i].select;                     \r
-                       }\r
-\r
-                       $scope.widgetViewData = $scope.WidgetCatView;\r
-                       \r
-                       }\r
-               \r
-               /** Widget code starts */\r
-            let getUserWidgets = (loginName) => {\r
-                \r
-                this.isCommError = false;\r
-                var conf = this.conf;\r
-                        widgetsCatalogService.getUserWidgets(loginName).then(res => {\r
-                                \r
-                                if(!(res instanceof Array)){\r
-                                       this.isCommError = true;\r
-                                       return;\r
-                                }\r
-                        for(var i = 0; i < res.length; i++){   \r
-                                var widget_id = res[i][0];\r
-                                var widget_name = res[i][1];\r
-                                let url = this.conf.api.widgetCommon + "/" + widget_id + "/framework.js";\r
-                                $scope.widgetsList.push({\r
-                                                  id: widget_id,\r
-                                          name: widget_name,\r
-                                          headerName: widget_name,\r
-                                          url: url,\r
-                                          attrs: [{attr: 'data-' + widget_id, value: ''}],\r
-                                          status: res[i][4],\r
-                                          select: (res[i][4] == 'S' || res[i][4] === null) ? true : false\r
-                                        }); \r
-                                var script = document\r
-                                        .createElement('script');\r
-                                        script.src = url;\r
-                                        script.async = true;\r
-                                        var entry = document\r
-                                               .getElementsByTagName('script')[0];\r
-                                        entry.parentNode\r
-                                               .insertBefore(script, entry);\r
-                        }\r
-                        $scope.applyPresentationDetailsToWidgetsCatalog($scope.widgetsList);\r
-                 }).catch(err => {\r
-                     $log.error('WidgetCatalogCtrl::getUserWidgets caught error', err);\r
-                 }).finally(()=> {\r
-                        \r
-                 });\r
-            };\r
-            \r
-            let init = () => {\r
-               userProfileService.getUserProfile()\r
-                .then(profile=> {\r
-                    // $log.info('WidgetCatalogCtrl::getUserProfile: ',\r
-                                       // profile);\r
-                    $scope.orgUserId = profile.orgUserId;\r
-                    $scope.widgetsViewData = [];\r
-                    $scope.widgetsView = [];    \r
-                       getUserWidgets($scope.orgUserId);  \r
-                });\r
-                this.conf = conf;\r
-                $scope.widgetsList = [];\r
-            };\r
-            \r
-            /** Widget code ends */\r
-          \r
-            $scope.activateThis = function(ele){\r
-                               $compile(ele.contents())($scope);\r
-                               $scope.$apply();\r
-            };\r
-            $scope.setCommonWidget = function() {\r
-               /* News Events Resources */\r
-                var widgetLength = ($scope.widgetsViewData==null || $scope.widgetsViewData.length==0) ? 0:$scope.widgetsViewData.length;\r
-                $scope.widgetsViewData[widgetLength] = {\r
-                        sizeX: 2,\r
-                        sizeY: 2,\r
-                        headerText: 'News',\r
-                        width: '',\r
-                        height: '',\r
-                        url: '',\r
-                        selected:true\r
-                    };\r
-                $scope.widgetsViewData[widgetLength+1] = {\r
-                        sizeX: 2,\r
-                        sizeY: 2,\r
-                        headerText: 'Calendar Events',\r
-                        width: '',\r
-                        height: '',\r
-                        url: '',\r
-                        selected:true\r
-                    };\r
-                $scope.widgetsViewData[widgetLength+2] = {\r
-                        sizeX: 2,\r
-                        sizeY: 2,\r
-                        headerText: 'Resources',\r
-                        width: '',\r
-                        height: '',\r
-                        url: '',\r
-                        selected:true\r
-                    };\r
-                \r
-                /* Setting News data */\r
-                       $scope.newsData = [];\r
-                       $scope.updateNews = function() {\r
-                               $scope.newsData.length=0;\r
-                               dashboardService.getCommonWidgetData('NEWS').then(function(res) {\r
-                                       // $log.info(res.message);\r
-                                       var newsDataJsonArray = res.response.items;\r
-                                       for (var i = 0; i < newsDataJsonArray.length; i++) {\r
-                                               $scope.newsData.push(newsDataJsonArray[i]);\r
-                                       }\r
-                               })['catch'](function(err) {\r
-                                       $log.error('dashboard controller: failed to get news list', err);                                       \r
-                               });\r
-                       }\r
-                       $scope.updateNews();\r
-                       /* Setting Events data */\r
-\r
-                       $scope.eventData = [];\r
-                       \r
-                       $scope.updateEvents = function() {\r
-                               $scope.eventData.length=0;\r
-                               dashboardService.getCommonWidgetData('EVENTS').then(function(res) {\r
-                                       var eventDataJsonArray = res.response.items;    \r
-                                       for (var i = 0; i < eventDataJsonArray.length; i++) {\r
-                                               if(eventDataJsonArray[i].eventDate !=null) {\r
-                                                       // yyyy-mm-dd\r
-                                                       eventDataJsonArray[i].year = eventDataJsonArray[i].eventDate.substring(2,4);\r
-                                                       eventDataJsonArray[i].mon  = eventDataJsonArray[i].eventDate.substring(5,7);\r
-                                                       eventDataJsonArray[i].day  = eventDataJsonArray[i].eventDate.substring(8,10);\r
-                                               }\r
-                                               $scope.eventData.push(eventDataJsonArray[i]);\r
-                                       }\r
-                               })['catch'](function(err) {\r
-                                       $log.error('dashboard controller: failed to get Events list', err);     \r
-                               });\r
-                       }\r
-                       $scope.updateEvents();\r
-                       /* Setting Important Resources data */\r
-\r
-                       $scope.importResData = [];\r
-                       $scope.updateImportRes = function() {\r
-                               $scope.importResData.length=0;\r
-                               dashboardService.getCommonWidgetData('IMPORTANTRESOURCES').then(\r
-                                               function(res) {\r
-                                                       // $log.info(res);\r
-                                                       var importResDataJSONArray = res.response.items;\r
-                                                       for (var i = 0; i < importResDataJSONArray.length; i++) {\r
-                                                               $scope.importResData.push(importResDataJSONArray[i]);\r
-                                                       }\r
-                                               })['catch'](function(err) {\r
-                                       $log.error('dashboard controller: failed to get resources list...', err);\r
-                               });\r
-                       }\r
-                       $scope.updateImportRes();\r
-                \r
-                /** ******End hardcoded news events and resources*************** */\r
-                       \r
-            }\r
-            \r
-               $scope.newsGridsterItem = {\r
-                               headerText : 'Test',\r
-                               subHeaderText : ''\r
-               };\r
-               \r
-               $scope.newsGridsterItem = {\r
-                       headerText : 'News',\r
-                       subHeaderText : ''\r
-               };\r
-            \r
-            $scope.eventsGridsterItem = {\r
-               headerText : 'Events',\r
-                       subHeaderText : ''\r
-               };\r
-\r
-               $scope.impoResGridsterItem = {\r
-                       headerText : 'Resources',\r
-                       subHeaderText : ''\r
-               };\r
-               \r
-            this.gridsterOpts = {\r
-                columns: 6,\r
-                colWidth: 190,\r
-                rowHeight: 190,\r
-                margins: [20, 20],\r
-                outerMargin: true,\r
-                pushing: true,\r
-                floating: true,\r
-                swapping: true,\r
-                draggable: {\r
-                       handle: '.icon-content-gridguide'\r
-                }\r
-            };\r
-            \r
-            // Run this function when user clicks on checkbox.\r
-               $scope.storeSelection = function(widget) {\r
-                       \r
-                       // not needed as only 'SHOW' and 'HIDE' status_cd is expected from the micro service now\r
-                       /*var pendingFlag = false;                      \r
-                       if(widget.access) \r
-                               pendingFlag = false;\r
-                       else\r
-                               pendingFlag =  widget.pending;  */      \r
-                       \r
-                       var appData = { \r
-                                       widgetId: widget.widgetid,\r
-                                       select  : widget.select,\r
-                               //      pending : pendingFlag   \r
-                       };\r
-\r
-                       widgetsCatalogService.updateWidgetCatalog(appData).then(\r
-                               function(result) {\r
-                                       // $log.debug('CatalogCtrl:storeSelection result is ', result);\r
-                               })['catch'](function(err) {\r
-                                       $log.error('CatalogCtrl:storeSelection: exception: ', err);\r
-                               });\r
-               };\r
-\r
-            init();\r
-        }\r
-    }\r
-    \r
-    \r
-    \r
-    WidgetCatalogCtrl.$inject = ['widgetsService', '$log', '$cookies', '$scope', 'conf', 'beReaderService', 'widgetsCatalogService', 'userProfileService','dashboardService','$compile','ngDialog'];\r
-    angular.module('ecompApp').controller('WidgetCatalogCtrl', WidgetCatalogCtrl);\r
-\r
-    angular.module('ecompApp').constant('refreshInterval', '30000');\r
-\r
-    angular.module('ecompApp').directive('refreshIframe', ['$interval', 'refreshInterval', function ($interval, refreshInterval) {\r
-\r
-        function link(scope, element, attrs) {\r
-            var timeoutId;\r
-\r
-            function updateIframe() {\r
-                if(attrs.isEnlarged == "false")\r
-                {\r
-                    element.attr('src', element.attr('src'));\r
-                }\r
-            }\r
-\r
-            element.on('$destroy', function () {\r
-                $interval.cancel(timeoutId);\r
-            });\r
-\r
-            // start the UI update process; save the timeoutId for cancelling\r
-            /*\r
-                        * timeoutId = $interval(function () { updateIframe(); // update DOM },\r
-                        * refreshInterval);\r
-                        */\r
-        }\r
-\r
-        return {\r
-            link: link\r
-        };\r
-    } ]);\r
-\r
-})();\r
-\r
-\r
-app.directive('dynAttr', function() {\r
-    return {\r
-        scope: { list: '=dynAttr' },\r
-        link: function(scope, elem, attrs){\r
-            for(var attr in scope.list){\r
-                elem.attr(scope.list[attr].attr, scope.list[attr].value);   \r
-            }\r
-        }\r
-    };\r
-});     \r
+/*-
+ * ================================================================================
+ * ECOMP Portal
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+'use strict';
+(function () {
+
+    class WidgetCatalogCtrl {
+        constructor(widgetsService, $log, $cookies, $scope, conf, beReaderService, widgetsCatalogService, userProfileService,dashboardService,$compile, ngDialog) {
+            
+               $scope.editWidgetModalPopup = function(availableData, resourceType) {
+                       $scope.editData = JSON.stringify(availableData);
+                       $scope.availableDataTemp = $scope.availableData;
+                       ngDialog.open({
+                                       templateUrl : 'app/views/dashboard/dashboard-widget-manage.html',
+                                       controller : 'CommonWidgetController',
+                                       resolve : {
+                                               message : function message() {
+                                                       var message = {
+                                                               type : resourceType,
+                                                               availableData : $scope.editData
+                                                       };
+                                                       return message;
+                                               }
+                                       }
+                               }).closePromise.then(needUpdate => {    
+                                       if(resourceType=='NEWS'){
+                                               $scope.updateNews();
+                                       }else if(resourceType=='EVENTS'){
+                                               $scope.updateEvents();
+                                       }else if(resourceType=='IMPORTANTRESOURCES'){
+                                               $scope.updateImportRes();
+                                       }
+                 });           
+               };
+               
+               $scope.WidgetCatView = [];  
+               $scope.applyPresentationDetailsToWidgetsCatalog = function(widgetsReturned){
+                       var rowNo = 0;
+                       for (var i = 0; i < widgetsReturned.length; i++) {
+                       $scope.WidgetCatView[i] = {
+                       sizeX : 2,
+                       sizeY : 2,
+                       headerText:'',
+                       widgetIdentifier : '',
+                       url : '',
+                       widgetid: '',
+                       attrb:'',
+                       select: false,
+                       };
+                       $scope.WidgetCatView[i].widgetid = widgetsReturned[i].id;
+                       $scope.WidgetCatView[i].headerText = widgetsReturned[i].headerName;
+
+                       if(widgetsReturned[i].headerName === 'widget-news'){
+                       $scope.WidgetCatView[i].widgetIdentifier = 'NEWS';
+                       }
+                       else
+                       if(widgetsReturned[i].headerName === 'widget-resources'){
+                       $scope.WidgetCatView[i].widgetIdentifier = 'IMPORTANTRESOURCES';
+                       }
+                       else
+                       if(widgetsReturned[i].headerName === 'widget-events'){
+                       $scope.WidgetCatView[i].widgetIdentifier = 'EVENTS';
+                       }
+
+                       $scope.WidgetCatView[i].url = widgetsReturned[i].url;
+                       $scope.WidgetCatView[i].attrb = widgetsReturned[i].attrs;
+                       $scope.WidgetCatView[i].select = widgetsReturned[i].select;                     
+                       }
+
+                       $scope.widgetViewData = $scope.WidgetCatView;
+                       
+                       }
+               
+               /** Widget code starts */
+            let getUserWidgets = (loginName) => {
+                
+                this.isCommError = false;
+                var conf = this.conf;
+                        widgetsCatalogService.getUserWidgets(loginName).then(res => {
+                                
+                                if(!(res instanceof Array)){
+                                       this.isCommError = true;
+                                       return;
+                                }
+                        for(var i = 0; i < res.length; i++){   
+                                var widget_id = res[i][0];
+                                var widget_name = res[i][1];
+                                let url = this.conf.api.widgetCommon + "/" + widget_id + "/framework.js";
+                                $scope.widgetsList.push({
+                                                  id: widget_id,
+                                          name: widget_name,
+                                          headerName: widget_name,
+                                          url: url,
+                                          attrs: [{attr: 'data-' + widget_id, value: ''}],
+                                          status: res[i][4],
+                                          select: (res[i][4] == 'S' || res[i][4] === null) ? true : false
+                                        }); 
+                                var script = document
+                                        .createElement('script');
+                                        script.src = url;
+                                        script.async = true;
+                                        var entry = document
+                                               .getElementsByTagName('script')[0];
+                                        entry.parentNode
+                                               .insertBefore(script, entry);
+                        }
+                        $scope.applyPresentationDetailsToWidgetsCatalog($scope.widgetsList);
+                 }).catch(err => {
+                     $log.error('WidgetCatalogCtrl::getUserWidgets caught error', err);
+                 }).finally(()=> {
+                        
+                 });
+            };
+            
+            let init = () => {
+               userProfileService.getUserProfile()
+                .then(profile=> {
+                    // $log.info('WidgetCatalogCtrl::getUserProfile: ',
+                                       // profile);
+                    $scope.orgUserId = profile.orgUserId;
+                    $scope.widgetsViewData = [];
+                    $scope.widgetsView = [];    
+                       getUserWidgets($scope.orgUserId);  
+                });
+                this.conf = conf;
+                $scope.widgetsList = [];
+            };
+            
+            /** Widget code ends */
+          
+            $scope.activateThis = function(ele){
+                               $compile(ele.contents())($scope);
+                               $scope.$apply();
+            };
+            $scope.setCommonWidget = function() {
+               /* News Events Resources */
+                var widgetLength = ($scope.widgetsViewData==null || $scope.widgetsViewData.length==0) ? 0:$scope.widgetsViewData.length;
+                $scope.widgetsViewData[widgetLength] = {
+                        sizeX: 2,
+                        sizeY: 2,
+                        headerText: 'News',
+                        width: '',
+                        height: '',
+                        url: '',
+                        selected:true
+                    };
+                $scope.widgetsViewData[widgetLength+1] = {
+                        sizeX: 2,
+                        sizeY: 2,
+                        headerText: 'Calendar Events',
+                        width: '',
+                        height: '',
+                        url: '',
+                        selected:true
+                    };
+                $scope.widgetsViewData[widgetLength+2] = {
+                        sizeX: 2,
+                        sizeY: 2,
+                        headerText: 'Resources',
+                        width: '',
+                        height: '',
+                        url: '',
+                        selected:true
+                    };
+                
+                /* Setting News data */
+                       $scope.newsData = [];
+                       $scope.updateNews = function() {
+                               $scope.newsData.length=0;
+                               dashboardService.getCommonWidgetData('NEWS').then(function(res) {
+                                       // $log.info(res.message);
+                                       var newsDataJsonArray = res.response.items;
+                                       for (var i = 0; i < newsDataJsonArray.length; i++) {
+                                               $scope.newsData.push(newsDataJsonArray[i]);
+                                       }
+                               })['catch'](function(err) {
+                                       $log.error('dashboard controller: failed to get news list', err);                                       
+                               });
+                       }
+                       $scope.updateNews();
+                       /* Setting Events data */
+
+                       $scope.eventData = [];
+                       
+                       $scope.updateEvents = function() {
+                               $scope.eventData.length=0;
+                               dashboardService.getCommonWidgetData('EVENTS').then(function(res) {
+                                       var eventDataJsonArray = res.response.items;    
+                                       for (var i = 0; i < eventDataJsonArray.length; i++) {
+                                               if(eventDataJsonArray[i].eventDate !=null) {
+                                                       // yyyy-mm-dd
+                                                       eventDataJsonArray[i].year = eventDataJsonArray[i].eventDate.substring(2,4);
+                                                       eventDataJsonArray[i].mon  = eventDataJsonArray[i].eventDate.substring(5,7);
+                                                       eventDataJsonArray[i].day  = eventDataJsonArray[i].eventDate.substring(8,10);
+                                               }
+                                               $scope.eventData.push(eventDataJsonArray[i]);
+                                       }
+                               })['catch'](function(err) {
+                                       $log.error('dashboard controller: failed to get Events list', err);     
+                               });
+                       }
+                       $scope.updateEvents();
+                       /* Setting Important Resources data */
+
+                       $scope.importResData = [];
+                       $scope.updateImportRes = function() {
+                               $scope.importResData.length=0;
+                               dashboardService.getCommonWidgetData('IMPORTANTRESOURCES').then(
+                                               function(res) {
+                                                       // $log.info(res);
+                                                       var importResDataJSONArray = res.response.items;
+                                                       for (var i = 0; i < importResDataJSONArray.length; i++) {
+                                                               $scope.importResData.push(importResDataJSONArray[i]);
+                                                       }
+                                               })['catch'](function(err) {
+                                       $log.error('dashboard controller: failed to get resources list...', err);
+                               });
+                       }
+                       $scope.updateImportRes();
+                
+                /** ******End hardcoded news events and resources*************** */
+                       
+            }
+            
+               $scope.newsGridsterItem = {
+                               headerText : 'Test',
+                               subHeaderText : ''
+               };
+               
+               $scope.newsGridsterItem = {
+                       headerText : 'News',
+                       subHeaderText : ''
+               };
+            
+            $scope.eventsGridsterItem = {
+               headerText : 'Events',
+                       subHeaderText : ''
+               };
+
+               $scope.impoResGridsterItem = {
+                       headerText : 'Resources',
+                       subHeaderText : ''
+               };
+               
+            this.gridsterOpts = {
+                columns: 6,
+                colWidth: 190,
+                rowHeight: 190,
+                margins: [20, 20],
+                outerMargin: true,
+                pushing: true,
+                floating: true,
+                swapping: true,
+                draggable: {
+                       handle: '.icon-content-gridguide'
+                }
+            };
+            
+            // Run this function when user clicks on checkbox.
+               $scope.storeSelection = function(widget) {
+                       
+                       // not needed as only 'SHOW' and 'HIDE' status_cd is expected from the micro service now
+                       /*var pendingFlag = false;                      
+                       if(widget.access) 
+                               pendingFlag = false;
+                       else
+                               pendingFlag =  widget.pending;  */      
+                       
+                       var appData = { 
+                                       widgetId: widget.widgetid,
+                                       select  : widget.select,
+                               //      pending : pendingFlag   
+                       };
+
+                       widgetsCatalogService.updateWidgetCatalog(appData).then(
+                               function(result) {
+                                       // $log.debug('CatalogCtrl:storeSelection result is ', result);
+                               })['catch'](function(err) {
+                                       $log.error('CatalogCtrl:storeSelection: exception: ', err);
+                               });
+               };
+
+            init();
+        }
+    }
+    
+    
+    
+    WidgetCatalogCtrl.$inject = ['widgetsService', '$log', '$cookies', '$scope', 'conf', 'beReaderService', 'widgetsCatalogService', 'userProfileService','dashboardService','$compile','ngDialog'];
+    angular.module('ecompApp').controller('WidgetCatalogCtrl', WidgetCatalogCtrl);
+
+    angular.module('ecompApp').constant('refreshInterval', '30000');
+
+    angular.module('ecompApp').directive('refreshIframe', ['$interval', 'refreshInterval', function ($interval, refreshInterval) {
+
+        function link(scope, element, attrs) {
+            var timeoutId;
+
+            function updateIframe() {
+                if(attrs.isEnlarged == "false")
+                {
+                    element.attr('src', element.attr('src'));
+                }
+            }
+
+            element.on('$destroy', function () {
+                $interval.cancel(timeoutId);
+            });
+
+            // start the UI update process; save the timeoutId for cancelling
+            /*
+                        * timeoutId = $interval(function () { updateIframe(); // update DOM },
+                        * refreshInterval);
+                        */
+        }
+
+        return {
+            link: link
+        };
+    } ]);
+
+})();
+
+
+app.directive('dynAttr', function() {
+    return {
+        scope: { list: '=dynAttr' },
+        link: function(scope, elem, attrs){
+            for(var attr in scope.list){
+                elem.attr(scope.list[attr].attr, scope.list[attr].value);   
+            }
+        }
+    };
+});