angular-ui-select2-rails 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +3 -3
- data/lib/angular/ui/select2/rails/version.rb +1 -1
- data/vendor/assets/javascripts/angular-ui-select2-original.js +78 -16
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a757547c35d66b0732c19bedc6a13087c124842f
|
|
4
|
+
data.tar.gz: c4d0e3ce67b105608615d24b5ef86078157b2768
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f3f47c308cde2c4387e19d2496068d9adf289652d313a176c2e5eb54004f332e15c6b1ed1dd66929813da983345928a1e53046cf8c8784d5e76246bc69ce15b9
|
|
7
|
+
data.tar.gz: 18b262da78b4281a0fb03443d3e865f94ca8cd73bc9178a00bba3d27f13181cc3ac330b9fc444372b9ad3217a28bac87fab1c0b0e4b06270c56206d9d56864ee
|
data/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# angular-ui-select2-rails
|
|
2
2
|
|
|
3
3
|
[angular-ui-select2](https://github.com/angular-ui/ui-select2) packaged for Rails assets pipeline
|
|
4
4
|
|
|
@@ -13,13 +13,13 @@ gem 'angular-ui-select2-rails'
|
|
|
13
13
|
Add the following directive to your Javascript manifest file (application.js):
|
|
14
14
|
|
|
15
15
|
```js
|
|
16
|
-
//= require angular-ui-select2
|
|
16
|
+
//= require angular-ui-select2
|
|
17
17
|
```
|
|
18
18
|
|
|
19
19
|
Add the following directive to your CSS manifest file (application.css):
|
|
20
20
|
|
|
21
21
|
```css
|
|
22
|
-
*= require angular-ui-select2
|
|
22
|
+
*= require angular-ui-select2
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
|
|
@@ -11,7 +11,7 @@ angular.module('ui.select2', []).value('uiSelect2Config', {}).directive('uiSelec
|
|
|
11
11
|
angular.extend(options, uiSelect2Config);
|
|
12
12
|
}
|
|
13
13
|
return {
|
|
14
|
-
require: '
|
|
14
|
+
require: 'ngModel',
|
|
15
15
|
compile: function (tElm, tAttrs) {
|
|
16
16
|
var watch,
|
|
17
17
|
repeatOption,
|
|
@@ -33,6 +33,44 @@ angular.module('ui.select2', []).value('uiSelect2Config', {}).directive('uiSelec
|
|
|
33
33
|
// instance-specific options
|
|
34
34
|
var opts = angular.extend({}, options, scope.$eval(attrs.uiSelect2));
|
|
35
35
|
|
|
36
|
+
/*
|
|
37
|
+
Convert from Select2 view-model to Angular view-model.
|
|
38
|
+
*/
|
|
39
|
+
var convertToAngularModel = function(select2_data) {
|
|
40
|
+
var model;
|
|
41
|
+
if (opts.simple_tags) {
|
|
42
|
+
model = []
|
|
43
|
+
angular.forEach(select2_data, function(value, index) {
|
|
44
|
+
model.push(value.id)
|
|
45
|
+
})
|
|
46
|
+
} else {
|
|
47
|
+
model = select2_data
|
|
48
|
+
}
|
|
49
|
+
return model
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/*
|
|
53
|
+
Convert from Angular view-model to Select2 view-model.
|
|
54
|
+
*/
|
|
55
|
+
var convertToSelect2Model = function(angular_data) {
|
|
56
|
+
var model = []
|
|
57
|
+
if (!angular_data) {
|
|
58
|
+
return model;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (opts.simple_tags) {
|
|
62
|
+
model = [];
|
|
63
|
+
angular.forEach(
|
|
64
|
+
angular_data,
|
|
65
|
+
function(value, index) {
|
|
66
|
+
model.push({'id': value, 'text': value});
|
|
67
|
+
})
|
|
68
|
+
} else {
|
|
69
|
+
model = angular_data;
|
|
70
|
+
}
|
|
71
|
+
return model
|
|
72
|
+
}
|
|
73
|
+
|
|
36
74
|
if (isSelect) {
|
|
37
75
|
// Use <select multiple> instead
|
|
38
76
|
delete opts.multiple;
|
|
@@ -43,18 +81,22 @@ angular.module('ui.select2', []).value('uiSelect2Config', {}).directive('uiSelec
|
|
|
43
81
|
|
|
44
82
|
if (controller) {
|
|
45
83
|
// Watch the model for programmatic changes
|
|
84
|
+
scope.$watch(tAttrs.ngModel, function(current, old) {
|
|
85
|
+
if (!current) {
|
|
86
|
+
return
|
|
87
|
+
}
|
|
88
|
+
if (current == old) {
|
|
89
|
+
return
|
|
90
|
+
}
|
|
91
|
+
controller.$render()
|
|
92
|
+
}, true)
|
|
46
93
|
controller.$render = function () {
|
|
47
94
|
if (isSelect) {
|
|
48
95
|
elm.select2('val', controller.$viewValue);
|
|
49
96
|
} else {
|
|
50
|
-
if (
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
} else if (angular.isArray(controller.$viewValue)) {
|
|
54
|
-
elm.select2('data', controller.$viewValue);
|
|
55
|
-
} else {
|
|
56
|
-
elm.select2('val', controller.$viewValue);
|
|
57
|
-
}
|
|
97
|
+
if (opts.multiple) {
|
|
98
|
+
elm.select2(
|
|
99
|
+
'data', convertToSelect2Model(controller.$viewValue));
|
|
58
100
|
} else {
|
|
59
101
|
if (angular.isObject(controller.$viewValue)) {
|
|
60
102
|
elm.select2('data', controller.$viewValue);
|
|
@@ -80,12 +122,26 @@ angular.module('ui.select2', []).value('uiSelect2Config', {}).directive('uiSelec
|
|
|
80
122
|
});
|
|
81
123
|
}
|
|
82
124
|
|
|
125
|
+
// Update valid and dirty statuses
|
|
126
|
+
controller.$parsers.push(function (value) {
|
|
127
|
+
var div = elm.prev()
|
|
128
|
+
div
|
|
129
|
+
.toggleClass('ng-invalid', !controller.$valid)
|
|
130
|
+
.toggleClass('ng-valid', controller.$valid)
|
|
131
|
+
.toggleClass('ng-invalid-required', !controller.$valid)
|
|
132
|
+
.toggleClass('ng-valid-required', controller.$valid)
|
|
133
|
+
.toggleClass('ng-dirty', controller.$dirty)
|
|
134
|
+
.toggleClass('ng-pristine', controller.$pristine);
|
|
135
|
+
return value;
|
|
136
|
+
});
|
|
137
|
+
|
|
83
138
|
if (!isSelect) {
|
|
84
139
|
// Set the view and model value and update the angular template manually for the ajax/multiple select2.
|
|
85
140
|
elm.bind("change", function () {
|
|
86
141
|
if (scope.$$phase) return;
|
|
87
142
|
scope.$apply(function () {
|
|
88
|
-
|
|
143
|
+
controller.$setViewValue(
|
|
144
|
+
convertToAngularModel(elm.select2('data')));
|
|
89
145
|
});
|
|
90
146
|
});
|
|
91
147
|
|
|
@@ -93,7 +149,7 @@ angular.module('ui.select2', []).value('uiSelect2Config', {}).directive('uiSelec
|
|
|
93
149
|
var initSelection = opts.initSelection;
|
|
94
150
|
opts.initSelection = function (element, callback) {
|
|
95
151
|
initSelection(element, function (value) {
|
|
96
|
-
controller.$setViewValue(value);
|
|
152
|
+
controller.$setViewValue(convertToAngularModel(value));
|
|
97
153
|
callback(value);
|
|
98
154
|
});
|
|
99
155
|
};
|
|
@@ -101,8 +157,16 @@ angular.module('ui.select2', []).value('uiSelect2Config', {}).directive('uiSelec
|
|
|
101
157
|
}
|
|
102
158
|
}
|
|
103
159
|
|
|
160
|
+
elm.bind("$destroy", function() {
|
|
161
|
+
elm.select2("destroy");
|
|
162
|
+
});
|
|
163
|
+
|
|
104
164
|
attrs.$observe('disabled', function (value) {
|
|
105
|
-
elm.select2(
|
|
165
|
+
elm.select2('enable', !value);
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
attrs.$observe('readonly', function (value) {
|
|
169
|
+
elm.select2('readonly', !!value);
|
|
106
170
|
});
|
|
107
171
|
|
|
108
172
|
if (attrs.ngMultiple) {
|
|
@@ -111,9 +175,6 @@ angular.module('ui.select2', []).value('uiSelect2Config', {}).directive('uiSelec
|
|
|
111
175
|
});
|
|
112
176
|
}
|
|
113
177
|
|
|
114
|
-
// Set initial value since Angular doesn't
|
|
115
|
-
//elm.val(scope.$eval(attrs.ngModel));
|
|
116
|
-
|
|
117
178
|
// Initialize the plugin late so that the injected DOM does not disrupt the template compiler
|
|
118
179
|
$timeout(function () {
|
|
119
180
|
elm.select2(opts);
|
|
@@ -125,7 +186,8 @@ angular.module('ui.select2', []).value('uiSelect2Config', {}).directive('uiSelec
|
|
|
125
186
|
|
|
126
187
|
// Not sure if I should just check for !isSelect OR if I should check for 'tags' key
|
|
127
188
|
if (!opts.initSelection && !isSelect)
|
|
128
|
-
controller.$setViewValue(
|
|
189
|
+
controller.$setViewValue(
|
|
190
|
+
convertToAngularModel(elm.select2('data')));
|
|
129
191
|
});
|
|
130
192
|
};
|
|
131
193
|
}
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: angular-ui-select2-rails
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Tymon Tobolski
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2013-
|
|
11
|
+
date: 2013-07-27 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: jquery-rails
|