faalis 0.7.0 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/faalis/dashboard/app.js +24 -9
  3. data/app/assets/javascripts/faalis/dashboard/application.js.erb +0 -1
  4. data/app/assets/javascripts/faalis/dashboard/functions.js.erb +4 -0
  5. data/app/assets/javascripts/faalis/dashboard/modules/anim.js +1 -1
  6. data/app/assets/javascripts/faalis/dashboard/modules/conversations.js +180 -0
  7. data/app/assets/javascripts/faalis/dashboard/modules/fields/boolean.js +49 -0
  8. data/app/assets/javascripts/faalis/dashboard/modules/fields/datetime.js +50 -0
  9. data/app/assets/javascripts/faalis/dashboard/modules/fields/fields.js +1 -0
  10. data/app/assets/javascripts/faalis/dashboard/modules/fields/integer.js +50 -0
  11. data/app/assets/javascripts/faalis/dashboard/modules/fields/relation.js +78 -0
  12. data/app/assets/javascripts/faalis/dashboard/modules/fields/string.js +49 -0
  13. data/app/assets/javascripts/faalis/dashboard/modules/fields/text.js +50 -0
  14. data/app/assets/javascripts/faalis/dashboard/modules/list-view.js +14 -1
  15. data/app/assets/javascripts/faalis/dashboard/modules/nav.js.erb +1 -1
  16. data/app/assets/javascripts/faalis/dashboard/modules/permissions.js +71 -0
  17. data/app/assets/javascripts/faalis/dashboard/variables.js.erb +2 -0
  18. data/app/assets/stylesheets/faalis/base.css.scss +28 -0
  19. data/app/controllers/faalis/api/v1/conversations_controller.rb +92 -0
  20. data/app/controllers/faalis/api/v1/permissions_controller.rb +39 -3
  21. data/app/controllers/faalis/dashboard_controller.rb +18 -1
  22. data/app/models/faalis/permissions/auth.rb +3 -0
  23. data/app/models/faalis/user.rb +3 -0
  24. data/app/views/angularjs_templates/auth/groups/new.html +7 -3
  25. data/app/views/angularjs_templates/auth/users/details.html +1 -1
  26. data/app/views/angularjs_templates/auth/users/new.html +4 -3
  27. data/app/views/angularjs_templates/conversations/details.html +18 -0
  28. data/app/views/angularjs_templates/conversations/index.html +6 -0
  29. data/app/views/angularjs_templates/conversations/new.html +39 -0
  30. data/app/views/angularjs_templates/conversations/show.html +6 -0
  31. data/app/views/angularjs_templates/conversations/show_details.html +18 -0
  32. data/app/views/angularjs_templates/fields/boolean/boolean.html +4 -0
  33. data/app/views/angularjs_templates/fields/datetime/datetime.html +4 -0
  34. data/app/views/angularjs_templates/fields/integer/integer.html +4 -0
  35. data/app/views/angularjs_templates/fields/relation/relation.html +28 -0
  36. data/app/views/angularjs_templates/fields/string/string.html +4 -0
  37. data/app/views/angularjs_templates/fields/text/text.html +4 -0
  38. data/app/views/angularjs_templates/list-view/index.html +1 -1
  39. data/app/views/angularjs_templates/modules.html +2 -2
  40. data/app/views/faalis/api/v1/conversations/create.json.jbuilder +1 -0
  41. data/app/views/faalis/api/v1/conversations/index.json.jbuilder +1 -0
  42. data/app/views/faalis/api/v1/conversations/show.json.jbuilder +10 -0
  43. data/app/views/faalis/api/v1/permissions/user_permissions.json.jbuilder +1 -0
  44. data/app/views/layouts/faalis/dashboard.html.erb +1 -1
  45. data/config/routes.rb +13 -2
  46. data/db/migrate/{20131013091000_devise_create_red_base_users.rb → 20131013091000_devise_create_faalis_users.rb} +0 -0
  47. data/db/migrate/{20131020124701_create_red_base_groups.rb → 20131020124701_create_faalis_groups.rb} +0 -0
  48. data/db/migrate/{20131021170923_create_red_base_permissions.rb → 20131021170923_create_faalis_permissions.rb} +0 -0
  49. data/db/seeds.rb +2 -0
  50. data/lib/faalis.rb +1 -0
  51. data/lib/faalis/active_record.rb +1 -56
  52. data/lib/faalis/engine.rb +1 -0
  53. data/lib/faalis/permissions.rb +65 -0
  54. data/lib/faalis/version.rb +1 -1
  55. data/lib/generators/faalis/install_generator.rb +4 -0
  56. data/lib/generators/faalis/js_scaffold_generator.rb +27 -8
  57. data/lib/generators/faalis/templates/angularjs/module.js.erb +11 -7
  58. data/lib/generators/faalis/templates/angularjs/new.html.erb +35 -78
  59. metadata +51 -11
  60. data/app/views/angularjs_templates/#index.html# +0 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 568429128b156ab0ef28093b29023a388e97ae42
