text: /*!
   * Angular Material Design
   * https://github.com/angular/material
   * @license MIT
   * v0.7.0-rc3
   */
  (function() {
  'use strict';
  
  /**
   * @ngdoc module
   * @name material.components.checkbox
   * @description Checkbox module!
   */
  angular.module('material.components.checkbox', [
    'material.core'
  ])
    .directive('mdCheckbox', MdCheckboxDirective);
  
  /**
   * @ngdoc directive
   * @name mdCheckbox
   * @module material.components.checkbox
   * @restrict E
   *
   * @description
   * The checkbox directive is used like the normal [angular checkbox](https://docs.angularjs.org/api/ng/input/input%5Bcheckbox%5D).
   *
   * @param {string} ng-model Assignable angular expression to data-bind to.
   * @param {string=} name Property name of the form under which the control is published.
   * @param {expression=} ng-true-value The value to which the expression should be set when selected.
   * @param {expression=} ng-false-value The value to which the expression should be set when not selected.
   * @param {string=} ng-change Angular expression to be executed when input changes due to user interaction with the input element.
   * @param {boolean=} md-no-ink Use of attribute indicates use of ripple ink effects
   * @param {string=} aria-label Adds label to checkbox for accessibility.
   * Defaults to checkbox's text. If no default text is found, a warning will be logged.
   *
   * @usage
   * <hljs lang="html">
   * <md-checkbox ng-model="isChecked" aria-label="Finished?">
   *   Finished ?
   * </md-checkbox>
   *
   * <md-checkbox md-no-ink ng-model="hasInk" aria-label="No Ink Effects">
   *   No Ink Effects
   * </md-checkbox>
   *
   * <md-checkbox ng-disabled="true" ng-model="isDisabled" aria-label="Disabled">
   *   Disabled
   * </md-checkbox>
   *
   * </hljs>
   *
   */
  function MdCheckboxDirective(inputDirective, $mdInkRipple, $mdAria, $mdConstant, $mdTheming, $mdUtil) {
    inputDirective = inputDirective[0];
    var CHECKED_CSS = 'md-checked';
  
    return {
      restrict: 'E',
      transclude: true,
      require: '?ngModel',
      template: 
        '<div class="md-container" md-ink-ripple md-ink-ripple-checkbox>' +
          '<div class="md-icon"></div>' +
        '</div>' +
        '<div ng-transclude class="md-label"></div>',
      compile: compile
    };
  
    // **********************************************************
    // Private Methods
    // **********************************************************
  
    function compile (tElement, tAttrs) {
  
      tAttrs.type = 'checkbox';
      tAttrs.tabIndex = 0;
      tElement.attr('role', tAttrs.type);
  
      return function postLink(scope, element, attr, ngModelCtrl) {
        ngModelCtrl = ngModelCtrl || $mdUtil.fakeNgModel();
        var checked = false;
        $mdTheming(element);
  
        $mdAria.expectWithText(tElement, 'aria-label');
  
        // Reuse the original input[type=checkbox] directive from Angular core.
        // This is a bit hacky as we need our own event listener and own render
        // function.
        inputDirective.link.pre(scope, {
          on: angular.noop,
          0: {}
        }, attr, [ngModelCtrl]);
  
        // Used by switch. in Switch, we don't want click listeners; we have more granular
        // touchup/touchdown listening.
        if (!attr.mdNoClick) {
          element.on('click', listener);
        }
        element.on('keypress', keypressHandler);
        ngModelCtrl.$render = render;
  
        function keypressHandler(ev) {
          if(ev.which === $mdConstant.KEY_CODE.SPACE) {
            ev.preventDefault();
            listener(ev);
          }
        }
        function listener(ev) {
          if (element[0].hasAttribute('disabled')) return;
  
          scope.$apply(function() {
            checked = !checked;
            ngModelCtrl.$setViewValue(checked, ev && ev.type);
            ngModelCtrl.$render();
          });
        }
  
        function render() {
          checked = ngModelCtrl.$viewValue;
          if(checked) {
            element.addClass(CHECKED_CSS);
          } else {
            element.removeClass(CHECKED_CSS);
          }
        }
      };
    }
  }
  MdCheckboxDirective.$inject = ["inputDirective", "$mdInkRipple", "$mdAria", "$mdConstant", "$mdTheming", "$mdUtil"];
  
  })();
  