diff --git a/README.md b/README.md index e653660..3c73d97 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ This directive allows you to add [ACE](http://ajaxorg.github.io/ace/) editor ele ## Requirements -- AngularJS +- AngularJS >=1.1.0 - [Ace 1.x](https://github.com/ajaxorg/ace-builds/) diff --git a/bower.json b/bower.json index 0434118..429e8d6 100644 --- a/bower.json +++ b/bower.json @@ -16,7 +16,7 @@ "package.json" ], "dependencies": { - "angular": "~1.x", + "angular": "^1.1.x", "ace-builds": "~1.1.1" }, "devDependencies": { diff --git a/src/ui-ace.js b/src/ui-ace.js index e0f27ac..9a53935 100644 --- a/src/ui-ace.js +++ b/src/ui-ace.js @@ -207,11 +207,10 @@ angular.module('ui.ace', []) onChange: function (callback) { return function (e) { var newValue = session.getValue(); - if (newValue !== scope.$eval(attrs.value) && !scope.$$phase && !scope.$root.$$phase) { + if (newValue !== scope.$eval(attrs.value)) { if (angular.isDefined(ngModel)) { - scope.$apply(function () { - ngModel.$setViewValue(newValue); - }); + ngModel.$setViewValue(newValue); + !scope.$$phase && !scope.$root.$$phase && scope.$digest(); } executeUserCallback(callback, e, acee); } diff --git a/test/ace.spec.js b/test/ace.spec.js index 627771e..08a2545 100644 --- a/test/ace.spec.js +++ b/test/ace.spec.js @@ -29,7 +29,7 @@ describe('uiAce', function () { spyOn(window.ace, 'require'); }); it('should not call ace/config if a workerPath is not defined', function () { - $compile('
')(scope); + $compile('
')(scope); expect(_ace.require).not.toHaveBeenCalledWith('ace/config'); }); }); @@ -45,7 +45,7 @@ describe('uiAce', function () { spyOn(window.ace, 'require').andReturn(_config); }); it('should call ace/config if a workerPath is defined', function () { - $compile('
')(scope); + $compile('
' )(scope); expect(_ace.require).toHaveBeenCalledWith('ace/config'); }); }); @@ -62,7 +62,7 @@ describe('uiAce', function () { spyOn(_config, 'set'); }); it('should call "set" if workerPath is defined', function () { - $compile('
')(scope); + $compile('
')(scope); expect(_config.set).toHaveBeenCalled(); }); }); @@ -75,7 +75,7 @@ describe('uiAce', function () { spyOn(window.ace, 'require'); }); it('should not call window.ace.require if there is no "require" option', function () { - $compile('
')(scope); + $compile('
')(scope); expect(_ace.require).not.toHaveBeenCalled(); }); }); @@ -88,7 +88,7 @@ describe('uiAce', function () { spyOn(window.ace, 'require'); }); it('should call "window.ace.require" for each option in "require"', function () { - $compile('
')(scope); + $compile('
')(scope); expect(_ace.require).toHaveBeenCalled(); expect(_ace.require.callCount).toEqual(2); }); @@ -105,7 +105,7 @@ describe('uiAce', function () { }); }); it('should not call "setOption" if no "advanced" options are given.', function () { - $compile('
')(scope); + $compile('
')(scope); var session = _ace.getSession(); spyOn(session, 'setOption'); expect(session.setOption).not.toHaveBeenCalled(); @@ -123,7 +123,7 @@ describe('uiAce', function () { }); }); it('Given advanced option is null if not defined.', function () { - $compile('
')(scope); + $compile('
')(scope); var session = _ace.getSession(); spyOn(session, 'getOption'); expect(session.getOption).toBeDefined(); @@ -142,7 +142,7 @@ describe('uiAce', function () { }); }); it('given advanced options are properly defined.', function () { - $compile('
')(scope); + $compile('
')(scope); var session = _ace.getSession(); spyOn(session, 'getOption'); expect(session.getOption).toBeDefined(); @@ -154,7 +154,7 @@ describe('uiAce', function () { it('should not throw an error when window.ace is defined', function () { function compile() { - $compile('
')(scope); + $compile('
')(scope); } expect(compile).not.toThrow(); @@ -163,7 +163,7 @@ describe('uiAce', function () { it('should watch the uiAce attribute', function () { spyOn(scope, '$watch'); - $compile('
')(scope); + $compile('
')(scope); expect(scope.$watch).toHaveBeenCalled(); }); }); @@ -181,21 +181,21 @@ describe('uiAce', function () { }); it('should call ace.edit', function () { - $compile('
')(scope); + $compile('
')(scope); expect(_ace).toBeDefined(); }); describe('options', function () { describe('passed', function () { it('should show the showGutter', function () { - $compile('
')(scope); + $compile('
')(scope); expect(_ace.renderer).toBeDefined(); expect(_ace.renderer.getShowGutter()).toBeTruthy(); }); }); describe('global', function () { it('should hide the showGutter', function () { - $compile('
')(scope); + $compile('
')(scope); expect(_ace.renderer).toBeDefined(); expect(_ace.renderer.getShowGutter()).toBeFalsy(); }); @@ -205,7 +205,7 @@ describe('uiAce', function () { scope.aceLoaded = function () { }; spyOn(scope, 'aceLoaded'); - $compile('
')(scope); + $compile('
')(scope); expect(scope.aceLoaded).toHaveBeenCalled(); expect(scope.aceLoaded).toHaveBeenCalledWith(_ace); }); @@ -214,21 +214,21 @@ describe('uiAce', function () { describe('readOnly', function () { it('should read only option true', function () { - $compile('
')(scope); + $compile('
')(scope); scope.$apply(); expect(_ace.getReadOnly()).toBeTruthy(); - $compile('
')(scope); + $compile('
')(scope); scope.$apply('foo = true'); expect(_ace.getReadOnly()).toBeTruthy(); }); it('should read only option false', function () { - $compile('
')(scope); + $compile('
')(scope); scope.$apply(); expect(_ace.getReadOnly()).toBeFalsy(); - $compile('
')(scope); + $compile('
')(scope); scope.$apply(); expect(_ace.getReadOnly()).toBeFalsy(); - $compile('
')(scope); + $compile('
')(scope); expect(_ace.getReadOnly()).toBeFalsy(); scope.$apply('foo = true'); expect(_ace.getReadOnly()).toBeTruthy(); @@ -285,7 +285,7 @@ describe('uiAce', function () { }); it('should call destroy when the element is removed', function () { - var element = $compile('
')(scope); + var element = $compile('
')(scope); spyOn(_ace, 'destroy').andCallThrough(); spyOn(_ace.session, '$stopWorker').andCallThrough();