public function display(array $tags, array $options = [], array $attrs = []) {
		if (empty($tags)) {
			return '';
		}
		$options += $this->_config;

		$tags = $this->calculateWeights($tags);

		$weights = Hash::extract($tags, $options['extract']);
		$maxWeight = max($weights);
		$minWeight = min($weights);

		// find the range of values
		$spread = $maxWeight - $minWeight;
		if ($spread == 0) {
			$spread = 1;
		}

		if ($options['shuffle'] == true) {
			shuffle($tags);
		}

		$cloud = [];
		foreach ($tags as $tag) {
			$tagWeight = $tag['weight'];

			$size = $options['minSize'] + (
				($tagWeight - $minWeight) * (
					($options['maxSize'] - $options['minSize']) / $spread
				)
			);
			$size = $tag['size'] = ceil($size);

			$content = $this->Html->link(
				$tag[$options['tagModel']]['label'],
				$this->_tagUrl($tag, $options),
				['id' => 'tag-' . $tag[$options['tagModel']]['id']]
			);
			$data = compact('size', 'content');
			$cloud[] = $this->templater()->format('item', $data);
		}

		$content = implode(PHP_EOL, $cloud);
		$attrs = $this->templater()->formatAttributes($attrs);
		$data = compact('attrs', 'content');

		return $this->templater()->format('wrapper', $data);
	}