/** * @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 * Airplane Mode * ``` */ IonicModule .directive('ionToggle', [ '$timeout', '$ionicConfig', function($timeout, $ionicConfig) { return { restrict: 'E', replace: true, require: '?ngModel', transclude: true, template: '
' + '
' + '' + '
', 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 }, 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(); }); }; } }; }]);