mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2026-03-13 10:22:08 +08:00
feat($ionicBody): service to simplify body ele interaction
Many services/directives have to interact with the body element, and each one has to write the same long code. The $ionicBody service provides some useful methods to clean up and reduce redundant code.
This commit is contained in:
@@ -84,6 +84,14 @@ describe('$ionicSideMenus controller', function() {
|
||||
expect(ctrl.getOpenPercentage()).toEqual(-50);
|
||||
});
|
||||
|
||||
it('should add/remove menu-open from the body class', inject(function($document) {
|
||||
expect($document[0].body.classList.contains('menu-open')).toEqual(false);
|
||||
ctrl.openPercentage(100);
|
||||
expect($document[0].body.classList.contains('menu-open')).toEqual(true);
|
||||
ctrl.openPercentage(0);
|
||||
expect($document[0].body.classList.contains('menu-open')).toEqual(false);
|
||||
}));
|
||||
|
||||
// Open
|
||||
it('should toggle left', function() {
|
||||
ctrl.toggleLeft();
|
||||
|
||||
@@ -40,6 +40,18 @@ describe('Ionic Angular Side Menu', function() {
|
||||
expect(sideMenuController.isAsideExposed()).toBe(false);
|
||||
}));
|
||||
|
||||
it('should add/remove "aside-resizing" from the body tag when using activeAsideResizing', inject(function($compile, $rootScope, $document) {
|
||||
var el = $compile('<ion-side-menus><ion-side-menu></><ion-side-menu-content></ion-side-menu-content></ion-side-menus>')($rootScope.$new());
|
||||
$rootScope.$apply();
|
||||
var sideMenuController = el.controller('ionSideMenus');
|
||||
|
||||
expect($document[0].body.classList.contains('aside-resizing')).toEqual(false);
|
||||
sideMenuController.activeAsideResizing(true);
|
||||
expect($document[0].body.classList.contains('aside-resizing')).toEqual(true);
|
||||
sideMenuController.activeAsideResizing(false);
|
||||
expect($document[0].body.classList.contains('aside-resizing')).toEqual(false);
|
||||
}));
|
||||
|
||||
it('should emit $ionicexposeAside', inject(function($compile, $rootScope) {
|
||||
var el = $compile('<ion-side-menus><ion-side-menu></><ion-side-menu-content></ion-side-menu-content></ion-side-menus>')($rootScope.$new());
|
||||
$rootScope.$apply();
|
||||
|
||||
71
test/unit/angular/service/body.unit.js
Normal file
71
test/unit/angular/service/body.unit.js
Normal file
@@ -0,0 +1,71 @@
|
||||
describe('Ionic Body Class Service', function() {
|
||||
var ionicBody, doc;
|
||||
|
||||
beforeEach(module('ionic'));
|
||||
|
||||
beforeEach(inject(function($ionicBody, $document) {
|
||||
ionicBody = $ionicBody;
|
||||
body = $document[0].body;
|
||||
}));
|
||||
|
||||
it('Should add/remove one class the body tag', function() {
|
||||
ionicBody.addClass('class1');
|
||||
expect(body.classList.contains('class1')).toEqual(true);
|
||||
ionicBody.removeClass('class1');
|
||||
expect(body.classList.contains('class1')).toEqual(false);
|
||||
});
|
||||
|
||||
it('Should add/remove multiple classes the body tag', function() {
|
||||
ionicBody.addClass('class1', 'class2', 'class3');
|
||||
expect(body.classList.contains('class1')).toEqual(true);
|
||||
expect(body.classList.contains('class2')).toEqual(true);
|
||||
expect(body.classList.contains('class3')).toEqual(true);
|
||||
ionicBody.removeClass('class1', 'class2', 'class3');
|
||||
expect(body.classList.contains('class1')).toEqual(false);
|
||||
expect(body.classList.contains('class2')).toEqual(false);
|
||||
expect(body.classList.contains('class3')).toEqual(false);
|
||||
});
|
||||
|
||||
it('Should add/remove classes by chaining methods', function() {
|
||||
ionicBody.addClass('class1').addClass('class2').addClass('class3');
|
||||
expect(body.classList.contains('class1')).toEqual(true);
|
||||
expect(body.classList.contains('class2')).toEqual(true);
|
||||
expect(body.classList.contains('class3')).toEqual(true);
|
||||
ionicBody.removeClass('class1').removeClass('class2').removeClass('class3');
|
||||
expect(body.classList.contains('class1')).toEqual(false);
|
||||
expect(body.classList.contains('class2')).toEqual(false);
|
||||
expect(body.classList.contains('class3')).toEqual(false);
|
||||
});
|
||||
|
||||
it('Should add/false one class using addTo and boolean first arg', function() {
|
||||
ionicBody.enableClass(true, 'class1');
|
||||
expect(body.classList.contains('class1')).toEqual(true);
|
||||
ionicBody.enableClass(false, 'class1');
|
||||
expect(body.classList.contains('class1')).toEqual(false);
|
||||
});
|
||||
|
||||
it('Should add/false multiple classes using addTo and boolean first arg', function() {
|
||||
ionicBody.enableClass(true, 'class1', 'class2', 'class3');
|
||||
expect(body.classList.contains('class1')).toEqual(true);
|
||||
expect(body.classList.contains('class2')).toEqual(true);
|
||||
expect(body.classList.contains('class3')).toEqual(true);
|
||||
ionicBody.enableClass(false, 'class1', 'class2', 'class3');
|
||||
expect(body.classList.contains('class1')).toEqual(false);
|
||||
expect(body.classList.contains('class2')).toEqual(false);
|
||||
expect(body.classList.contains('class3')).toEqual(false);
|
||||
});
|
||||
|
||||
it('Should append a jqLite element to the body', function() {
|
||||
var jqLiteElement = angular.element('<div>jqLite</div>');
|
||||
ionicBody.append(jqLiteElement);
|
||||
expect(body.lastChild.outerHTML).toEqual('<div>jqLite</div>');
|
||||
});
|
||||
|
||||
it('Should append a DOM element to the body', function() {
|
||||
var domElement = document.createElement('span');
|
||||
domElement.innerText = 'domElement'
|
||||
ionicBody.append(domElement);
|
||||
expect(body.lastChild.outerHTML).toEqual('<span>domElement</span>');
|
||||
});
|
||||
|
||||
});
|
||||
Reference in New Issue
Block a user