f5a6ebefe81f3cc9590599110b9c92ad9423ab68
[portal/sdk.git] /
1 /*
2  * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *   http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 'use strict';
18
19 angular.module('ui.dashboard')
20   .directive('widget', ['$injector', function ($injector) {
21
22     return {
23
24       controller: 'DashboardWidgetCtrl',
25
26       link: function (scope) {
27
28         var widget = scope.widget;
29         var dataModelType = widget.dataModelType;
30
31         // set up data source
32         if (dataModelType) {
33           var DataModelConstructor; // data model constructor function
34
35           if (angular.isFunction(dataModelType)) {
36             DataModelConstructor = dataModelType;
37           } else if (angular.isString(dataModelType)) {
38             $injector.invoke([dataModelType, function (DataModelType) {
39               DataModelConstructor = DataModelType;
40             }]);
41           } else {
42             throw new Error('widget dataModelType should be function or string');
43           }
44
45           var ds;
46           if (widget.dataModelArgs) {
47             ds = new DataModelConstructor(widget.dataModelArgs);
48           } else {
49             ds = new DataModelConstructor();
50           }
51           widget.dataModel = ds;
52           ds.setup(widget, scope);
53           ds.init();
54           scope.$on('$destroy', _.bind(ds.destroy,ds));
55         }
56
57         // Compile the widget template, emit add event
58         scope.compileTemplate();
59         scope.$emit('widgetAdded', widget);
60
61       }
62
63     };
64   }]);