Skip to content

Commit 1a4c8eb

Browse files
Merge pull request #96 from machineboy2045/v3.0.0
V3.0.0
2 parents f2084c0 + 6bf238b commit 1a4c8eb

File tree

5 files changed

+132
-160
lines changed

5 files changed

+132
-160
lines changed

CHANGELOG.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
## 3.0.1 (2015-09-07)
2+
3+
Documentation:
4+
5+
- Added CHANGELOG
6+
- Updated README concerning config.options
7+
8+
## 3.0.0 (2015-08-07)
9+
10+
Changes:
11+
12+
- Dropped support for simple arrays `['Option 1', 'Option 2']` in order to simplify the directive and ensure consistent behavior.
13+
- Renamed `'selectize.js'` to `'angular-selectize.js'` to avoid confusion.
14+
- update to selectize 0.12.1

README.md

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,22 @@ angular-selectize
33
![selectize5](https://cloud.githubusercontent.com/assets/4087667/5633745/2cfeac18-958f-11e4-9e62-6eba90547b4c.png)
44

55
###Demo
6-
[Try the Demo on Plunker](http://plnkr.co/edit/X2YYPX?p=preview)
6+
[Try the Demo on Plunker](http://plnkr.co/edit/nTf19f?p=preview)
77

88
###Features
99
This is an Angular.js directive for Brian Reavis's [selectize jQuery plugin](http://brianreavis.github.io/selectize.js/). It supports all of Selectize's features. Here are some highlights:
1010

11-
* Better performance than UI-Select ([ui-select](http://plnkr.co/edit/pSJNHS?p=preview) vs [angular-selectize](http://plnkr.co/edit/xdyzf9?p=preview))
11+
* Better performance than UI-Select ([ui-select](http://plnkr.co/edit/pSJNHS?p=preview) vs [angular-selectize](http://plnkr.co/edit/23VkhV?p=preview))
1212
* Selectize is ~7kb (gzipped)
1313
* Smart Ranking / Multi-Property Searching & Sorting
1414
* Angular Models & Bindings
1515
* Skinnable
1616
* Keyboard support
1717

1818

19-
19+
## Upgrading to version 3.x.x
20+
Previous versions supported simple arrays for options `['Option 1', 'Option 2']`. Version 3.0 drops this in order
21+
to simplify the directive and make it more consistent with the original Selectize.
2022

2123

2224
## Dependencies
@@ -46,21 +48,7 @@ Add the selectize module as a dependency to your application module:
4648
var myAppModule = angular.module('MyApp', ['selectize']);
4749
```
4850

49-
## Basic Usage
50-
Setup your controller variables:
51-
52-
```javascript
53-
$scope.myModel;
54-
$scope.myOptions = ['Spectrometer', 'Star Chart', 'Laser Pointer'];
55-
```
56-
57-
Add the selectize element to your view template:
58-
59-
```html
60-
<selectize options='myOptions' ng-model="myModel"></selectize>
61-
```
62-
63-
## Advanced Usage
51+
## Usage
6452

6553
```javascript
6654
$scope.myModel = 1;
@@ -88,9 +76,10 @@ $scope.myConfig = {
8876
```html
8977
<selectize config='myConfig' options='myOptions' ng-model="myModel"></selectize>
9078
```
79+
##Differences in Angular version
80+
Please note in the example that, unlike the original Selectize, options should NOT be passed in the config object.
9181

92-
93-
##Documentation
82+
##More Documentation
9483
- [Selectize config options](https://github.com/brianreavis/selectize.js/blob/master/docs/usage.md)
9584
- [Selectize API](https://github.com/brianreavis/selectize.js/blob/master/docs/api.md)
9685

bower.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
{
22
"name": "angular-selectize2",
3-
"version": "1.2.3",
3+
"version": "3.0.1",
44
"main" : [
5-
"./dist/selectize.js"
5+
"./dist/angular-selectize.js"
66
],
77
"dependencies": {
8-
"selectize": ">=0.9.0"
8+
"selectize": ">=0.12.1"
99
}
1010
}

dist/angular-selectize.js

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
/**
2+
* Angular Selectize2
3+
* https://github.com/machineboy2045/angular-selectize
4+
**/
5+
6+
angular.module('selectize', []).value('selectizeConfig', {}).directive("selectize", ['selectizeConfig', function(selectizeConfig) {
7+
return {
8+
restrict: 'EA',
9+
require: '^ngModel',
10+
scope: { ngModel: '=', config: '=?', options: '=?', ngDisabled: '=', ngRequired: '&' },
11+
link: function(scope, element, attrs, modelCtrl) {
12+
13+
var selectize,
14+
settings = angular.extend({}, Selectize.defaults, selectizeConfig, scope.config);
15+
16+
scope.options = scope.options || [];
17+
scope.config = scope.config || {};
18+
19+
var isEmpty = function(val) {
20+
return val === undefined || val === null || !val.length; //support checking empty arrays
21+
};
22+
23+
var toggle = function(disabled) {
24+
disabled ? selectize.disable() : selectize.enable();
25+
}
26+
27+
var validate = function() {
28+
var isInvalid = (scope.ngRequired() || attrs.required || settings.required) && isEmpty(scope.ngModel);
29+
modelCtrl.$setValidity('required', !isInvalid);
30+
};
31+
32+
var setSelectizeOptions = function(curr, prev) {
33+
angular.forEach(prev, function(opt){
34+
if(curr.indexOf(opt) === -1){
35+
var value = opt[settings.valueField];
36+
selectize.removeOption(value, true);
37+
}
38+
});
39+
40+
selectize.addOption(curr, true);
41+
42+
setSelectizeValue();
43+
}
44+
45+
var setSelectizeValue = function() {
46+
validate();
47+
48+
selectize.$control.toggleClass('ng-valid', modelCtrl.$valid);
49+
selectize.$control.toggleClass('ng-invalid', modelCtrl.$invalid);
50+
selectize.$control.toggleClass('ng-dirty', modelCtrl.$dirty);
51+
selectize.$control.toggleClass('ng-pristine', modelCtrl.$pristine);
52+
53+
if (!angular.equals(selectize.items, scope.ngModel)) {
54+
selectize.setValue(scope.ngModel, true);
55+
}
56+
}
57+
58+
settings.onChange = function(value) {
59+
var value = angular.copy(selectize.items);
60+
if (settings.maxItems == 1) {
61+
value = value[0]
62+
}
63+
modelCtrl.$setViewValue( value );
64+
65+
if (scope.config.onChange) {
66+
scope.config.onChange.apply(this, arguments);
67+
}
68+
};
69+
70+
settings.onOptionAdd = function(value, data) {
71+
if( scope.options.indexOf(data) === -1 ) {
72+
scope.options.push(data);
73+
74+
if (scope.config.onOptionAdd) {
75+
scope.config.onOptionAdd.apply(this, arguments);
76+
}
77+
}
78+
};
79+
80+
settings.onInitialize = function() {
81+
selectize = element[0].selectize;
82+
83+
setSelectizeOptions(scope.options);
84+
85+
//provides a way to access the selectize element from an
86+
//angular controller
87+
if (scope.config.onInitialize) {
88+
scope.config.onInitialize(selectize);
89+
}
90+
91+
scope.$watchCollection('options', setSelectizeOptions);
92+
scope.$watch('ngModel', setSelectizeValue);
93+
scope.$watch('ngDisabled', toggle);
94+
};
95+
96+
element.selectize(settings);
97+
98+
element.on('$destroy', function() {
99+
if (selectize) {
100+
selectize.destroy();
101+
element = null;
102+
}
103+
});
104+
}
105+
};
106+
}]);

dist/selectize.js

Lines changed: 0 additions & 137 deletions
This file was deleted.

0 commit comments

Comments
 (0)