4
- data.tar.gz: 621e7c6575d0df055790e2425a5b983862f10d87
3
+ metadata.gz: 211e5ba2ce64c3da64cb9977367eb4a2ae1594cc
4
+ data.tar.gz: 6a81b397d0532901c7025ef829c25acb8d368bf1
5
5
  SHA512:
6
- metadata.gz: 46868872f42581e550f7b916790f635474d9758e8615f819032c1579aaa230bc257a940e4da778164953ea10a6a7ead54494e15e7891ef11ac6ba36329e6047a
7
- data.tar.gz: 4b1be7addb1163f0375b9aeba192d759a199a7ac86856bc110b9fb914df36e309a05eecf1a4d4fe9c630e029cd6fe02eb7003eff9d3be54ae83eddfde8323ff8
6
+ metadata.gz: 7b71d8ad541c9fb372730de7907c9b61963163cabb44b0fbef81f2b83874190bf3884835994ba98318bd696cc0ef854dbf8d2648c5f162d5a6299a86e8122766
7
+ data.tar.gz: dbd7e18ca0c10d0a29852edf7ae93f1024469cff6e1c117c6a811e09504839de2a0933f603717ba8305c0ba6b053f5cf511345ca1c9e02cc6bf07efdeb0940e3
@@ -23,22 +23,18 @@
23
23
  //= require ./locale/translations
24
24
 
25
25
  var dependencies = ["gettext", "Modules", "Navigation","ui.select2", "ngAnimate", "ngRoute",
26
- "restangular", "ngQuickDate", "Errors", "Profile"].concat(dashboard_dependencies);
26
+ "restangular", "ngQuickDate", "Errors", "Profile", "Permissions", "Conversation"].concat(dashboard_dependencies);
27
27
 
28
28
  console.log("Dashboard dependencies:");
29
29
  console.log(dependencies);
30
30
 
31
31
  var Dashboard = angular.module('Dashboard', dependencies);
32
32
 
