whole_func_string: function MdChipsCtrl ($scope, $attrs, $mdConstant, $log, $element, $timeout, $mdUtil,
                        $exceptionHandler) {
    /** @type {$timeout} **/
    this.$timeout = $timeout;
  
    /** @type {Object} */
    this.$mdConstant = $mdConstant;
  
    /** @type {angular.$scope} */
    this.$scope = $scope;
  
    /** @type {angular.$scope} */
    this.parent = $scope.$parent;
  
    /** @type {$mdUtil} */
    this.$mdUtil = $mdUtil;
  
    /** @type {$log} */
    this.$log = $log;
  
    /** @type {$exceptionHandler} */
    this.$exceptionHandler = $exceptionHandler;
  
    /** @type {$element} */
    this.$element = $element;
  
    /** @type {$attrs} */
    this.$attrs = $attrs;
  
    /** @type {angular.NgModelController} */
    this.ngModelCtrl = null;
  
    /** @type {angular.NgModelController} */
    this.userInputNgModelCtrl = null;
  
    /** @type {MdAutocompleteCtrl} */
    this.autocompleteCtrl = null;
  
    /** @type {Element} */
    this.userInputElement = null;
  
    /** @type {Array.<Object>} */
    this.items = [];
  
    /** @type {number} */
    this.selectedChip = -1;
  
    /** @type {string} */
    this.enableChipEdit = $mdUtil.parseAttributeBoolean($attrs.mdEnableChipEdit);
  
    /** @type {string} */
    this.addOnBlur = $mdUtil.parseAttributeBoolean($attrs.mdAddOnBlur);
  
    /**
     * The text to be used as the aria-label for the input.
     * @type {string}
     */
    this.inputAriaLabel = 'Chips input.';
  
    /**
     * Hidden hint text to describe the chips container. Used to give context to screen readers when
     * the chips are readonly and the input cannot be selected.
     *
     * @type {string}
     */
    this.containerHint = 'Chips container. Use arrow keys to select chips.';
  
    /**
     * Hidden hint text for how to delete a chip. Used to give context to screen readers.
     * @type {string}
     */
    this.deleteHint = 'Press delete to remove this chip.';
  
    /**
     * Hidden label for the delete button. Used to give context to screen readers.
     * @type {string}
     */
    this.deleteButtonLabel = 'Remove';
  
    /**
     * Model used by the input element.
     * @type {string}
     */
    this.chipBuffer = '';
  
    /**
     * Whether to use the transformChip expression to transform the chip buffer
     * before appending it to the list.
     * @type {boolean}
     */
    this.useTransformChip = false;
  
    /**
     * Whether to use the onAdd expression to notify of chip additions.
     * @type {boolean}
     */
    this.useOnAdd = false;
  
    /**
     * Whether to use the onRemove expression to notify of chip removals.
     * @type {boolean}
     */
    this.useOnRemove = false;
  
    /**
     * The ID of the chips wrapper which is used to build unique IDs for the chips and the aria-owns
     * attribute.
     *
     * Defaults to '_md-chips-wrapper-' plus a unique number.
     *
     * @type {string}
     */
    this.wrapperId = '';
  
    /**
     * Array of unique numbers which will be auto-generated any time the items change, and is used to
     * create unique IDs for the aria-owns attribute.
     *
     * @type {Array<number>}
     */
    this.contentIds = [];
  
    /**
     * The index of the chip that should have it's `tabindex` property set to `0` so it is selectable
     * via the keyboard.
     *
     * @type {number}
     */
    this.ariaTabIndex = null;
  
    /**
     * After appending a chip, the chip will be focused for this number of milliseconds before the
     * input is refocused.
     *
     * **Note:** This is **required** for compatibility with certain screen readers in order for
     * them to properly allow keyboard access.
     *
     * @type {number}
     */
    this.chipAppendDelay = DEFAULT_CHIP_APPEND_DELAY;
  
    /**
     * Collection of functions to call to un-register watchers
     *
     * @type {Array}
     */
    this.deRegister = [];
  
    this.init();
  }
