UNPKG

ionic-angular

Version:

[![Circle CI](https://circleci.com/gh/driftyco/ionic.svg?style=svg)](https://circleci.com/gh/driftyco/ionic)

101 lines (91 loc) 2.8 kB
/** * @ngdoc directive * @name ionToggle * @module ionic * @codepen tfAzj * @restrict E * * @description * A toggle is an animated switch which binds a given model to a boolean. * * Allows dragging of the switch's nub. * * The toggle behaves like any [AngularJS checkbox](http://docs.angularjs.org/api/ng/input/input[checkbox]) otherwise. * * @param toggle-class {string=} Sets the CSS class on the inner `label.toggle` element created by the directive. * * @usage * Below is an example of a toggle directive which is wired up to the `airplaneMode` model * and has the `toggle-calm` CSS class assigned to the inner element. * * ```html * <ion-toggle ng-model="airplaneMode" toggle-class="toggle-calm">Airplane Mode</ion-toggle> * ``` */ IonicModule .directive('ionToggle', [ '$timeout', '$ionicConfig', function($timeout, $ionicConfig) { return { restrict: 'E', replace: true, require: '?ngModel', transclude: true, template: '<div class="item item-toggle">' + '<div ng-transclude></div>' + '<label class="toggle">' + '<input type="checkbox">' + '<div class="track">' + '<div class="handle"></div>' + '</div>' + '</label>' + '</div>', compile: function(element, attr) { var input = element.find('input'); forEach({ 'name': attr.name, 'ng-value': attr.ngValue, 'ng-model': attr.ngModel, 'ng-checked': attr.ngChecked, 'ng-disabled': attr.ngDisabled, 'ng-true-value': attr.ngTrueValue, 'ng-false-value': attr.ngFalseValue, 'ng-change': attr.ngChange, 'ng-required': attr.ngRequired, 'required': attr.required }, function(value, name) { if (isDefined(value)) { input.attr(name, value); } }); if (attr.toggleClass) { element[0].getElementsByTagName('label')[0].classList.add(attr.toggleClass); } element.addClass('toggle-' + $ionicConfig.form.toggle()); return function($scope, $element) { var el = $element[0].getElementsByTagName('label')[0]; var checkbox = el.children[0]; var track = el.children[1]; var handle = track.children[0]; var ngModelController = jqLite(checkbox).controller('ngModel'); $scope.toggle = new ionic.views.Toggle({ el: el, track: track, checkbox: checkbox, handle: handle, onChange: function() { if (ngModelController) { ngModelController.$setViewValue(checkbox.checked); $scope.$apply(); } } }); $scope.$on('$destroy', function() { $scope.toggle.destroy(); }); }; } }; }]);