33
- Dashboard.config(['$routeProvider', function($routeProvider) {
34
- $routeProvider.
35
- when("/", {
36
- templateUrl: template("index")
37
- });
33
+ Dashboard.config(["$routeProvider", "RestangularProvider", "$httpProvider", "ngQuickDateDefaultsProvider", function($routeProvider, RestangularProvider, $httpProvider, ngQuickDateDefaultsProvider) {
38
34
 
39
- }]);
40
-
41
- Dashboard.config(["RestangularProvider", "$httpProvider", "ngQuickDateDefaultsProvider", function(RestangularProvider, $httpProvider, ngQuickDateDefaultsProvider) {
35
+ $routeProvider.when("/", {
36
+ templateUrl: template("index")
37
+ });
42
38
 
43
39
  ngQuickDateDefaultsProvider.set({
44
40
  closeButtonHtml: "<i class='fa fa-times'></i>",
@@ -73,3 +69,22 @@ Dashboard.config(["RestangularProvider", "$httpProvider", "ngQuickDateDefaultsPr
73
69
  }
74
70
  });
75
71
  }]);
72
+
73
+ Dashboard.run(["UserPermissions", "$rootScope", function(User, $rootScope){
74
+ $rootScope.user = User;
75
+ }]);
76
+
77
+ angular.element(document).ready(function(){
78
+ $.ajax({method: 'GET', type: 'json',
79
+ url: API_PREFIX + "permissions/user"})
80
+ .success(function(data, status, headers, config){
81
+ PERMISSIONS = data.permissions;
82
+ angular.bootstrap(document, ["Dashboard"]);
83
+ })
84
+ .fail(function(data){
85
+ alert('Can not connect to remote, please try again');
86
+ }).always(function(){
87
+ $("#mainloader").hide();
88
+ $("#content").show();
89
+ });
90
+ });
@@ -10,7 +10,6 @@
10
10
  // Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
11
11
  // about supported directives.
12
12
  //
13
- //= require_self
14
13
  //= require_tree ./lib
15
14
  //= require faalis/dashboard/init
16
15
  //= require faalis/dashboard/app
@@ -17,6 +17,10 @@
17
17
  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18
18
  ----------------------------------------------------------------------------- */
19
19
 
20
+
21
+ function can(action, model) {
22
+ console.log(">>>>>>>>>>>>");
23
+ }
20
24
  /*
21
25
  * This function convert snake_type to CamelCase
22
26
  */
@@ -1,6 +1,6 @@
1
1
  /* -----------------------------------------------------------------------------
2
2
  Red Base - Basic website skel engine
3
- Copyright (C) 2012-2013 Yellowen
3
+ Copyright (C) 2012-2014 Yellowen
4
4
 
5
5
  This program is free software; you can redistribute it and/or modify
6
6
  it under the terms of the GNU General Public License as published by
@@ -0,0 +1,180 @@
1
+ /* -----------------------------------------------------------------------------
2
+ Red Base - Basic website skel engine
3
+ Copyright (C) 2012-2013 Yellowen
4
+
5
+ This program is free software; you can redistribute it and/or modify
6
+ it under the terms of the GNU General Public License as published by
7
+ the Free Software Foundation; either version 2 of the License, or
8
+ (at your option) any later version.
9
+
10
+ This program is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ GNU General Public License for more details.
14
+
15
+ You should have received a copy of the GNU General Public License along
16
+ with this program; if not, write to the Free Software Foundation, Inc.,
17
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18
+ ----------------------------------------------------------------------------- */
19
+ var Conversation = angular.module("Conversation",["ListView", "Errors"]);
20
+
21
+
22
+ Conversation.config(["$routeProvider", function($routeProvider){
23
+ $routeProvider.
24
+ when("/conversations/:id/show",{
25
+ templateUrl: template("conversations/show"),
26
+ controller: "ConversationControllerIndex"
27
+ }).
28
+ when("/conversations/new",{
29
+ templateUrl: template("conversations/new"),
30
+ controller: "ConversationControllerNew"
31
+ }).
32
+ when("/conversations/:id/reply",{
33
+ templateUrl: template("conversations/new"),
34
+ controller: "ConversationControllerNew"
35
+ }).
36
+ when("/conversations/:type",{
37
+ templateUrl: template("conversations/index"),
38
+ controller: "ConversationControllerIndex"
39
+ });
40
+ }]);
41
+
42
+ Conversation.controller("ConversationControllerIndex",["$scope", "Restangular", "gettext", "catch_error", "$routeParams","$location", function($scope, API, gettext, catch_error, $routeParams, $location){
43
+ if ($routeParams.id){
44
+ $scope.details_template = template("conversations/show_details");
45
+ console.log($scope.details_templates);
46
+ API.all("conversations").get($routeParams.id).then(function(data){
47
+ $scope.conversations = data;
48
+ });
49
+ }else{
50
+ $scope.details_template = template("conversations/details");
51
+ var type;
52
+ switch ($routeParams.type){
53
+ case "inbox":
54
+ type = "inbox";
55
+ break;
56
+ case "sentbox":
57
+ type = "sentbox";
58
+ break;
59
+ case "trash":
60
+ type = "trash";
61
+ break;
62
+ default:
63
+ $location.path("conversations/inbox/box");
64
+ }
65
+ API.all("conversations").all(type).all("box").getList().then(function(data){
66
+ $scope.conversations = data;
67
+
68
+ });
69
+ }
70
+ $scope.buttons = [
71
+ {
72
+ title: gettext("New"),
73
+ icon: "fa fa-plus",
74
+ classes: "btn tiny green",
75
+ route: "#conversations/new"
76
+ },
77
+ {
78
+ title: gettext("Sent box"),
79
+ icon: "fa fa-plus",
80
+ classes: "btn tiny green",
81
+ route: "#/conversations/sentbox"
82
+ },
83
+ {
84
+ title: gettext("Trash box"),
85
+ icon: "fa fa-plus",
86
+ classes: "btn tiny green",
87
+ route: "#/conversations/trash"
88
+ }
89
+ ];
90
+
91
+ $scope.message_title = function(conversation){
92
+ console.log(conversation);
93
+ console.log('fix me : check why multiple run');
94
+ return conversation.message.subject;
95
+ };
96
+
97
+ $scope.on_trash = function(conversations){
98
+ return conversations;
99
+ var query = [];
100
+ conversations.forEach(function(conversation){
101
+ query.push(conversation.id);
102
+ });
103
+
104
+ API.all("conversations",query.join(",")).post()
105
+ .then(function(data) {
106
+
107
+ $scope.conversations = _.filter($scope.Conversations, function(x){
108
+ return !(query.indexOf(x.id) != -1);
109
+ });
110
+ success_message(data.msg);
111
+ })
112
+ .catch(catch_error);
113
+
114
+ };
115
+
116
+ $scope.on_untrash = function(conversations){
117
+ var query = [];
118
+ conversations.forEach(function(conversation){
119
+ query.push(conversation.id);
120
+ });
121
+
122
+ API.all("conversations",query.join(",")).post()
123
+ .then(function(data) {
124
+
125
+ $scope.conversations = _.filter($scope.Conversations, function(x){
126
+ return !(query.indexOf(x.id) != -1);
127
+ });
128
+ success_message(data.msg);
129
+ })
130
+ .catch(catch_error);
131
+ };
132
+
133
+
134
+ }]);
135
+
136
+
137
+ Conversation.controller("ConversationControllerNew", ["$scope", "Restangular", "gettext", "catch_error", "$routeParams", "$location", function($scope, API, gettext, catch_error, $routeParams, $location){
138
+ $scope.obj_id = null;
139
+ if("id" in $routeParams){
140
+ $scope.obj_id = $routeParams.id;
141
+ var obj = API.all("conversations").get($routeParams.id)
142
+ .then(function(data){
143
+ var recipients= [];
144
+ data.recipients.forEach(function(entry){
145
+ if( $.inArray(entry.email,recipients) == -1 )
146
+ recipients.push(entry.email);
147
+ });
148
+ $scope.recipients = recipients;
149
+ $scope.subject = "Re: " + data.subject;
150
+ $scope.body = "\n\n_____________\n"+data.body;
151
+ });
152
+ }
153
+
154
+ $scope.save = function() {
155
+ var conversation = {conversation: {
156
+ recipients: $scope.recipients,
157
+ subject: $scope.subject,
158
+ body: $scope.body
159
+ }};
160
+ console.log(conversation);
161
+ if ($scope.obj_id){
162
+ API.all("conversations").one($scope.obj_id).one("reply").customPOST(conversation,"",{}).then(function(){
163
+ success_message(gettext("Message sent successfully."));
164
+ $location.path("conversations/inbox");
165
+ });
166
+ }else{
167
+ API.all("conversations").post(conversation).then(function(){
168
+ success_message(gettext("Message sent Successfully"));
169
+ $location.path("conversations/inbox");
170
+ }).catch(catch_error);
171
+ }
172
+ };
173
+
174
+ $scope.cancel = function(){
175
+ $(".form input").val("");
176
+ $location.path("conversations/index");
177
+ };
178
+
179
+
180
+ }]);
@@ -0,0 +1,49 @@
1
+ /* -----------------------------------------------------------------------------
2
+ Red Base - Basic website skel engine
3
+ Copyright (C) 2012-2014 Yellowen
4
+
5
+ This program is free software; you can redistribute it and/or modify
6
+ it under the terms of the GNU General Public License as published by
7
+ the Free Software Foundation; either version 2 of the License, or
8
+ (at your option) any later version.
9
+
10
+ This program is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ GNU General Public License for more details.
14
+
15
+ You should have received a copy of the GNU General Public License along
16
+ with this program; if not, write to the Free Software Foundation, Inc.,
17
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18
+ ----------------------------------------------------------------------------- */
19
+
20
+ var Boolean_ = angular.module("BooleanField", []);
21
+
22
+ /*
23
+ * <string-field></string-field> directive defination
24
+ */
25
+ Boolean_.directive('booleanField', ["$filter", "gettext", function($filter, gettext) {
26
+
27
+ function link(scope, element, attrs){
28
+ var ltr = is_ltr();
29
+ scope.element_id = "id_" + scope.field;
30
+ scope.msg_element_id = "id_" + scope.field + "_msg";
31
+ }
32
+ // Actual object of <boolean-field> directive
33
+ return {
34
+ templateUrl: template("fields/boolean/boolean"),
35
+ replace: true,
36
+ restrict: "E",
37
+ scope: {
38
+ cssClasses: '=cssClass',
39
+
40
+ // fieldname
41
+ field: "=fieldName",
42
+ // Does this field is required
43
+ required: "=",
44
+ // Actual Angularjs ng-model
45
+ model: '='
46
+ },
47
+ link: link
48
+ };
49
+ }]);
@@ -0,0 +1,50 @@
1
+ /* -----------------------------------------------------------------------------
2
+ Red Base - Basic website skel engine
3
+ Copyright (C) 2012-2014 Yellowen
4
+
5
+ This program is free software; you can redistribute it and/or modify
6
+ it under the terms of the GNU General Public License as published by
7
+ the Free Software Foundation; either version 2 of the License, or
8
+ (at your option) any later version.
9
+
10
+ This program is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ GNU General Public License for more details.
14
+
15
+ You should have received a copy of the GNU General Public License along
16
+ with this program; if not, write to the Free Software Foundation, Inc.,
17
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18
+ ----------------------------------------------------------------------------- */
19
+
20
+ var Datetime_ = angular.module("DatetimeField", ['ngQuickDate']);
21
+
22
+ /*
23
+ * <string-field></string-field> directive defination
24
+ */
25
+ Datetime_.directive('datetimeField', ["$filter", "gettext", function($filter, gettext) {
26
+
27
+ function link(scope, element, attrs){
28
+ var ltr = is_ltr();
29
+ scope.element_id = "id_" + scope.field;
30
+ scope.msg_element_id = "id_" + scope.field + "_msg";
31
+ }
32
+ // Actual object of <string-field> directive
33
+ return {
34
+ templateUrl: template("fields/datetime/datetime"),
35
+ replace: true,
36
+ restrict: "E",
37
+ transclude: true,
38
+ scope: {
39
+ cssClasses: '=cssClass',
40
+
41
+ // fieldname
42
+ field: "=fieldName",
43
+ // Does this field is required
44
+ required: "=",
45
+ // Actual Angularjs ng-model
46
+ model: '='
47
+ },
48
+ link: link
49
+ };
50
+ }]);
@@ -0,0 +1 @@
1
+ angular.module("Fields", ["RelationField", "StringField", "IntegerField", "TextField", "BooleanField", "DatetimeField"]);
@@ -0,0 +1,50 @@
1
+ /* -----------------------------------------------------------------------------
2
+ Red Base - Basic website skel engine
3
+ Copyright (C) 2012-2014 Yellowen
4
+
5
+ This program is free software; you can redistribute it and/or modify
6
+ it under the terms of the GNU General Public License as published by
7
+ the Free Software Foundation; either version 2 of the License, or
8
+ (at your option) any later version.
9
+
10
+ This program is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ GNU General Public License for more details.
14
+
15
+ You should have received a copy of the GNU General Public License along
16
+ with this program; if not, write to the Free Software Foundation, Inc.,
17
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18
+ ----------------------------------------------------------------------------- */
19
+
20
+ var Integer_ = angular.module("IntegerField", []);
21
+
22
+ /*
23
+ * <string-field></string-field> directive defination
24
+ */
25
+ Integer_.directive('integerField', ["$filter", "gettext", function($filter, gettext) {
26
+
27
+ function link(scope, element, attrs){
28
+ var ltr = is_ltr();
29
+ scope.element_id = "id_" + scope.field;
30
+ scope.msg_element_id = "id_" + scope.field + "_msg";
31
+ }
32
+ // Actual object of <string-field> directive
33
+ return {
34
+ templateUrl: template("fields/integer/integer"),
35
+ replace: true,
36
+ restrict: "E",
37
+ transclude: true,
38
+ scope: {
39
+ cssClasses: '=cssClass',
40
+
41
+ // fieldname
42
+ field: "=fieldName",
43
+ // Does this field is required
44
+ required: "=",
45
+ // Actual Angularjs ng-model
46
+ model: '='
47
+ },
48
+ link: link
49
+ };
50
+ }]);
@@ -0,0 +1,78 @@
1
+ /* -----------------------------------------------------------------------------
2
+ Red Base - Basic website skel engine
3
+ Copyright (C) 2012-2014 Yellowen
4
+
5
+ This program is free software; you can redistribute it and/or modify
6
+ it under the terms of the GNU General Public License as published by
7
+ the Free Software Foundation; either version 2 of the License, or
8
+ (at your option) any later version.
9
+
10
+ This program is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ GNU General Public License for more details.
14
+
15
+ You should have received a copy of the GNU General Public License along
16
+ with this program; if not, write to the Free Software Foundation, Inc.,
17
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18
+ ----------------------------------------------------------------------------- */
19
+
20
+ var Relation = angular.module("RelationField", ["ui.select2"]);
21
+
22
+ /*
23
+ * <relation-field></relation-field> directive defination
24
+ */
25
+ Relation.directive('relationField', ["$filter", "gettext", "Restangular", "catch_error", function($filter, gettext, API, catch_error) {
26
+
27
+ function link(scope, element, attrs){
28
+ var ltr = is_ltr();
29
+ scope.element_id = "id_" + scope.field.name;
30
+ scope.msg_element_id = "id_" + scope.field.name + "_msg";
31
+
32
+ if( scope.field.type != "in" ){
33
+ scope.have = function(obj_id) {
34
+ var tmp = _.where(scope.model, { id: obj_id });
35
+ if (tmp.length > 0) {
36
+ return true;
37
+ }
38
+ else {
39
+ return false;
40
+ }
41
+ };
42
+
43
+ scope.update_collection = function(){
44
+ API.all(scope.field.to).getList().then(function(data){
45
+ scope.all_options = data;
46
+ }, function(data){
47
+ catch_error(data);
48
+ });
49
+ };
50
+
51
+ scope.update_collection();
52
+ }
53
+ }
54
+ // Actual object of <relation-field> directive
55
+ return {
56
+ templateUrl: template("fields/relation/relation"),
57
+ replace: true,
58
+ restrict: "E",
59
+ transclude: true,
60
+ scope: {
61
+ // select2 options
62
+ select2Options: '=',
63
+
64
+ // Does this field is required
65
+ required: "=",
66
+
67
+ // Field to use as title of options
68
+ titleField: '=',
69
+
70
+ // relation field data
71
+ field: '=fieldData',
72
+
73
+ // Actual Angularjs ng-model
74
+ model: '='
75
+ },
76
+ link: link
77
+ };
78
+ }]);