func_code_string: function MdChipsCtrl ($scope, $attrs, $mdConstant, $log, $element, $timeout, $mdUtil,
                        $exceptionHandler) {
    /** @type {$timeout} **/
    this.$timeout = $timeout;
  
    /** @type {Object} */
    this.$mdConstant = $mdConstant;
  
    /** @type {angular.$scope} */
    this.$scope = $scope;
  
    /** @type {angular.$scope} */
    this.parent = $scope.$parent;
  
    /** @type {$mdUtil} */
    this.$mdUtil = $mdUtil;
  
    /** @type {$log} */
    this.$log = $log;
  
    /** @type {$exceptionHandler} */
    this.$exceptionHandler = $exceptionHandler;
  
    /** @type {$element} */
    this.$element = $element;
  
    /** @type {$attrs} */
    this.$attrs = $attrs;
  
    /** @type {angular.NgModelController} */
    this.ngModelCtrl = null;
  
    /** @type {angular.NgModelController} */
    this.userInputNgModelCtrl = null;
  
    /** @type {MdAutocompleteCtrl} */
    this.autocompleteCtrl = null;
  
    /** @type {Element} */
    this.userInputElement = null;
  
    /** @type {Array.<Object>} */
    this.items = [];
  
    /** @type {number} */
    this.selectedChip = -1;
  
    /** @type {string} */
    this.enableChipEdit = $mdUtil.parseAttributeBoolean($attrs.mdEnableChipEdit);
  
    /** @type {string} */
    this.addOnBlur = $mdUtil.parseAttributeBoolean($attrs.mdAddOnBlur);
  
    /**
     * The text to be used as the aria-label for the input.
     * @type {string}
     */
    this.inputAriaLabel = 'Chips input.';
  
    /**
     * Hidden hint text to describe the chips container. Used to give context to screen readers when
     * the chips are readonly and the input cannot be selected.
     *
     * @type {string}
     */
    this.containerHint = 'Chips container. Use arrow keys to select chips.';
  
    /**
     * Hidden hint text for how to delete a chip. Used to give context to screen readers.
     * @type {string}
     */
    this.deleteHint = 'Press delete to remove this chip.';
  
    /**
     * Hidden label for the delete button. Used to give context to screen readers.
     * @type {string}
     */
    this.deleteButtonLabel = 'Remove';
  
    /**
     * Model used by the input element.
     * @type {string}
     */
    this.chipBuffer = '';
  
    /**
     * Whether to use the transformChip expression to transform the chip buffer
     * before appending it to the list.
     * @type {boolean}
     */
    this.useTransformChip = false;
  
    /**
     * Whether to use the onAdd expression to notify of chip additions.
     * @type {boolean}
     */
    this.useOnAdd = false;
  
    /**
     * Whether to use the onRemove expression to notify of chip removals.
     * @type {boolean}
     */
    this.useOnRemove = false;
  
    /**
     * The ID of the chips wrapper which is used to build unique IDs for the chips and the aria-owns
     * attribute.
     *
     * Defaults to '_md-chips-wrapper-' plus a unique number.
     *
     * @type {string}
     */
    this.wrapperId = '';
  
    /**
     * Array of unique numbers which will be auto-generated any time the items change, and is used to
     * create unique IDs for the aria-owns attribute.
     *
     * @type {Array<number>}
     */
    this.contentIds = [];
  
    /**
     * The index of the chip that should have it's `tabindex` property set to `0` so it is selectable
     * via the keyboard.
     *
     * @type {number}
     */
    this.ariaTabIndex = null;
  
    /**
     * After appending a chip, the chip will be focused for this number of milliseconds before the
     * input is refocused.
     *
     * **Note:** This is **required** for compatibility with certain screen readers in order for
     * them to properly allow keyboard access.
     *
     * @type {number}
     */
    this.chipAppendDelay = DEFAULT_CHIP_APPEND_DELAY;
  
    /**
     * Collection of functions to call to un-register watchers
     *
     * @type {Array}
     */
    this.deRegister = [];
  
    this.init();
  }
func_documentation_string: Controller for the MdChips component. Responsible for adding to and
  removing from the list of chips, marking chips as selected, and binding to
  the models of various input components.
  
  @param $scope
  @param $attrs
  @param $mdConstant
  @param $log
  @param $element
  @param $timeout
  @param $mdUtil
  @param $exceptionHandler
  @constructor